﻿<?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++博客-二进制空间-随笔分类-Ar!thmEt!c</title><link>http://www.cppblog.com/asp/category/2871.html</link><description>See, I'm living...</description><language>zh-cn</language><lastBuildDate>Sat, 24 May 2008 01:31:13 GMT</lastBuildDate><pubDate>Sat, 24 May 2008 01:31:13 GMT</pubDate><ttl>60</ttl><item><title>自己写的一些常见算法的实现</title><link>http://www.cppblog.com/asp/archive/2006/10/25/14147.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Wed, 25 Oct 2006 12:19:00 GMT</pubDate><guid>http://www.cppblog.com/asp/archive/2006/10/25/14147.html</guid><wfw:comment>http://www.cppblog.com/asp/comments/14147.html</wfw:comment><comments>http://www.cppblog.com/asp/archive/2006/10/25/14147.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cppblog.com/asp/comments/commentRss/14147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asp/services/trackbacks/14147.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">    由于最近在上数据结构课，所以自己写了一些算法的实现，请大家狠狠批评……<br /><br />    <strong><font face="Verdana">中值表达式的计值</font></strong><br />    用double写了一个中值表达式的计值，可以算小数的。<br />    文章链接：</font>
				<a href="/asp/articles/14145.html">
						<font face="Verdana" size="2">http://www.cppblog.com/asp/articles/14145.html</font> </a> <br /><font size="2"><br />    <strong>中缀表达式转后缀表达式</strong><br />    没有什么可说的，很无聊的一个程序……<br />    文章链接： <a href="/asp/articles/14265.html"><font face="Verdana" size="2">http://www.cppblog.com/asp/articles/14265.html</font></a><br /><br />    <strong>归并排序+求逆序数</strong><br />    用模板写的一个归并排序，并且注明了用归并排序求逆序数的方法……<br />    文章链接： </font><a href="/asp/articles/14261.html"><font face="Verdana" size="2">http://www.cppblog.com/asp/articles/14261.html</font></a></p>
