﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-zzg-随笔分类-Windows</title><link>http://www.cppblog.com/zzg/category/10110.html</link><description>Walking to the sky</description><language>zh-cn</language><lastBuildDate>Mon, 25 May 2009 10:26:07 GMT</lastBuildDate><pubDate>Mon, 25 May 2009 10:26:07 GMT</pubDate><ttl>60</ttl><item><title>软件测试中的各种版本</title><link>http://www.cppblog.com/zzg/archive/2009/05/25/85729.html</link><dc:creator>zzg</dc:creator><author>zzg</author><pubDate>Mon, 25 May 2009 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/zzg/archive/2009/05/25/85729.html</guid><wfw:comment>http://www.cppblog.com/zzg/comments/85729.html</wfw:comment><comments>http://www.cppblog.com/zzg/archive/2009/05/25/85729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzg/comments/commentRss/85729.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzg/services/trackbacks/85729.html</trackback:ping><description><![CDATA[      很多软件在正式发布前都会发布一些预览版或者测试版，一般都叫“beta版”或者“rc版”，特别是开源软件，甚至有“alpha版”，下面来解释一下各个版本的意思。<br /><br /><font color="#33ff66">alpha版</font>：内部测试版。α是希腊字母的第一个，表示最早的版本，一般用户不要下载这个版本，这个版本包含很多BUG，功能也不全，主要是给开发人员和测试人员测试和找<font style="BACKGROUND-COLOR: #ffffff">BUG</font>用的。<br /><br /><font color="#00ff66">beta版</font>：公开测试版。β是希腊字母的第二个，顾名思义，这个版本比alpha版发布得晚一些，主要是给“部落”用户和忠实用户测试用的，该版本任然存在很多BUG，但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友，可以下载这个版本。<br /><br /><font color="#00ff33">rc版：</font>全写：Release Candidate（候选版本），该版本又较beta版更进一步了，该版本功能不再增加，和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似预览版，这个的发布就标明离最终发行版不远了。作为普通用户，如果你很急着用这个软件的话，也可以下载这个版本。<br /><br /><font color="#00ff33">stable版：</font>稳定版。在开源软件中，都有stable版，这个就是开源软件的最终发行版，用户可以放心大胆的用了。<br /><br />另外，对于商业软件，还有一下版本：<br />RTM版：全称为Release to Manufacture。零售版，工厂版。改版程序已经固定，就差工厂包装、光盘印图案等工作了。<br />OEM版：厂商定制版。<br />EVAL版：评估版。就是有30或者60天等使用期限的版本。<br />RTL版：Retail.(零售版)，这个版本就是真正发售的版本，有漂亮的包装、光盘、说明书等东西和高昂的价格。<br />CTP:Community Test Preview 社区测试试用版 <br /><img src ="http://www.cppblog.com/zzg/aggbug/85729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzg/" target="_blank">zzg</a> 2009-05-25 17:30 <a href="http://www.cppblog.com/zzg/archive/2009/05/25/85729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>约瑟夫环问题的递推解法（转）</title><link>http://www.cppblog.com/zzg/archive/2009/04/09/79372.html</link><dc:creator>zzg</dc:creator><author>zzg</author><pubDate>Thu, 09 Apr 2009 12:39:00 GMT</pubDate><guid>http://www.cppblog.com/zzg/archive/2009/04/09/79372.html</guid><wfw:comment>http://www.cppblog.com/zzg/comments/79372.html</wfw:comment><comments>http://www.cppblog.com/zzg/archive/2009/04/09/79372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzg/comments/commentRss/79372.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzg/services/trackbacks/79372.html</trackback:ping><description><![CDATA[        <font color="#33ff33"> 无论是用链表实现还是用数组实现都有一个共同点：要模拟整个游戏过程，不仅程序写起来比较烦，而且时间复杂度高达O (nm)，当n，m非常大(例如上百万，上千万)的时候，几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号，而不是要 读者模拟整个过程。因此如果要追求效率，就要打破常规，实施一点数学策略。<br /></font><br />为了讨论方便，先把问题稍微改变一下，并不影响原意：<br /><br />问题描述：n个人（编号0~(n-1))，从0开始报数，报到(m-1)的退出，剩下的人继续从0开始报数。求胜利者的编号。<br /><br /><font color="#0099ff">我们知道第一个人(编号一定是m%n-1) 出列之后，剩下的n-1个人组成了一个新的约瑟夫环（以编号为k=m%n的人开始）:<br />   k   k+1   k+2   ... n-2, n-1, 0, 1, 2, ... k-2</font><br />并且从k开始报0。<br /><br />现在我们把他们的编号做一下转换：<br />k      --&gt; 0<br />k+1    --&gt; 1<br />k+2    --&gt; 2<br />...<br />...<br />k-2    --&gt; n-2<br />k-1    --&gt; n-1<br /><br />变换后就完完全全成为了(n-1)个人报数的子问题，假如我们知道这个子问题的解：例如x是最终的胜利者，那么根据上面这个表把这个x变回去不刚好就是n个人情况的解吗？！！变回去的公式很简单，相信大家都可以推出来：x'=(x+k)%n<br /><br />如何知道(n-1)个人报数的问题的解？对，只要知道(n-2)个人的解就行了。(n-2)个人的解呢？当然是先求(n-3)的情况 ---- 这显然就是一个倒推问题！好了，思路出来了，下面写递推公式：<br /><br />令f表示i个人玩游戏报m退出最后胜利者的编号，最后的结果自然是f[n]<br /><br /><font color="#66ff33">递推公式<br />f[1]=0;<br />f=(f[i-1]+m)%i;   (i&gt;1)</font><br /><br />有了这个公式，我们要做的就是从1-n顺序算出f的数值，最后结果是f[n]。因为实际生活中编号总是从1开始，我们输出f[n]+1<br /><br />由于是逐级递推，不需要保存每个f，程序也是异常简单：<br /><br /><font color="#33ccff">#include &lt;stdio.h&gt;<br /><br />main()<br />{<br />   int n, m, i, s=0;<br />   printf ("N M = "); scanf("%d%d", &amp;n, &amp;m);<br />   for (i=2; i&lt;=n; i++) s=(s+m)%i;<br />   printf ("The winner is %dn", s+1);<br />}</font><br /><br />这个算法的时间复杂度为O(n)，相对于模拟算法已经有了很大的提高。算n，m等于一百万，一千万的情况不是问题了。可见，适当地运用数学策略，不仅可以让编程变得简单，而且往往会成倍地提高算法执行效率。 <img src ="http://www.cppblog.com/zzg/aggbug/79372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzg/" target="_blank">zzg</a> 2009-04-09 20:39 <a href="http://www.cppblog.com/zzg/archive/2009/04/09/79372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>