﻿<?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++博客-7words-随笔分类-算法导论及习题</title><link>http://www.cppblog.com/7words/category/9438.html</link><description>C++,ACM,College life</description><language>zh-cn</language><lastBuildDate>Sat, 07 Feb 2009 04:08:26 GMT</lastBuildDate><pubDate>Sat, 07 Feb 2009 04:08:26 GMT</pubDate><ttl>60</ttl><item><title>BLOG暂停更新几天，正在刷BOJ练手。算导习题会继续更新</title><link>http://www.cppblog.com/7words/archive/2009/02/06/73092.html</link><dc:creator>7words</dc:creator><author>7words</author><pubDate>Fri, 06 Feb 2009 03:08:00 GMT</pubDate><guid>http://www.cppblog.com/7words/archive/2009/02/06/73092.html</guid><wfw:comment>http://www.cppblog.com/7words/comments/73092.html</wfw:comment><comments>http://www.cppblog.com/7words/archive/2009/02/06/73092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/7words/comments/commentRss/73092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/7words/services/trackbacks/73092.html</trackback:ping><description><![CDATA[RT 
<img src ="http://www.cppblog.com/7words/aggbug/73092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/7words/" target="_blank">7words</a> 2009-02-06 11:08 <a href="http://www.cppblog.com/7words/archive/2009/02/06/73092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论习题 22.4</title><link>http://www.cppblog.com/7words/archive/2009/01/31/72736.html</link><dc:creator>7words</dc:creator><author>7words</author><pubDate>Sat, 31 Jan 2009 11:19:00 GMT</pubDate><guid>http://www.cppblog.com/7words/archive/2009/01/31/72736.html</guid><wfw:comment>http://www.cppblog.com/7words/comments/72736.html</wfw:comment><comments>http://www.cppblog.com/7words/archive/2009/01/31/72736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/7words/comments/commentRss/72736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/7words/services/trackbacks/72736.html</trackback:ping><description><![CDATA[<p>22.4-1:<br>不得不说老外有时候也挺变态的，搞这么复杂个图...考概念你把图弄小点啊,考这么大，吓死我这种刚入门的小菜鸟小朋友咋办<br>写纸上了略了，耐心点就好<br><br>22.4-2:<br>开始觉得是深搜，试了一下不行<br>然后联想到这节讲的就是拓排...肯定得用拓排啦（填鸭式教育的思维啊...）<br>不过还是没想出来线性算法，到处搜答案...汗，一搜搜到斯坦福的一篇作业讲解,牛叉学校果然不一样<br>看的结果是——动态规划...<br>看来DP快点上手了<br><img height=384 alt="" src="http://www.cppblog.com/images/cppblog_com/7words/toplogicalsort.JPG" width=480 border=0><br>演示图（标记为数字的完全是为方便DFS时候的顺序，假设同22.3-2）<br>(1)拓排，即可得类似P336,图22-7所示的从左到右的一个顺序关系，即上图下部分的样子<br>(2)DP一下<br>记P[v]为s到v的路径数，初始化为0<br>把P[p]设为1<br>P[v]=<font size=2>∑<sub>(u,v)belongs to E</sub>P[u]<br>也就是说等于所有拓扑序前面的与之相边的顶点的P[]之和<br></font>复杂度为：<br>拓排： O(V+E)<br>左到右扫一遍DP：V<br>所以为O(V+E)<br><br>不明白的地方：用啥数据结构表示呢？<br>A:邻接表...<br><a href="http://www-cs-students.stanford.edu/phd/comps/2007/2007-Analysis_of_Algorithms-solutions.pdf">http://www-cs-students.stanford.edu/phd/comps/2007/2007-Analysis_of_Algorithms-solutions.pdf</a><br><br>22.4-3: <br></p>
<img src ="http://www.cppblog.com/7words/aggbug/72736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/7words/" target="_blank">7words</a> 2009-01-31 19:19 <a href="http://www.cppblog.com/7words/archive/2009/01/31/72736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论习题 22.2</title><link>http://www.cppblog.com/7words/archive/2009/01/31/72699.html</link><dc:creator>7words</dc:creator><author>7words</author><pubDate>Sat, 31 Jan 2009 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/7words/archive/2009/01/31/72699.html</guid><wfw:comment>http://www.cppblog.com/7words/comments/72699.html</wfw:comment><comments>http://www.cppblog.com/7words/archive/2009/01/31/72699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/7words/comments/commentRss/72699.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/7words/services/trackbacks/72699.html</trackback:ping><description><![CDATA[<p>1.ignore<br>2.ignore<br>3.O(V<sup>2</sup>)</p>
<p>4.证明:<br>考虑一个顶点u,u属于V<br>对BFS算法，当执行到u出队时，有<br><br>for each v belongs to Adj[u]</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do if color[v] &lt;- GRAY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[v]&lt;-&nbsp;&nbsp;&nbsp;d[u]+1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n[v]&lt;-&nbsp;&nbsp;&nbsp;&nbsp;u<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENQUEUE(Q,v)（参考算导P325）<br>由此，对点u的邻接链中的任意点v，如果v为白，则d[v]=d[u]+1。对u的邻接链中任意一点均为如此，所以可知对v,v属于u的邻接点,d[v]=d[u]+1，即d[v]的值与顺序无关<br><br>电脑画图太麻烦，不画了，大概说下<br><br>对22-3图b<br>S的两个邻接点，r&amp;&amp;w,若r在s邻接表的前面，w在后面，则必然r为s的左儿子，w为右儿子。反之则反<br><br>5.don't understand<br><br>6. 二分图...先跳过<sub> DD</sub>D<br><br>7.没想出来复杂度合适的算法，看了别人思路...<br><br>考虑BFS出广度优先树，然后DP求最大值.<br><br>if(x==leaf)<br>&nbsp;&nbsp; D(x)=0;<br>else<br>&nbsp;&nbsp;&nbsp;D(x)=max{ max<sub>i</sub>D(x.child<sub>i</sub>)),max<sub>ij</sub>{(d(x).childi) + d(x).childj)} + 2}<br><br>8.<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<img src ="http://www.cppblog.com/7words/aggbug/72699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/7words/" target="_blank">7words</a> 2009-01-31 11:14 <a href="http://www.cppblog.com/7words/archive/2009/01/31/72699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论习题 22.3</title><link>http://www.cppblog.com/7words/archive/2009/01/31/72718.html</link><dc:creator>7words</dc:creator><author>7words</author><pubDate>Sat, 31 Jan 2009 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/7words/archive/2009/01/31/72718.html</guid><wfw:comment>http://www.cppblog.com/7words/comments/72718.html</wfw:comment><comments>http://www.cppblog.com/7words/archive/2009/01/31/72718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/7words/comments/commentRss/72718.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/7words/services/trackbacks/72718.html</trackback:ping><description><![CDATA[1.概念题，比较麻烦，几个概念以前数据结构课没接触过<br><br>2.<br>没扫描仪...用手画不如杀了我得了...<br><br>用文字大概说明吧<br><br>按DFS定义，顺序是<br>q 4 8 10 9 3 6 7 2 5<br>数字含义是按图上字母顺序编号，比如q应该编为1号,t应该编为4号<br><br>然后对边来说<br><br>q-&gt;w为正向边(注：以下F表正向边，B表反向边，C表交叉边，T表树边）<br>w-&gt;s,y-&gt;q,z-&gt;x为B<br>r-&gt;y,u-&gt;y为C<br>其它为T<br><br>3.比较简单<br>(u(v(y(xx)y)v)u)(w(zz)w)<br><br>4.证明：<br>（1）由定理22.8<br>u是v的祖先，所以d[u]&lt;d[v]&lt;f[v]&lt;f[u]成立时,(u,v)必然为树边或者前向边<br>反之，若(u,v)是树边或前向边，则<br>d[u]&lt;d[v]&lt;f[v]&lt;f[u]显然成立（不清楚的话画画P333的图b）<br>（2）没等号的情况跟上题类似，有等号的情况没想通...<br>（3）<br>因为d[v]&lt;f[v]&lt;d[u]&lt;f[u]<br>由此画出括号图，显然为交叉边...（好像有点勉强...)<br><br>OR<br><br>由d[v]&lt;f[v]&lt;d[u]&lt;f[u]不满足（1）（2）中条件，所以不能为反向，树边或前向边，由此应为交叉边...（好像更勉强...求达人）<br><br>5.<br><br>6.代码题PASS掉<br><br>7. 郁闷了我，写一半maxthon挂掉...郁闷<br><img height=384 alt="" src="http://www.cppblog.com/images/cppblog_com/7words/graph1.JPG" width=480 border=0><br><br>从v搜.再搜P<br>8.没想出来<br><br>9.P334页有讲<br>if color[v]==WHITE<br>&nbsp; then (u,v)= T<br>if color[v]==GRAY<br>&nbsp; then (u,v)=B<br>if color[v]==BLACK<br>&nbsp; then (u,v)=C<br><br>10.<br>即使有入边也有出边，当u被探查以后已经被标为GRAY||BLACK,不会继续加入另一棵树<br><br>11.我实在写不出来数学的严格证明...当面讲应该能讲清楚...唉，数学差了害死人啊<br><br>12.看见星号直接跳过，过段时间来看
<img src ="http://www.cppblog.com/7words/aggbug/72718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/7words/" target="_blank">7words</a> 2009-01-31 11:13 <a href="http://www.cppblog.com/7words/archive/2009/01/31/72718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论习题 22.1-6 universal sink</title><link>http://www.cppblog.com/7words/archive/2009/01/30/72691.html</link><dc:creator>7words</dc:creator><author>7words</author><pubDate>Thu, 29 Jan 2009 16:29:00 GMT</pubDate><guid>http://www.cppblog.com/7words/archive/2009/01/30/72691.html</guid><wfw:comment>http://www.cppblog.com/7words/comments/72691.html</wfw:comment><comments>http://www.cppblog.com/7words/archive/2009/01/30/72691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/7words/comments/commentRss/72691.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/7words/services/trackbacks/72691.html</trackback:ping><description><![CDATA[当用邻接矩阵表示时，大多数算法需要的时间都是O(V<sup>2</sup>)的，但有一些例外<br>证明：在给定一有向图有向图G的邻接矩阵后，可以在O(V)的时间内确定G中是否含一个&#8220;通用的汇(universal sink),即入度为|V|-1，出度为0的顶点。<br><br>感觉这题挺有意思，自己想了半天，大概想出了方法，不过有点怀疑正确性，所以GOOGLE了一下<br><br>后来发现这还是YAHOO二面的一个题...（P.S.美国雅虎）<br><br>图上画画就会发现，这样的图都很有型....<br><br>eg.<br>G:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2 3 4&nbsp;<br>&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 <br>&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp; 0&nbsp;1<br>&nbsp;&nbsp;&nbsp;30&nbsp;0&nbsp; 0&nbsp;&nbsp; 0<br>&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;0<br><br>对角线都是0，而是sink的点，横着竖着刚好组成个十字。<br><br>while(j&lt;n)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(G[i,j]=0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br>}<br>return i;<br><br><br>所以只需要找到十字是在哪个点就成了。这么扫一遍复杂度为O(V)。但有点小问题，如果不是的话，可能返回其它值<br><br>eg.<br>G:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2 3 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 0 0&nbsp;1 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 1 0 0 0&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 1&nbsp;1 0 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 1 0&nbsp;1 0<br>这个的话就会返回2，显然2不是universal sink<br><br>所以需要得到答案后再验证一下这个点，横扫竖扫，同样，复杂度也控制在O(V)<br><br>顺便，赞一下国外论坛的讨论氛围。<br><a href="http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddles_cs;action=display;num=1195383906">http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddles_cs;action=display;num=1195383906</a><br><br>另贴一个网上找的本题的解法<br><a href="http://www.csie.ntu.edu.tw/~r95122/alg07spr/alg07spr_hw1sol.pdf">http://www.csie.ntu.edu.tw/~r95122/alg07spr/alg07spr_hw1sol.pdf</a><br>
<img src ="http://www.cppblog.com/7words/aggbug/72691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/7words/" target="_blank">7words</a> 2009-01-30 00:29 <a href="http://www.cppblog.com/7words/archive/2009/01/30/72691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>