<img src ="http://www.cppblog.com/asp/aggbug/14147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asp/" target="_blank">Asp</a> 2006-10-25 20:19 <a href="http://www.cppblog.com/asp/archive/2006/10/25/14147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最快的最大公约数的算法</title><link>http://www.cppblog.com/asp/archive/2006/10/22/14012.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Sun, 22 Oct 2006 11:18:00 GMT</pubDate><guid>http://www.cppblog.com/asp/archive/2006/10/22/14012.html</guid><wfw:comment>http://www.cppblog.com/asp/comments/14012.html</wfw:comment><comments>http://www.cppblog.com/asp/archive/2006/10/22/14012.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/asp/comments/commentRss/14012.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asp/services/trackbacks/14012.html</trackback:ping><description><![CDATA[
		<font size="2">    全部用移位和++，--实现，没有费时的%……</font>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">Source Code<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">common divisor最大公约数</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">inline unsigned </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> cd(unsigned </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> x,unsigned </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> y)   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> <br /><img id="Codehighlighter1_95_362_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_362_Open_Text.style.display='none'; Codehighlighter1_95_362_Closed_Image.style.display='inline'; Codehighlighter1_95_362_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_95_362_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_362_Closed_Text.style.display='none'; Codehighlighter1_95_362_Open_Image.style.display='inline'; Codehighlighter1_95_362_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_95_362_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_95_362_Open_Text">
						<span style="COLOR: #000000">{   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    unsigned </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i,j,t;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(x</span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> y;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(y</span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">) </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> x;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(i</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000">(x</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">);x</span>
						<span style="COLOR: #000000">&gt;&gt;=</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i);   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(j</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000">(y</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">);y</span>
						<span style="COLOR: #000000">&gt;&gt;=</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">j);   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">i) i</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">j;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(;;)   <br /><img id="Codehighlighter1_266_357_Open_Image" onclick="this.style.display='none'; Codehighlighter1_266_357_Open_Text.style.display='none'; Codehighlighter1_266_357_Closed_Image.style.display='inline'; Codehighlighter1_266_357_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_266_357_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_266_357_Closed_Text.style.display='none'; Codehighlighter1_266_357_Open_Image.style.display='inline'; Codehighlighter1_266_357_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_266_357_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_266_357_Open_Text">
								<span style="COLOR: #000000">{   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(x</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">y) t</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">y,y</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">x,x</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">t;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000">(x</span>
								<span style="COLOR: #000000">-=</span>
								<span style="COLOR: #000000">y)) </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> y</span>
								<span style="COLOR: #000000">&lt;&lt;</span>
								<span style="COLOR: #000000">i;   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">(;</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000">(x</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);x</span>
								<span style="COLOR: #000000">&gt;&gt;=</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> </span>
		</div>
<img src ="http://www.cppblog.com/asp/aggbug/14012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asp/" target="_blank">Asp</a> 2006-10-22 19:18 <a href="http://www.cppblog.com/asp/archive/2006/10/22/14012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BM匹配算法</title><link>http://www.cppblog.com/asp/archive/2006/10/11/13583.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Wed, 11 Oct 2006 12:45:00 GMT</pubDate><guid>http://www.cppblog.com/asp/archive/2006/10/11/13583.html</guid><wfw:comment>http://www.cppblog.com/asp/comments/13583.html</wfw:comment><comments>http://www.cppblog.com/asp/archive/2006/10/11/13583.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/asp/comments/commentRss/13583.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/asp/services/trackbacks/13583.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">    今天上课老师讲了</span>
				<span lang="EN-US">KMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的模式匹配算法，看了觉得很不错，不过当</span>
				<span lang="EN-US">KMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">next</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数组全为</span>
				<span lang="EN-US">-1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，就退化成了朴素的模式匹配，觉得蛮郁闷的，后来自己看了</span>
				<span lang="EN-US">BM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">匹配算法，感觉比</span>
				<span lang="EN-US">KMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要好些，嘿嘿……</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span>
				<span lang="EN-US">KMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法，好像</span>
				<span lang="EN-US">Optimistic</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">写了一篇文章，我在此就不说了，大家有兴趣可以去看看:<br />    <a href="/sicheng/archive/2006/10/10/13537.html">http://www.cppblog.com/sicheng/archive/2006/10/10/13537.html</a></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">思想：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设给定模式串</span>
				<span lang="EN-US">”bomb” </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和字符串</span>
				<span lang="EN-US">“universal_super_bomb”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在进行匹配的时候从最后一个开始比较：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: uni<span style="COLOR: red">v</span>ersal_super_bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P: bom<span style="COLOR: red">b</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很明显，</span>
				<span lang="EN-US">e</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在模式串中根本不存在，那么最优的下一步匹配就应该是：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: universal_ super _bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P: <span style="mso-spacerun: yes">      </span>bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样显然效率就要比</span>
				<span lang="EN-US">KMP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高，而这就是</span>
				<span lang="EN-US">BM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">匹配算法的思想。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在那模式串</span>
				<span lang="EN-US">“bomb” </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来举例，模式串长度</span>
				<span lang="EN-US">m=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">BM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式匹配中有</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个数组，定一个是</span>
				<span lang="EN-US">n1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，一个是</span>
				<span lang="EN-US">n2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">n1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作用是记录字符集中的每个字符在模式中相对于最右端的最近距离，</span>
				<span lang="EN-US">b</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">离最右端的为</span>
				<span lang="EN-US">0</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">m</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">o</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，其他没有出现的则为</span>
				<span lang="EN-US">4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>
				<span lang="EN-US">n1[27]={4,0,4,4,4,4,4,4,4,4,4,4,1,4,2,4,4,4,4,4,4,4,4,4,4,4,4}</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">’_’</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">占</span>
				<span lang="EN-US">n[26]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span>
				<br />
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">n2的作用是存储模式中第i个字符不等时，可以移动的位数。<br />    考虑模式串的子串</span>
				<span lang="EN-US">s=p<sub>i+1</sub> p<sub>i+1</sub> …p<sub>4</sub></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，相对于模式串本身而言依次向左移动，如果子串</span>
				<span lang="EN-US">s</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有匹配上，则继续移动子串</span>
				<span lang="EN-US">s</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，直到匹配或者移出模式串最左端，设（匹配或移出）</span>
				<span lang="EN-US">+</span>
				<span style="COLOR: red; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">子串</span>
				<span lang="EN-US">s</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">移动的位数为</span>
				<span lang="EN-US">n</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则有</span>
				<span lang="EN-US">n2[i]=m-i+n-1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并且令</span>
				<span lang="EN-US">n2[m-1]=1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。那么对于模式串</span>
				<span lang="EN-US">”bomb” </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说</span>
				<span lang="EN-US">n2[4]={4,4,4,1}</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。（</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">看这里花了我好久的时间哦，明明是</span>
				<span lang="EN-US">C++</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据结构，里面其他地方的下标是从</span>
				<span lang="EN-US">0</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始，而这里却是从</span>
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始，晕死……）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接下来就是如何匹配。匹配的时候先把目标串和模式串左对齐，然后从模式串最右端开始比较，</span>
				<span lang="EN-US">p<sub>i</sub></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t<sub>j</sub></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不相等则计算</span>
				<span lang="EN-US">k=max(n1[(‘a’&lt;=t[j]&amp;&amp;t[j]&lt;=’z’)?(t[j]-‘a’):26],n2[i])</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并将模式</span>
				<span lang="EN-US">P</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">右移</span>
				<span lang="EN-US">k+i-m</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，用</span>
				<span lang="EN-US">p<sub>m-1</sub></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t<sub>j+k</sub></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">继续比较。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: uni<span style="COLOR: red">v</span>ersal_super_bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P: bom<span style="COLOR: red">b</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">p[3]!=t[3]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>
				<span lang="EN-US">k=max(n1[(‘a’&lt;=t[j]&amp;&amp;t[j]&lt;=’z’)?(t[j]-‘a’):26],n2[i])=max(4,1)=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则将模式串右移</span>
				<span lang="EN-US">k+(i+1)-m=4+4-4=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，</span>
				<span lang="EN-US">j+k=3+4=7</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">p[3]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t[7]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行比较：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: univers<span style="COLOR: red">a</span>l_super_bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P:<span style="mso-spacerun: yes">     </span>bom<span style="COLOR: red">b</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">p[3]!=t[7]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>
				<span lang="EN-US">k=max(n1[(‘a’&lt;=t[j]&amp;&amp;t[j]&lt;=’z’)?(t[j]-‘a’):26],n2[i])=max(4,1)=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则将模式串右移</span>
				<span lang="EN-US">k+(i+1)-m=4+4-4=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，</span>
				<span lang="EN-US">j+k=7+4=11</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">p[3]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t[11]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行比较：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: universal_s<span style="COLOR: red">u</span>per_bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P:<span style="mso-spacerun: yes">           </span>bom<span style="COLOR: red">b</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">p[3]!=t[11]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>
				<span lang="EN-US">k=max(n1[(‘a’&lt;=t[j]&amp;&amp;t[j]&lt;=’z’)?(t[j]-‘a’):26],n2[i])=max(4,1)=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则将模式串右移</span>
				<span lang="EN-US">k+(i+1)-m=4+4-4=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，</span>
				<span lang="EN-US">j+k=11+4=15</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">p[3]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t[15]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行比较：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: universal_super<span style="COLOR: red">_</span>bomb</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P:<span style="mso-spacerun: yes">                 </span>bom<span style="COLOR: red">b</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">p[3]!=t[15]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，那么</span>
				<span lang="EN-US">k=max(n1[(‘a’&lt;=t[j]&amp;&amp;t[j]&lt;=’z’)?(t[j]-‘a’):26],n2[i])=max(4,1)=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则将模式串右移</span>
				<span lang="EN-US">k+(i+1)-m=4+4-4=4</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位，</span>
				<span lang="EN-US">j+k=15+4=11</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">p[3]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">t[15]</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行比较：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">T: universal_super_<span style="COLOR: #339966">bomb</span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US">P:<span style="mso-spacerun: yes">                        </span><span style="COLOR: #339966">bomb</span><span style="COLOR: red"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">匹配成功。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（例子有点差哦，没有体现</span>
				<span lang="EN-US">n1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">n2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作用，不好意思啊，各位，原谅我吧……</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">偷个懒，懒得换了……）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再次偷懒，这次不想写，下次写吧，嘿嘿……</span>
		</p>
<img src ="http://www.cppblog.com/asp/aggbug/13583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/asp/" target="_blank">Asp</a> 2006-10-11 20:45 <a href="http://www.cppblog.com/asp/archive/2006/10/11/13583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>