﻿<?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++博客-Thinking in zmllegtui.-随笔分类-Algorithm &amp; DS</title><link>http://www.cppblog.com/zmllegtui/category/8639.html</link><description>Stuff in my mind. Living like a DOG. </description><language>zh-cn</language><lastBuildDate>Wed, 29 Oct 2008 03:47:25 GMT</lastBuildDate><pubDate>Wed, 29 Oct 2008 03:47:25 GMT</pubDate><ttl>60</ttl><item><title>Trie树</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65374.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Tue, 28 Oct 2008 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65374.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65374.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65374.html</trackback:ping><description><![CDATA[转载自<a href="http://epic.32o.cn/article.asp?id=47">http://epic.32o.cn/article.asp?id=47</a><br><br>今天在vijos有人问我trie树怎么弄。索性就写详细点，让众多新手参考一下。<br>Trie树就是字符树，其核心思想就是空间换时间。<br>举个简单的例子。<br>给你100000个长度不超过10的单词。对于每一个单词，我们要判断他出没出现过，如果出现了，第一次出现第几个位置。<br>这题当然可以用hash来，但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词，我要询问它的前缀是否出现过。这样hash就不好搞了，而用trie还是很简单。<br>现在回到例子中，如果我们用最傻的方法，对于每一个单词，我们都要去查找它前面的单词中是否有它。那么这个算法的复杂度就是O(n^2)。显然对于100000的范围难以接受。现在我们换个思路想。假设我要查询的单词是abcd，那么在他前面的单词中，以b，c，d，f之类开头的我显然不必考虑。而只要找以a开头的中是否存在abcd就可以了。同样的，在以a开头中的单词中，我们只要考虑以b作为第二个字母的&#8230;&#8230;这样一个树的模型就渐渐清晰了&#8230;&#8230;<br>假设有b，abc，abd，bcd，abcd，efg，hii这6个单词，我们构建的树就是这样的。<br><img alt="" src="http://epic.32o.cn/attachments/month_0707/z200777202049.JPG" border=0><br>对于每一个节点，从根遍历到他的过程就是一个单词，如果这个节点被标记为红色，就表示这个单词存在，否则不存在。<br>那么，对于一个单词，我只要顺着他从跟走到对应的节点，再看这个节点是否被标记为红色就可以知道它是否出现过了。把这个节点标记为红色，就相当于插入了这个单词。<br>这样一来我们询问和插入可以一起完成，所用时间仅仅为单词长度，在这一个样例，便是10。<br>我们可以看到，trie树每一层的节点数是26^i级别的。所以为了节省空间。我们用动态链表，或者用数组来模拟动态。空间的花费，不会超过单词数&#215;单词长度。<br>程序非常好实现，区区几行，我就不写了，自己琢磨吧。<br>如果还是不懂请留言。<br><br>下面提供一个查找单词是否在给定的字典中的标程：<br>program trie;<br>type<br>&nbsp;&nbsp;&nbsp;&nbsp;rec=record<br>&nbsp;&nbsp;&nbsp;&nbsp;Got:boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;next:array['a'..'z'] of Longint;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>var<br>&nbsp;&nbsp; n,i,j,Now,Tn:Longint;<br>&nbsp;&nbsp; s:string;<br>&nbsp;&nbsp; T:array[1..1000] of rec;<br>&nbsp;&nbsp; flag:boolean;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp; Readln(n);<br>&nbsp;&nbsp;&nbsp;&nbsp; Tn:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp; T[1].Got:=False;<br>&nbsp;&nbsp;&nbsp;&nbsp; fillchar(T[1].next,sizeof(T[1].next),0);<br>&nbsp;&nbsp;&nbsp;&nbsp; for i:=1 to n do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readln(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Now:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j:=1 to length(s) do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if T[now].Next[s[j]]&lt;&gt;0 then now:=t[now].next[s[j]] else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(Tn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[tn].Got:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillchar(T[tn].next,sizeof(T[tn].next),0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[Now].next[s[j]]:=Tn;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now:=Tn;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T[now].Got:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; readln(s);<br>&nbsp;&nbsp;&nbsp;&nbsp; while s&lt;&gt;'exit' do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now:=1;flag:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for j:=1 to length(s) do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if T[now].Next[s[j]]&lt;&gt;0 then now:=t[now].next[s[j]] else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if flag then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if T[now].Got=false then flag:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if flag then writeln('the word is in the tree') else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeln('can''t find it!');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Readln(s);<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>end.<br><br>一个单词前缀树的题，但是我却用trie树+bm算法简化版做的<br><br>密码破译<br>【问题描述】<br>由于最近功课过于繁忙，Tim竟然忘记了自己电脑的密码，幸运的是Tim在设计电脑密码的时候，用了一个非常特殊的方法记录下了密码。这个方法是：Tim把密码和其它的一些假密码共同记录在了一个本子上面。为了能够从这些字符串中找出正确的密码，Tim又在另外一个本子上面写了一个很长的字符串，而正确的密码就是在这个字符串中出现次数最多的一个密码。例如串ababa，假若密码是abab和aba，那么正确的密码是aba，因为aba在这个字符串中出现了2次。<br>现在你得到了Tim的这两个本子，希望你能够编写一个程序帮助Tim找出正确的密码。<br>【输入】<br>输入由两个部分组成。其中第一部分由若干行组成，每一行记录了一个密码，密码的均长度小于等于255位，并且都由小写字母组成。然后一个空行，第二部分记录了一个很长的字符串，并且以&#8217;.&#8217;结束，其中只包含了小写字母。<br><br>【输出】<br>输出文件名为Pass.out。输出文件由仅有一行，为一个整数，表示正确密码在字符串中出现的次数。如果这个出现次数为0，输出&#8220;No find&#8221;。<br><br>【样例】：<br>Pass.in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pass.out<br>ab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br>abc<br>bdc<br>abcd<br><br>abcabcabcdbdabcbabdbcabdbdbdbd.<br><br>program pass;<br>const<br>&nbsp;&nbsp;&nbsp;&nbsp; filein='pass.in';<br>&nbsp;&nbsp;&nbsp;&nbsp; fileout='pass.out';<br>type<br>&nbsp;&nbsp;&nbsp;&nbsp;rec=record<br>&nbsp;&nbsp;&nbsp;&nbsp;which:Longint;<br>&nbsp;&nbsp;&nbsp;&nbsp;Next:array['a'..'z'] of Longint;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>var<br>&nbsp;&nbsp; o,now,i,Tn,Dn,temp,Ans:Longint;<br>&nbsp;&nbsp; s:string;<br>&nbsp;&nbsp; c:char;<br>&nbsp;&nbsp; T:array[1..1000000] of REc;<br>&nbsp;&nbsp; data:array[1..5000] of string;<br>&nbsp;&nbsp; dLong:array[1..5000] of longint;<br>&nbsp;&nbsp; use:array[1..5000] of boolean;<br>&nbsp;&nbsp; d:array[1..3000000] of char;<br>&nbsp;&nbsp; Appear:array['a'..'z'] of Longint;<br>&nbsp;&nbsp; Long:Longint;<br>&nbsp;&nbsp; f:boolean;<br>function Compare(x:Longint):Longint;<br>var<br>&nbsp;&nbsp; s,i,Now,L,temp:Longint;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp; s:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp; fillchar(appear,sizeof(appear),0);<br>&nbsp;&nbsp;&nbsp;&nbsp; L:=length(data[x]);<br>&nbsp;&nbsp;&nbsp;&nbsp; for i:=1 to L do<br>&nbsp;&nbsp;&nbsp;&nbsp; Appear[data[x][i]]:=i;<br>&nbsp;&nbsp;&nbsp;&nbsp; Now:=L;<br>&nbsp;&nbsp;&nbsp;&nbsp; while NOw&lt;=Long do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if D[now]&lt;&gt;data[x][L] then Inc(now,L-Appear[D[now]]) else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp:=L-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (temp&gt;0) and (Data[x][temp]=d[Now-(L-temp)]) do dec(temp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if temp=0 then Inc(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(Now);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; Compare:=S;<br>end;<br>procedure sort(l,r:Longint);<br>var<br>&nbsp;&nbsp; i,j,x:Longint;<br>&nbsp;&nbsp; sy:string;<br>&nbsp;&nbsp; ly:Longint;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp; i:=l;j:=r;x:=dLong[(l+r) div 2];<br>&nbsp;&nbsp;&nbsp;&nbsp; repeat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while dLong[i]&lt;x do inc(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while dlong[j]&gt;x do dec(j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if i&lt;=j then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sy:=data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i]:=data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[j]:=sy;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ly:=dlong[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlong[i]:=dlong[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlong[j]:=ly;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dec(j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; until i&gt;j;<br>&nbsp;&nbsp;&nbsp;&nbsp; if i&lt;r then sort(i,r);<br>&nbsp;&nbsp;&nbsp;&nbsp; if j&gt;l then sort(l,j);<br>end;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp; fillchar(use,sizeof(use),true);<br>&nbsp;&nbsp;&nbsp;&nbsp; fillchar(t,sizeof(t),0);<br>&nbsp;&nbsp;&nbsp;&nbsp; Assign(input,filein);<br>&nbsp;&nbsp;&nbsp;&nbsp; Assign(output,fileout);<br>&nbsp;&nbsp;&nbsp;&nbsp; rewrite(output);<br>&nbsp;&nbsp;&nbsp;&nbsp; reset(input);<br>&nbsp;&nbsp;&nbsp;&nbsp; tn:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp; readln(s);<br>&nbsp;&nbsp;&nbsp;&nbsp; Dn:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp; while s&lt;&gt;'' do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(dn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[dn]:=s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dLong[dn]:=length(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readln(s);<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; sort(1,Dn);<br>&nbsp;&nbsp;&nbsp;&nbsp; for o:=1 to Dn do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s:=data[o];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOw:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i:=1 to Length(s) do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if t[now].Next[s[i]]&lt;&gt;0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now:=t[now].next[s[i]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if t[now].which&lt;&gt;0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(tn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t[now].next[s[i]]:=tn;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; now:=tn;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if f then t[now].which:=o;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not f then use[o]:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; Long:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp; repeat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read(c);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if c&lt;&gt;'.' then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(Long);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[Long]:=c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; until c='.';<br>&nbsp;&nbsp;&nbsp;&nbsp; for i:=1 to Dn do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if use[i] then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp:=Compare(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if temp&gt;ans then ans:=temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp; if ans=0 then writeln('No find') else<br>&nbsp;&nbsp;&nbsp;&nbsp; writeln(Ans);<br>&nbsp;&nbsp;&nbsp;&nbsp; close(input);<br>&nbsp;&nbsp;&nbsp;&nbsp; close(output);<br>end.<br>
<img src ="http://www.cppblog.com/zmllegtui/aggbug/65374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-28 20:18 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/28/65374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>螺旋队列</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65361.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Tue, 28 Oct 2008 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65361.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65361.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65361.html</trackback:ping><description><![CDATA[<p>// 问题</p>
<p>43&nbsp;<wbr>&nbsp;<wbr> 44&nbsp;<wbr>&nbsp;<wbr> 45&nbsp;<wbr>&nbsp;<wbr> 46&nbsp;<wbr>&nbsp;<wbr> 47&nbsp;<wbr>&nbsp;<wbr> 48&nbsp;<wbr>&nbsp;<wbr> 49</p>
<p>42&nbsp;<wbr>&nbsp;<wbr> 21&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>22&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>23&nbsp;<wbr>&nbsp;<wbr> 24&nbsp;<wbr>&nbsp;<wbr> 25&nbsp;<wbr>&nbsp;<wbr> 26</p>
<p>41&nbsp;<wbr>&nbsp;<wbr> 20&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>9&nbsp;<wbr>&nbsp;<wbr> 10&nbsp;<wbr>&nbsp;<wbr> 27</p>
<p>40&nbsp;<wbr>&nbsp;<wbr> 19&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 6&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>1&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>2&nbsp;<wbr>&nbsp;<wbr> 11&nbsp;<wbr>&nbsp;<wbr> 28</p>
<p>39&nbsp;<wbr>&nbsp;<wbr> 18&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>3&nbsp;<wbr>&nbsp;<wbr> 12&nbsp;<wbr>&nbsp;<wbr> 29&nbsp;<wbr></p>
<p>38&nbsp;<wbr>&nbsp;<wbr> 17&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>16&nbsp;<wbr>&nbsp;<wbr> 15&nbsp;<wbr>&nbsp;<wbr> 14&nbsp;<wbr>&nbsp;<wbr> 13 &nbsp;<wbr> 30</p>
<p>37&nbsp;<wbr>&nbsp;<wbr> 36&nbsp;<wbr>&nbsp;<wbr> 35&nbsp;<wbr>&nbsp;<wbr> 34&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>33&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>32&nbsp;<wbr>&nbsp;<wbr> 31&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 以上数字的排列规律，设1点的坐标是（0，0），x方向向右为正，y方向向下为正。例如，7的坐标为</p>
<p>(-1,-1)，2的坐标为（1，0），3的坐标为（1，1）。编程实现输入任意一点坐标（x,y），输出所对应的数字。</p>
<p>&nbsp;<wbr></p>
<p>// 解答</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 右向x方向，下向y方向。从图中不难发现，右上角vc=(2*t+1)(2*t+1),t为该圈x,y绝对值的最大值。例如vc=9、25、49、81........，算出vc后，就分4个判断区域，分别判断点落在该圈4条边的哪条边上，直接使用if语句，利用x、y与t的关系，从而计算出具体坐标点的值。该问题，如果让中学生用自然语言来写伪代码，估计会很快。</p>
<img src ="http://www.cppblog.com/zmllegtui/aggbug/65361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-28 19:58 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/28/65361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hash</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65327.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Tue, 28 Oct 2008 06:44:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65327.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65327.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65327.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65327.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  Hashing定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法，称为散列法，也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快，这种方法一般用来在数据库中建立索引并进行搜索，同时还用在各种解密算法中。<br>      设所有可能出现的关键字集合记为U(简称全集)。实际发生(即实际存储)的关键字集合记为K（|K|比|U|小得多）。|K|是集合K中元素的个数。<br>      散列方法是使用函数hash将U映射到表T[0..m-1]的下标上（m=O(|U|)）。这样以U中关键字为自变量，以h为函数的运算结果就是相应结点的存储地址。从而达到在O(1)时间内就可完成查找。<br>……<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/zmllegtui/archive/2008/10/28/65327.html'>阅读全文</a><img src ="http://www.cppblog.com/zmllegtui/aggbug/65327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-28 14:44 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/28/65327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Merge Sort</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65324.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Tue, 28 Oct 2008 06:34:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65324.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65324.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/28/65324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65324.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65324.html</trackback:ping><description><![CDATA[&nbsp;
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">合并算法的核心操作就是将一维数组中前后相邻的两个两个有序序列合并成一个有序序列。合并算法也可以采用递归算法来实现，形式上较为简单,但实用性很差。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">合并算法的合并次数是一个非常重要的量,根据计算当数组中有3到4个元素时,合并次数是2次,当有5到8个元素时,合并次数是3次,当有9到16个元素时,合并次数是4次，按照这一规律,当有N个子序列时可以推断出合并的次数是X(2&nbsp;&gt;=N,符合此条件的最小那个X)。 </p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">源程序：</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">program hebing;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">const</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;n=10;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">var</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;a:array[1..n] of integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;i:integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">procedure init;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;var</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; i:integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; for i:=1 to n do read(a[i]);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; readln;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">procedure merge(low,mid,high:integer);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;var</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; h,i,j,k:integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; b:array[1..n] of integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; h:=low; i:=low; j:=mid+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; while (h&lt;=mid) and (j&lt;=high) do</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a[h]&lt;=a[j]) then</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]:=a[h]; h:=h+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]:=a[j]; j:=j+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i:=i+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; if h&gt;mid then</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for k:=j to high do</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]:=a[k]; i:=i+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; else</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for k:=h to mid do</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]:=a[k]; i:=i+1;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; for k:=low to high do</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[k]:=b[k];</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">procedure mergesort(low,high:integer);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;var</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; mid:integer;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp; if low&lt;high then</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mid:=(low+high) div 2;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergesort(low,mid);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergesort(mid+1,high);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; merge(low,mid,high);</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;end;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman">&nbsp;</p>
<img src ="http://www.cppblog.com/zmllegtui/aggbug/65324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-28 14:34 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/28/65324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>质数判断算法</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65073.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Sun, 26 Oct 2008 03:52:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65073.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65073.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65073.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有人做过这样的验算：1^2+1+41=43,2^2+2+41=47,3^2+3+41=53……于是就可以有这样一个公式：设一正数为n，则n^2+n+41的值一定是一个质数。这个式子一直到n=39时，都是成立的。但n=40时，其式子就不成立了，因为40^2+40+41=1681=41*41。<br><br>      研究发现质数除2以外都是奇数，而奇数除了【奇数*奇数】(或再加“*奇数”）都是质数。那么用计算机先把【奇数*奇数】(或再加“*奇数”）（比如9，15，21，25，27，33，35，39……）都求出来，再找奇数中上面没提到的那些数，那些数就是素数。<br>      <br>      有近似公式： x 以内质数个数约等于 x / ln(x) .ln是自然对数的意思。准确的质数公式尚未给出。10 以内共 4 个质数。100 以内共 25 个质数。<br>……<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/zmllegtui/archive/2008/10/26/65073.html'>阅读全文</a><img src ="http://www.cppblog.com/zmllegtui/aggbug/65073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-26 11:52 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/26/65073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算二进制位"1"的个数</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65071.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Sun, 26 Oct 2008 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65071.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65071.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65071.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65071.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65071.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 写一个函数，返回数字中二进制位为'1'的个数。<br>方法1：分别判断各个位<br>方法2：循环中直接计算1的数量<br>方法3：并行计算的<br><br>PS：<br>这些方法是计算二进制形式1的个数，如果用来判断一个数是否是2的整数次幂，可以用这些方法，但是对此还有更好的方法，就是 A xor (A-1) == 0。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/zmllegtui/archive/2008/10/26/65071.html'>阅读全文</a><img src ="http://www.cppblog.com/zmllegtui/aggbug/65071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-26 11:42 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/26/65071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>01背包问题的贪婪算法</title><link>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65069.html</link><dc:creator>zml_cnnk</dc:creator><author>zml_cnnk</author><pubDate>Sun, 26 Oct 2008 03:32:00 GMT</pubDate><guid>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65069.html</guid><wfw:comment>http://www.cppblog.com/zmllegtui/comments/65069.html</wfw:comment><comments>http://www.cppblog.com/zmllegtui/archive/2008/10/26/65069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zmllegtui/comments/commentRss/65069.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zmllegtui/services/trackbacks/65069.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  0/1背包问题有好几种贪婪策略，每个贪婪策略都采用多步过程来完成背包的装入，在每一步过程中利用贪婪准则选择一个物品装入背包。<br>   <br>   1、从剩余的物品中，选出可以装入背包的价值最大的物品。利用这种规则，价值最大的物品首先被装入（假设有足够容量），然后是下一个价值最大的物品，如此继续下去。这种策略不能保证得到最优解。例如，n=2, weight=[100, 10, 10], prize=[20, 15, 15], count=105。当利用价值贪婪准则时，获得的解为x= [1, 0, 0]，这种方案的总价值为20。而最优解为[0, 1, 1]，其总价值为30。<br>……<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/zmllegtui/archive/2008/10/26/65069.html'>阅读全文</a><img src ="http://www.cppblog.com/zmllegtui/aggbug/65069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zmllegtui/" target="_blank">zml_cnnk</a> 2008-10-26 11:32 <a href="http://www.cppblog.com/zmllegtui/archive/2008/10/26/65069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>