﻿<?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++博客-ACFirst-随笔分类-ACM基础知识</title><link>http://www.cppblog.com/zzfmars/category/14324.html</link><description>榜样的力量是无穷的</description><language>zh-cn</language><lastBuildDate>Tue, 23 Nov 2010 10:55:15 GMT</lastBuildDate><pubDate>Tue, 23 Nov 2010 10:55:15 GMT</pubDate><ttl>60</ttl><item><title>ACM中无输入结束提示时如何判断到达EOF</title><link>http://www.cppblog.com/zzfmars/archive/2010/11/22/134305.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Mon, 22 Nov 2010 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/11/22/134305.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/134305.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/11/22/134305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/134305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/134305.html</trackback:ping><description><![CDATA[<p>1.while((scanf"%d,%d",&amp;m,&amp;n)==2)</p>
<p>&nbsp; {</p>
<p>&nbsp; //...</p>
<p>&nbsp; }</p>
<p>2.while((scanf"%d,%d",&amp;m,&amp;n)!=EOF)</p>
<p>&nbsp; {</p>
<p>&nbsp; //...</p>
<p>&nbsp; }</p>
<p>3.while(cin&gt;&gt;m&gt;&gt;n)</p>
<p>&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp; //...</p>
<p>&nbsp;&nbsp; }</p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/134305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-11-22 20:03 <a href="http://www.cppblog.com/zzfmars/archive/2010/11/22/134305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM题目的风格和近几年题目的发展</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/21/124217.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 21 Aug 2010 13:47:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/21/124217.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124217.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/21/124217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124217.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124217.html</trackback:ping><description><![CDATA[<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: #000000">ACM&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">ICPC的比赛形式一般是五个小时八个题目，综合考察选手的数学能力、算法能力、coding能力和debug能力，还有团队配合能力。数学方面主要强调组合数学、图论和数论这三个方面的能力；而算法的覆盖范围很广，涉及了大部分经典的算法，和少量较前沿的算法。由于每道题目都需要通过所有的测试数据才能得分，并且需要精确解，这限制了Approximation&nbsp;algorithm在一些NP</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">hard的题目中的运用，从而使得搜索和剪枝策略对于NP</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">hard的题目非常重要。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Final的题目和Regional题目的比较<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>ACM&nbsp;ICPC官方的正式比赛可分为World&nbsp;Final和Regional&nbsp;Contest两种。Final的题目更加正统和严谨，强调算法的综合运用，一个题目往往需要几种算法的结合。从这几年的final的题目看，final加大了题目的代码量，对代码能力的要求有所增强。而Regional的题目则更加灵活，同时每个赛区也有自己的出题风格。欧洲赛区的题目以高质量出名，对算法和数学的强调甚至超过了World&nbsp;Final；美国的赛区较多模拟题，强调代码量。而亚洲则介于两者之间，同时由于每年都有一些新的赛区，所以并没有很固定的模式。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>下面浅谈一下近几年ACM&nbsp;ICPC的题目的覆盖面。一些常规的算法和题型没什么好讲的，下面主要侧重一些新颖的知识点或题型，或是一些较前沿的内容。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>数学的新题型<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>除了一些基本的组合数学和组合数论的问题，近年来概率和Combinatorial&nbsp;Game&nbsp;Theory的题目逐渐增多。很多有趣的题目都是以Markov&nbsp;Process为背景，需要用到一些相关的知识。<br><img id=Codehighlighter1_729_735_Open_Image onclick="this.style.display='none'; Codehighlighter1_729_735_Open_Text.style.display='none'; Codehighlighter1_729_735_Closed_Image.style.display='inline'; Codehighlighter1_729_735_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_729_735_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_729_735_Closed_Text.style.display='none'; Codehighlighter1_729_735_Open_Image.style.display='inline'; Codehighlighter1_729_735_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>去年国内杭州赛区的一个很有趣的题目是，给出一个字符集（比如</span><span id=Codehighlighter1_729_735_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_729_735_Open_Text><span style="COLOR: #000000">{A,B,C}</span></span><span style="COLOR: #000000">）和一个字符串T（比如ACBBCAC），现在从一个空串S开始，每次等概率的添加A,B,C中的一个字符，直到T是S的一个子串。问得到的字符串S的长度的期望。这是一个典型的Markov&nbsp;Process，其解可以用生成函数很优美的算出来。一个更有趣的版本是，假如还有另一个字串R，当S中出现T或者R就终止，问终止在T和R的概率各是多少。这个问题在Graham,&nbsp;Knuth,&nbsp;和Patashnik合著的Concrete&nbsp;Mathematics里面有详细的分析，并有着一个优美的结论。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Game&nbsp;theory方面，主要是经典的combinatorial&nbsp;game&nbsp;theory而比较少Zero</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">sum&nbsp;game和Nash&nbsp;equilibrium的内容。以前甚少选手知道的Sprague</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Grundy&nbsp;Value现在已几乎成了必备的知识。虽然大部分题目都是two</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">person&nbsp;perfect&nbsp;information&nbsp;impartial&nbsp;game，基本都可以用Sprague</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Grundy&nbsp;Theorem解决，但也出现过misere&nbsp;play的情况。还有一些题目则是通过找规律和归纳解决。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Graph&nbsp;theory方面，上海赛区在多年前就出了一道Chordal&nbsp;graph&nbsp;recognition的题目，使得许多选手投入弦图和区间图的学习，并了解到完美图理论；IPSC有一年出了consecutive&nbsp;ones&nbsp;problem，从而引起了选手们对PQ树和平面图判定的关注。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>除此之外，还有一些零散的non</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">trivial的题目，甚至是一些非常involved的题目。如刘汝佳给达卡赛区出的一道unbreakable&nbsp;tiling的题目。其中我非常喜欢的一个题目是四年前东北欧赛区的一个floodlight&nbsp;problem：平面上给出n个点代表n盏灯，每个灯可以照亮圆心角为2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&#8719;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">n的一个扇形区域。问怎样控制这些灯的角度，使得可以照亮整个平面。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>还有一些数学题则考验创造能力。比如有一题：给出n，要求找出一个n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">n的方阵，其中每个元素都是1到n之间的整数，并且两两不等，同时使得每行、每列还有两个对角线的和两两不等。这题的构造颇为繁琐，最简单的方法是直接随机生成再判定是否具有这个性质。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>近年来几乎每年的final都有一道考察选手微积分能力的题目。而微分方程类题目较少。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>大型线性方程组、复杂的矩阵代数、和特征值求解方面的题目较少。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>算法的新题型<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>算法方面的增强主要体现在新的数据结构不断被选手所熟悉，和一些新领域的题目出现在ACM&nbsp;ICPC中。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>数据结构方面，一些特殊性质的平衡树逐渐被大家掌握，如splay&nbsp;tree，leftist&nbsp;tree等等。Interval&nbsp;tree则被广泛用于计数。字符串方面，较容易实现的后缀树组也逐渐被接受。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>一些算法：网络流方面，不少选手开始掌握push</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">relabel算法而放弃了经典的ford</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">fulkerson算法；刘汝佳的书广为传阅后，不少选手又掌握了fractional&nbsp;programming和dinkelbach算法。目前能熟练实现linear&nbsp;programming的选手较少，但可以预计过一段时间这也会成为必备的技能。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>计算几何一直是ACM&nbsp;ICPC里面的难题。不仅编程困难，更由于精度问题导致非常难做对。计算几何往往是在比赛时被放弃的题目。即使算法并不非常难，选手也不敢随意去做。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>一些零散的经典内容也被拿出来考察，如stable&nbsp;marriage，fft等。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>总结和一些预计<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>基本上，实现起来不算太复杂的多项式时间复杂度的算法都可以出成一道ACM&nbsp;ICPC的题目。而出题者知识面的不停增长，也使得越来越多这样的算法被包括。另一方面，随着算法的发展，一些原本没有简单算法的题目也出现了新的解法，这样的题目也被加入到ACM&nbsp;ICPC中。ACM&nbsp;ICPC经过多年的积累有着大量的题目，其覆盖面也是非常之广。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>可以预见一些新的优秀的算法将陆续出现在ACM&nbsp;ICPC中。比如由于任意图匹配的Edmonds</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Carp算法实现起来非常繁琐，使得ICPC中一直不出现任意图匹配的题目（即使有也是规模非常小）。而Vijay&nbsp;Vazirani的论文</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">matching&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;easy&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;matrix&nbsp;inversion</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">中给出了一种通用的通过矩阵求逆而求各种匹配的算法，虽然该算法实现起来有一个难点，但相信将会被一些选手采用，从而出现一些任意图匹配的题目，甚至更困难的exact&nbsp;match（该问题目前没有deterministic&nbsp;polynomial</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">time&nbsp;algorithm，但用上面的方法可以得出一个概率算法）。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>而一些新的领域也必将给ACM&nbsp;ICPC的出题者带来灵感。例如已有越来越多Bio</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">informatics的题目在ICPC中出现。一些有着多项式算法的好题目，如inversion&nbsp;distance&nbsp;of&nbsp;signed&nbsp;permutations，则由于其理论的复杂而尚未出现在题目中。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>图论中还有数不胜数的好的题目，比如linear&nbsp;time求minimum&nbsp;cut，还有Gomory</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Hu&nbsp;tree的应用，这些也必将在不久的将来出现在ICPC题目中。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>我认为将发生的另一个趋势是，随机算法，概率算法和近似算法会在ACM&nbsp;ICPC中占更大的比重，至于对于算法能力和代码能力考验的平衡，我个人非常喜欢数学和算法，我希望Final的题目能向中欧赛区的题目靠拢。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>ACM&nbsp;ICPC考察的不仅仅是对经典算法的理解和掌握，创造算法的能力同样非常重要。学那么多算法，必须从中有所领悟，才能在赛场上有灵感去解决实际的问题。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>如果大家有兴趣的话我可以找几个具体的问题详细分析，或是讨论一些具体的算法理论。同样的我也乐意分享一些ACM赛场上的经验，和在各大算法比赛中认识的一些有趣的人，和经历过的一些有趣的事。匆匆写完此文，疏漏之处在所难免，逻辑上也不甚连贯，希望大家见谅。&nbsp;</span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/124217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-21 21:47 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/21/124217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>递归方程组解的渐进阶的求法——差分方程法</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/20/124081.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 20 Aug 2010 05:04:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/20/124081.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124081.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/20/124081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124081.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/explore_knight/archive/2007/09/17/1788046.aspx">http://blog.csdn.net/explore_knight/archive/2007/09/17/1788046.aspx</a><br>这里只考虑形如：</p>
<p>T(n)=c1T(n-1)+c2T(n-2)+&#8230;+ ckT(n-k)+f(n)，n&#8805;k (6.18)</p>
<p>的递归方程。其中ci (i=l，2，&#8230;，k)为实常数，且ck&#8800;0。它可改写为一个线性常系数k阶非齐次的差分方程：</p>
<p>T(n)-c1T(n-1)- c2T(n-2)-&#8230;-ckT(n-k)=f(n)，n&#8805;k (6.19)</p>
<p>(6.19)与线性常系数k阶非齐次常微分方程的结构十分相似，因而解法类同。限于篇幅，这里直接给出(6.19)的解法，略去其正确性的证明。</p>
<p>第一步，求(6.19)所对应的齐次方程：</p>
<p>T(n)-c1T(n-1)- c2T(n-2)-&#8230;-ckT(n-k)=0 (6.20)</p>
<p>的基本解系：写出(6.20)的特征方程：</p>
<p>C(t)=tk-c1tk-1-c2tk-2 -&#8230;-ck=0 (6.21)</p>
<p>若t=r是(6.21)的m重实根，则得(6.20)的m个基础解rn，nrn，n2rn，&#8230;，nm-1rn；若&#961;ei&#952;和&#961;e-i&#952;是(6.21)的一对l重的共扼复根，则得(6.20)的2l个基础解&#961;ncosn&#952;，&#961;nsinn&#952;，n&#961;ncosn&#952;，n&#961;nsinn&#952;，&#8230;，nl-1&#961;ncosn&#952;，nl-1&#961;ncosn&#952;。如此，求出(6.21)的所有的根，就可以得到(6.20)的k个的基础解。而且，这k个基础解构成了(6.20)的基础解系。即(6.20)的任意一个解都可以表示成这k个基础解的线性组合。</p>
<p>第二步，求(6.19)的一个特解。理论上，(6.19)的特解可以用Lagrange常数变易法得到。但其中要用到(6.20)的通解的显式表达，即(6.20)的基础解系的线性组合，十分麻烦。因此在实际中，常常采用试探法，也就是根据f(n)的特点推测特解的形式，留下若干可调的常数，将推测解代人(6.19)后确定。由于(6.19)的特殊性，可以利用迭加原理，将f(n)线性分解为若干个单项之和并求出各单项相应的特解，然后迭加便得到f(n)相应的特解。这使得试探法更为有效。为了方便，这里对三种特殊形式的f(n)，给出(6.19)的相应特解并列在表6-1中，可供直接套用。其中pi，i=1,2,&#8230;,s是待定常数。</p>
<p>表6-1 方程(6.19)的常用特解形式</p>
<p>f(n)的形式&nbsp; 条&nbsp;&nbsp;&nbsp; 件&nbsp; 方程(6.19)的特解的形式&nbsp; <br><br><br>{此处无法正常显示，请看原文。}</p>
<p><br><br>第三步，写出(6.19)即(6.18)的通解</p>
<p>&nbsp;(6.22)</p>
<p>其中{Ti(n)，i=0,1,2,&#8230;,n}是(6.20)的基础解系，g(n)是(6.19)的一个特解。然后由(6.18)的初始条件</p>
<p>T(i)=Ti ，i=1,2,&#8230;,k-1</p>
<p>来确定(6.22)中的待定的组合常数{ai}，即依靠线性方程组</p>
<p>&nbsp;</p>
<p>或</p>
<p>&nbsp;</p>
<p>解出{ai}，并代回(6.22)。其中&#946;j=Tj-g(j)，j=0,1,2,&#8230;,k-1。</p>
<p>第四步，估计(6.22)的渐近阶，即为所要求。</p>
<p>下面用两个例子加以说明。</p>
<p>例l 考虑递归方程</p>
<p>&nbsp;</p>
<p>它的相应特征方程为：</p>
<p>C(t)=t2-t-1=0</p>
<p>解之得两个单根和。相应的(6.20)的基础解系为{r0n，r1n}。相应的(6.19)的一个特解为F*(n)=-8，因而相应的(6.19)的通解为：</p>
<p>F(n)=a0r0n +a1r1n- 8</p>
<p>令其满足初始条件，得二阶线性方程组：</p>
<p>&nbsp;</p>
<p>或</p>
<p>&nbsp;</p>
<p>或</p>
<p>&nbsp;</p>
<p>解之得，，从而</p>
<p>&nbsp;</p>
<p>于是</p>
<p>。</p>
<p>例2 考虑递归方程 </p>
<p>T(n)=4T(n-1)-4T(n-2)+2nn (6.23)</p>
<p>和初始条件T(0)=0，T(1)=4/3。</p>
<p>它对应的特征方程(6.21)为</p>
<p>C(t)=t2-4t+4=0</p>
<p>有一个两重根r =2。故相应的(6.20)的基础解系为{2n，2nn}。由于f(n)=2nn，利用表6-1，相应的(6.19)的一个特解为</p>
<p>T*(n)=n2(p0+p1n)2n，</p>
<p>代人(6.23)，定出p0=1/2，p1=1/6。因此相应的(6.19)的通解为：</p>
<p>T(n)=a02n+a1n2n+n2(1/2+n/6)2n，</p>
<p>令其满足初始条件得a0=a1=0，从而</p>
<p>T(n)=n2(1/2+n/6)2n</p>
<p>于是T(n)=&#952;(n32n)。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/explore_knight/archive/2007/09/17/1788046.aspx">http://blog.csdn.net/explore_knight/archive/2007/09/17/1788046.aspx</a></p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/124081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-20 13:04 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/20/124081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法的复杂性</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/20/124080.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 20 Aug 2010 04:58:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/20/124080.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124080.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/20/124080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124080.html</trackback:ping><description><![CDATA[<a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/index.htm">http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/index.htm</a><br>
<h1 class=title>算法的复杂性</h1>
<p class=author>傅清祥 王晓东<br><cite>算法与数据结构</cite> , 电子工业出版社,1998</p>
<p class=noindent><strong>摘要</strong></p>
<p class=abstract>本文介绍了算法的复杂性的概念和衡量方法，并提供了一些计算算法的复杂性的渐近阶的方法。</p>
<p class=noindent><strong>目录</strong></p>
<ul class=contents>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/introduction.htm"><u><font color=#800080>简介</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter1.htm"><u><font color=#0000ff>比较两对算法的效率</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter2.htm"><font color=#0000ff><u>复杂性的计量 </u></font></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter3.htm"><font color=#0000ff><u>复杂性的渐近性态及其阶 </u></font></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter4.htm"><u><font color=#0000ff>复杂性渐近阶的重要性 </font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter5.htm"><u><font color=#0000ff>算法复杂性渐近阶的分析</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6.htm"><font color=#800080><u>递归方程组的渐近阶的求法 </u></font></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6_1.htm"><u><font color=#800080>1.代入法</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6_2.htm"><u><font color=#0000ff>2.迭代法</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6_3.htm"><u><font color=#0000ff>3.套用公式法</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6_4.htm"><u><font color=#0000ff>4.差分方程法</font></u></a>
    <li><a href="http://www.ahhf45.com/info/Data_Structures_and_Algorithms/algorithm/complexity/chapter6_5.htm"><u><font color=#0000ff>5.母函数法</font></u></a> </li>
</ul>
<!-- #EndEditable -->
<img src ="http://www.cppblog.com/zzfmars/aggbug/124080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-20 12:58 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/20/124080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM的算法（觉得很好，有层次感)</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/20/124064.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 20 Aug 2010 01:45:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/20/124064.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124064.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/20/124064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124064.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124064.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">OJ上的一些水题(可用来练手和增加自信) </p>
<p style="TEXT-INDENT: 2em">(</a><font color=#864f0e>poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094）</font></p>
<p style="TEXT-INDENT: 2em">初期: </p>
<p style="TEXT-INDENT: 2em">一.基本算法:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)枚举. (poj1753,poj2965) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)贪心(poj1328,poj2109,poj2586) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)递归和分治法.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)递推.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)构造法.(poj3295) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) </p>
<p style="TEXT-INDENT: 2em">二.图算法:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)图的深度优先遍历和广度优先遍历.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)最小生成树算法(prim,kruskal) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(poj1789,poj2485,poj1258,poj3026) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)拓扑排序 (poj1094) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(6)最大流的增广路算法(KM算法). (poj1459,poj3436) </p>
<p style="TEXT-INDENT: 2em">三.数据结构.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)串 (poj1035,poj3080,poj1936) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)简单并查集的应用.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)哈希表和二分查找等高效查找法(数的</a><a></a><a href="http://billing.macrovpn.com/user.php?cont=login"><font color=#864f0e>Hash,串的Hash)&nbsp; &nbsp; </font></a></p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)哈夫曼树(poj3253) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(6)堆&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(7)trie树(静态建树、动态建树) (poj2513) </p>
<p style="TEXT-INDENT: 2em">四.简单搜索&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129) </p>
<p style="TEXT-INDENT: 2em">五.动态规划&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)背包问题. (poj1837,poj1276) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)型如下表的简单DP(可参考lrj的书 page149):&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp; 1.E[j]=opt{D<em>+w(i,j)} (poj3267,poj1836,poj1260,poj2533) </em></p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp; 2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (</em><em>最长公共子序列)&nbsp; &nbsp;&nbsp;&nbsp;</em></p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj3176,poj1080,poj1159) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp; 3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题)&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">六.数学&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)组合数学:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.加法原理和乘法原理.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.排列组合.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3.递推关系.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (POJ3252,poj1850,poj1019,poj1942) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)数论.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.素数与整除问题&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.进制位.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3.同余模运算. </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (poj2635, poj3292,poj1845,poj2115) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)计算方法.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122) </p>
<p style="TEXT-INDENT: 2em">七.计算几何学.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)几何公式. </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交)&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj1408,poj1584) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)凸包.&nbsp;&nbsp;(poj2187,poj1113) </p>
<p style="TEXT-INDENT: 2em">中级: </p>
<p style="TEXT-INDENT: 2em">一.基本算法:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)C++的标准模版库的应用. (poj3096,poj3007) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706) </p>
<p style="TEXT-INDENT: 2em">二.图算法:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)差分约束系统的建立和求解. (poj1201,poj2983) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)最小费用最大流(poj2516,poj2516,poj2195) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)双连通分量(poj2942) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)强连通分支及其缩点.(poj2186) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)图的割边和割点(poj3352) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(6)最小割模型、网络流规约(poj3308, ) </p>
<p style="TEXT-INDENT: 2em">三.数据结构.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)静态二叉检索树. (poj2482,poj2352) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)树状树组(poj1195,poj3321) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)RMQ. (poj3264,poj3368) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)并查集的高级应用. (poj1703,2492) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(6)KMP算法. (poj1961,poj2406) </p>
<p style="TEXT-INDENT: 2em">四.搜索&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)最优化剪枝和可行性剪枝&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)搜索的技巧和优化 (poj3411,poj1724) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)记忆化搜索(poj3373,poj1691) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">五.动态规划&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)较为复杂的动态规划(如动态规划解特别的施行商问题等) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)记录状态的动态规划. (POJ3254,poj2411,poj1185) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)树型动态规划(poj2057,poj1947,poj2486,poj3140) </p>
<p style="TEXT-INDENT: 2em">六.数学&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(1)组合数学:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.容斥原理.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.抽屉原理.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026).&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;4.递推关系和母函数.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(2)数学.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.概率问题. (poj3071,poj3440) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3.GCD、扩展的欧几里德(中国剩余定理) (poj3101)&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(3)计算方法.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.0/1分数规划. (poj2976) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.三分法求解单峰(单谷)的极值.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3.矩阵法(poj3150,poj3422,poj3070) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;4.迭代逼近(poj3301) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(4)随机化算法(poj3318,poj2454) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp;&nbsp;(5)杂题. </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj1870,poj3296,poj3286,poj1095) </p>
<p style="TEXT-INDENT: 2em">七.计算几何学.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(1)坐标离散化.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用).&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(3)多边形的内核(半平面交)(poj3130,poj3335) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429) </p>
<p style="TEXT-INDENT: 2em">高级: </p>
<p style="TEXT-INDENT: 2em">一.基本算法要求:&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)代码快速写成,精简但不失风格&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (poj2525,poj1684,poj1421,poj1048,poj2050,poj3306) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)保证正确性和高效性.&nbsp;&nbsp;poj3434 </p>
<p style="TEXT-INDENT: 2em">二.图算法:&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)度限制最小生成树和第K最短路. (poj1639) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446 </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(3)最优比率生成树.&nbsp;&nbsp;(poj2728) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(4)最小树形图(poj3164) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(5)次小生成树.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(6)无向图、有向图的最小环&nbsp; &nbsp; </p>
<p style="TEXT-INDENT: 2em">三.数据结构.&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)trie图的建立和应用. (poj2778) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和 在线算法&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; (RMQ+dfs)).(poj1330) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的 </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 目的).&nbsp;&nbsp;(poj2823) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(4)左偏树(可合并堆).&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(5)后缀树(非常有用的数据结构,也是赛区考题的热点).&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj3415,poj3294) </p>
<p style="TEXT-INDENT: 2em">四.搜索&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286) </p>
<p style="TEXT-INDENT: 2em">五.动态规划&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)需要用数据结构优化的动态规划. </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(poj2754,poj3378,poj3017) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)四边形不等式理论.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(3)较难的状态DP(poj3133) </p>
<p style="TEXT-INDENT: 2em">六.数学&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)组合数学.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.MoBius反演(poj2888,poj2154) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.偏序关系理论.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)博奕论.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1.极大极小过程(poj3317,poj1085) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2.Nim问题.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">七.计算几何学.&nbsp; &nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(1)半平面求交(poj3384,poj2540) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(2)可视图的建立(poj2966) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(3)点集最小圆覆盖.&nbsp;&nbsp;</p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(4)对踵点(poj2079) </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;八.综合题. </p>
<p style="TEXT-INDENT: 2em">&nbsp; &nbsp;&nbsp; &nbsp;(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)</em></p>
<p style="TEXT-INDENT: 2em"></a><a></a><a href="http://billing.macrovpn.com/user.php?cont=login"><font color=#864f0e>&nbsp;</font></a></p>
<p style="TEXT-INDENT: 2em">Dp状态设计与方程总结</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">1.不完全状态记录</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;青蛙过河问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;利用区间dp</p>
<p style="TEXT-INDENT: 2em">2.背包类问题</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt; 0-1背包，经典问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;无限背包，经典问题</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;判定性背包问题</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;带附属关系的背包问题</p>
<p style="TEXT-INDENT: 2em">&lt;5&gt; + -1背包问题</p>
<p style="TEXT-INDENT: 2em">&lt;6&gt;双背包求最优值</p>
<p style="TEXT-INDENT: 2em">&lt;7&gt;构造三角形问题</p>
<p style="TEXT-INDENT: 2em">&lt;8&gt;带上下界限制的背包问题(012背包)</p>
<p style="TEXT-INDENT: 2em">3.线性的动态规划问题</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;积木游戏问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;决斗（判定性问题）</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;圆的最大多边形问题</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;统计单词个数问题</p>
<p style="TEXT-INDENT: 2em">&lt;5&gt;棋盘分割</p>
<p style="TEXT-INDENT: 2em">&lt;6&gt;日程安排问题</p>
<p style="TEXT-INDENT: 2em">&lt;7&gt;最小逼近问题(求出两数之比最接近某数/两数之和等于某数等等)</p>
<p style="TEXT-INDENT: 2em">&lt;8&gt;方块消除游戏(某区间可以连续消去求最大效益)</p>
<p style="TEXT-INDENT: 2em">&lt;9&gt;资源分配问题</p>
<p style="TEXT-INDENT: 2em">&lt;10&gt;数字三角形问题</p>
<p style="TEXT-INDENT: 2em">&lt;11&gt;漂亮的打印</p>
<p style="TEXT-INDENT: 2em">&lt;12&gt;邮局问题与构造答案</p>
<p style="TEXT-INDENT: 2em">&lt;13&gt;最高积木问题</p>
<p style="TEXT-INDENT: 2em">&lt;14&gt;两段连续和最大</p>
<p style="TEXT-INDENT: 2em">&lt;15&gt;2次幂和问题</p>
<p style="TEXT-INDENT: 2em">&lt;16&gt;N个数的最大M段子段和</p>
<p style="TEXT-INDENT: 2em">&lt;17&gt;交叉最大数问题</p>
<p style="TEXT-INDENT: 2em">4.判定性问题的dp(如判定整除、判定可达性等)&nbsp;&nbsp;&nbsp; </p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;模K问题的dp</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;特殊的模K问题，求最大(最小)模K的数</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;变换数问题</p>
<p style="TEXT-INDENT: 2em">5.单调性优化的动态规划</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;1-SUM问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;2-SUM问题</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;序列划分问题(单调队列优化)</p>
<p style="TEXT-INDENT: 2em">6.剖分问题(多边形剖分/石子合并/圆的剖分/乘积最大)</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;凸多边形的三角剖分问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;乘积最大问题</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;多边形游戏(多边形边上是操作符,顶点有权值)</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;石子合并(N^3/N^2/NLogN各种优化)</p>
<p style="TEXT-INDENT: 2em">7.贪心的动态规划</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;最优装载问题</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;部分背包问题</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;乘船问题</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;贪心策略</p>
<p style="TEXT-INDENT: 2em">&lt;5&gt;双机调度问题Johnson算法</p>
<p style="TEXT-INDENT: 2em">8.状态dp</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;牛仔射击问题(博弈类)</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;哈密顿路径的状态dp</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;两支点天平平衡问题</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;一个有向图的最接近二部图</p>
<p style="TEXT-INDENT: 2em">9.树型dp</p>
<p style="TEXT-INDENT: 2em">&lt;1&gt;完美服务器问题(每个节点有3种状态)</p>
<p style="TEXT-INDENT: 2em">&lt;2&gt;小胖守皇宫问题</p>
<p style="TEXT-INDENT: 2em">&lt;3&gt;网络收费问题</p>
<p style="TEXT-INDENT: 2em">&lt;4&gt;树中漫游问题</p>
<p style="TEXT-INDENT: 2em">&lt;5&gt;树上的博弈</p>
<p style="TEXT-INDENT: 2em">&lt;6&gt;树的最大独立集问题</p>
<p style="TEXT-INDENT: 2em">&lt;7&gt;树的最大平衡值问题</p>
<p style="TEXT-INDENT: 2em">&lt;8&gt;构造树的最小环</p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/124064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-20 09:45 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/20/124064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>见过的一个计划</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/20/124060.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 20 Aug 2010 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/20/124060.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124060.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/20/124060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124060.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124060.html</trackback:ping><description><![CDATA[<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: #000000">一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>功.acm主要是考算法的&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>，主要时间是花在思考算法上，不是花在写程序与debug上。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>下面给个计划你练练：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>第一阶段：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;练经典常用算法，下面的每个算法给我打上十到二十遍，同时<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>自己精简代码，&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>因为太常用，所以要练到写时不用想，</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">15分钟内打完，甚至关掉<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>显示器都可以把程序打&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>出来.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.最短路(Floyd、Dijstra,BellmanFord)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.最小生成树(先写个prim,kruscal要用并查集，不好写)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.大数（高精度）加减乘除&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.二分查找.&nbsp;(代码可在五行以内)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.叉乘、判线段相交、然后写个凸包.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">.BFS、DFS,同时熟练hash表(要熟，要灵活,代码要简)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">.数学上的有：辗转相除（两行内），线段交点、多角形面积公式.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">.&nbsp;调用系统的qsort,&nbsp;技巧很多，慢慢掌握.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">.&nbsp;任意进制间的转换&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>第二阶段：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;练习复杂一点，但也较常用的算法。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>如：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.&nbsp;二分图匹配（匈牙利），最小路径覆盖&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.&nbsp;网络流，最小费用流。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.&nbsp;线段树.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.&nbsp;并查集。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.&nbsp;熟悉动态规划的各个典型：LCS、最长递增子串、三角剖分、记<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>忆化dp&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">.博弈类算法。博弈树，二进制法等。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">.最大团，最大独立集。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">.判断点在多边形内。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">.&nbsp;差分约束系统.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">.&nbsp;双向广度搜索、A</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">算法，最小耗散优先.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>第三阶段：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;前两个阶段是打基础，第三阶段是锻炼在比赛中可以快速建立<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>模型、想新算法&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>。这就要平时多做做综合的题型了。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.&nbsp;把oibh上的论文看看（大概几百篇的，我只看了一点点，呵呵）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.&nbsp;平时扫扫zoj上的难题啦，别老做那些不用想的题.(中大acm的版<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>主经常说我挑简单的来&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>做:</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">P&nbsp;)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.&nbsp;多参加网上的比赛，感受一下比赛的气氛，评估自己的实力.&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.&nbsp;一道题不要过了就算，问一下人，有更好的算法也打一下。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/124060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-20 09:34 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/20/124060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法书建议收藏</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/20/124058.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 20 Aug 2010 01:26:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/20/124058.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/124058.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/20/124058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/124058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/124058.html</trackback:ping><description><![CDATA[Source：<a href="http://riddickbryant.javaeye.com/blog/545871"><span style="FONT-SIZE: 24pt">http://riddickbryant.javaeye.com/blog/545871</span></a><br><br>1. CLRS 算法导论<br>算法百科全书，只做了前面十几章的习题，便感觉受益无穷。<br><br>2. Algorithms 算法概论<br>短小精悍，别据一格，准经典之作。一个坏消息: 同算法导论，该书没有习题答案。好消息：习题很经典，难度也适中，只需花点点时间自己也都能做出来。不好也不坏的消息：我正在写习题的答案，已完成前三章，还剩九章约二百道题，顺利的话二个月之后发布。另有中文版名《算法概论》，我没看过，不知道翻译得怎么样。如果有心的话，还是尽量看原版吧，其实看原版与看中文版花费时间不会相差很大，因为大部分时间其实都花费在做习题上了。<br><br>3. Algorithm Design 算法设计<br>很经典的一本书，很久之前看的，遗憾的是现在除了就记得它很经典之外其它都忘光了。<br><br>4. SICP 计算机程序的构造和解释<br>六星之书无需多言，虽然这不是一本讲算法的书，但看完此书有助于你更深入的理解什么是递归。我一直很强调习题，看完此书后你至少应该做完前四章的太部分习题。否则那是你的遗憾，也是作者的遗憾。<br><br>5. Concrete Mathematics 具体数学&nbsp;<br>有人说看TAOCP之前应该先弄清楚这本书的内容，要真是如此的话那我恐怕是看不到TAOCP了。零零碎碎的看了一大半，很多东西都没有时间来好好消化。如果你是刚进大学不久的本科生，有着大把的可自由支配时间，那你幸运又幸福了，花上几个月时间好好的读一下此书吧，收获绝对大于你的期望值。<br><br>6. Introduction to The Design and Analysis of Algorithms 算法设计与分析基础<br>很有趣的一本算法书，有许多在别的书上找不到的趣题，看完此书绝对能让你大开眼界，实在是一本居家旅行，面试装逼的必备佳作。<br><br>7.&nbsp;编程之美--微软技术面试心得&nbsp;<br>虽说是一本面试书，但如果把前面十几页扯掉的话，我更愿意把它看作是一本讲解题思维的算法小品。在书中，作者通常是给出一个平常解法，然后再一次又一次的优化改进，你可以很清楚的看到基本的算法设计思想是如何得到运用以解决实际问题的。如果你已经有了一些算法的基础，看完本书应该能使你的算法应用能力得到一定的提高。另外，本书生动有趣，也同样适合于初学者。<br><br>8. Fundamentals of Algorithmics 算法基础&nbsp;<br>也是很久之前在学校图书馆借来看的，内容记不太清楚了，只隐约记得此书的动态规划章节犹为出彩。应该是很经典的一本书，个人以为足以和算法导论等所谓当世经典平分秋色，但是怎么好像被人提到的不多，或许是我孤陋寡闻了。<br><br>9. How to solve it 怎样解题<br>二十世纪最伟大的数学思想家之一波利亚的力作，讲一般性的解题方法：怎么认识问题，怎么转换问题，怎么解决问题，如何在问题中得到启发，如何找到一个通往答案的方向。<br><br>10. Programming&nbsp;interviews exposed 程序员面试攻略<br>一本消遣之作。个人以为要比国内的某&#8220;XXX面试宝典&#8221;纯粹一些，至少也有一些启发性的内容，而不单单是面试题解库。<br><br>11. Programming Pearls 编程珠玑<br>学习算法不仅需要像Alogrithms，算法导论这样的重量级的内功心法，像《编程之美》、《编程珠玑》这样的轻量级的轻功身法也必不可少。前些年网上不是很流行像&#8220;给你10亿个数，找到最大的n个&#8221;或者&#8220;给你10亿个数，找出现次数最多的那个数&#8221;之类的百度面试题吗？看了此书你就知道怎么解决了。相比于《编程之美》来说，本书中的示例技巧性略低一些，但是也更有实际应用价值一些。<br><br>12. 算法艺术与信息学竞赛&nbsp;<br>如果算法导论是九阳神功，那这本无疑就是九阴真经。本书是专为参加一些诸如ACM之类程序设计比赛的同学而写的，江湖人称&#8220;黑书&#8221;。里面讲的都是一些在编程比赛中常用的算法、数据结构，以及一些数论和计算几何等。我虽然并不搞竞赛，但也从此书中受益颇多。<br><br>13. An Introduction to Probability Theory and Its Applications<br>准备看的，现在才发现概率论有多么重要，可惜本科的时候没有好好学。前不久一个同学问我个问题，我半天弄了一个程序给他，他说：这里就不是相关系数么，Excel一下就完事！我晕，我还真不知道那就是相关系数。<br><br>14. Numerical Analysis<br>这本的作者是Richard L. Burden,J. Douglas Faires&nbsp;<br>数值分析，讨论各种数值算法，比如插值、拟合、积分、微分方程的求解、线性和非线性方程组求解等。准备详细看。<br><br>15. TAOCP 计算机程序设计艺术<br>传说中的TAOCP，说的人多，看的人少。TAOCP四卷堪称是算法藏经阁中的易筋经或者是少林七十二绝技。天下武学，尽出少林，天下算法，尽出TAOCP也。这点你可以顺便翻开一本算法书看看他的引用文献就知道了。我只读了第四卷的部分章节，前三卷暂时还没敢看，还在读书计划表中被无限期搁置。 
<img src ="http://www.cppblog.com/zzfmars/aggbug/124058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-20 09:26 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/20/124058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACMer应具备的能力</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/10/122910.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Tue, 10 Aug 2010 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/10/122910.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/122910.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/10/122910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/122910.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/122910.html</trackback:ping><description><![CDATA[从解题过程来讲ACMer应具备的能力如下：<br>1）阅读能力。首先要过英语关，从大量信息中提取关键信息，多阅读提高阅读能力，阅读英文题目或者英文论文。<br>2）分析问题的能力。在第一步提取的关键信息的基础上，分析问题的属性，与已有模型进行匹配，寻找突破点。<br>3）设计算法，算法优化，计算复杂度，选择符合要求的的算法。确定算法后，定义变量写出详细的算法描述，为下一步代码实现奠定基础。<br>4）程序实现能力。设计程序实现方法，程序实现。<br>5）程序调试能力。调试直到程序完全正确。 <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>----------------------------------------------------------------------------------------------------------------------------------------
<img src ="http://www.cppblog.com/zzfmars/aggbug/122910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-10 11:25 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/10/122910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku1004</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/09/122829.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Mon, 09 Aug 2010 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/09/122829.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/122829.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/09/122829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/122829.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/122829.html</trackback:ping><description><![CDATA[<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: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;a,sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_92_228_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_228_Open_Text.style.display='none'; Codehighlighter1_92_228_Closed_Image.style.display='inline'; Codehighlighter1_92_228_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_92_228_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_228_Closed_Text.style.display='none'; Codehighlighter1_92_228_Open_Image.style.display='inline'; Codehighlighter1_92_228_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_92_228_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_92_228_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_117_144_Open_Image onclick="this.style.display='none'; Codehighlighter1_117_144_Open_Text.style.display='none'; Codehighlighter1_117_144_Closed_Image.style.display='inline'; Codehighlighter1_117_144_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_117_144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_144_Closed_Text.style.display='none'; Codehighlighter1_117_144_Open_Image.style.display='inline'; Codehighlighter1_117_144_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_117_144_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_117_144_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">)b</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$%.2lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,a);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/122829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-09 19:55 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/09/122829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>