﻿<?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>IT博客-农夫之子㊣-文章分类-算法法设计与分析</title><link>http://www.cnitblog.com/jsjzzm/category/3764.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 08:23:10 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 08:23:10 GMT</pubDate><ttl>60</ttl><item><title>NOI&amp;IOI--计算机学习的好地方</title><link>http://www.cnitblog.com/jsjzzm/articles/16767.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Wed, 13 Sep 2006 03:29:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16767.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16767.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16767.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16767.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16767.html</trackback:ping><description><![CDATA[
		<p align="center">NOI&amp;IOI--计算机学习的好地方</p>
		<div align="center">
				<hr />
		</div>
		<p align="left">
				<b>IOI简介</b>
		</p>
		<p>国际信息学奥林匹克竞赛（<i>International Olympiad Infornatics</i>,<b>IOI</b>）是联合国教科文组织支持下的一项中学生的学科竞赛，从1989年至今已经举办了十届。 IOI的宗旨是促进世界各国的青少年相互交流，鼓励他们学习、掌握信息科学知识。</p>
		<p>IOI每年一次，由各国轮流举办。IOI竞赛规程贯彻奥林匹克精神：公平、公开、公正和严格的竞赛规则，在激烈竞赛的同时促进各国青少年之间的交流，增强友谊。IOI竞赛规程鼓励各国在国内竞赛的基础上组成各自的国家队，但不作硬性限制，由各国自主决定。</p>
		<p>信息学奥林匹克竞赛及培训过程，是既动脑又动手的过程，是学习知识、运用知识、解决总是的过程。广大青少年通过参加竞赛，大大激发了他们学习的热情，促进他们养成主动学习和钻研总是的良好习惯。大多数IOI队员进入清华大学计算机系学习，从他们在大学的学习情况看出，中学时养成的这些良好习惯，有助于他们在大学学习时的理论联系实际、主动性、创造性地思维。</p>
		<p>
				<br />
				<font size="5"> NOI 简介</font>
		</p>
		<p>为了选拔选手参加一年一度的国际奥林匹克信息学竞赛(International Olympiad in Informatics 简称 IOI), 每个参赛的国家都会自行举办国内的选拔, 一般都称为 National Olympaid in Informatics (简称 NOI)。 中国亦有这种比赛, 而且每年在不同的城市举办。<br /></p>
		<hr />
		<br />    以下是IOI &amp; NOI的一些网址,里面有许多历年试题,这些题目很有意思,可以当做大家学习计算机相关理论知识的练习题,也可以让大家知道如何用计算机解决实际问题.<br /><hr /><a href="http://www.ioinformatics.org/" target="_blank">IOI官方网站</a><br /><br /><a class="" title="" href="http://www.noi.cn/noi/index.jsp" target="">NOI官方网站</a><br /><br /><u><font color="#0000ff"><a class="" title="" href="http://www.bast.net.cn/bjnoi/index.shtml" target="">北京市青少年信息学奥林匹克竞赛活动</a></font></u><br /><br /><img src ="http://www.cnitblog.com/jsjzzm/aggbug/16767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-13 11:29 <a href="http://www.cnitblog.com/jsjzzm/articles/16767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据结构与算法演示程序</title><link>http://www.cnitblog.com/jsjzzm/articles/16719.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Tue, 12 Sep 2006 01:07:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16719.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16719.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16719.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16719.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16719.html</trackback:ping><description><![CDATA[数据结构与算法演示程序
<hr />
    由于空间的限制，本程序分为两部分，请下载后自行解压。<br />    <a class="" title="" href="/Files/jsjzzm/DSDemoW.part1.rar" target="">第一部分</a><br /><br />    <a class="" title="" href="/Files/jsjzzm/DSDemoW.part2.rar" target="">第二部分</a><br /><br /><br /><img src ="http://www.cnitblog.com/jsjzzm/aggbug/16719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-12 09:07 <a href="http://www.cnitblog.com/jsjzzm/articles/16719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习算法的复杂性的一个好网站</title><link>http://www.cnitblog.com/jsjzzm/articles/16707.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Mon, 11 Sep 2006 14:44:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16707.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16707.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16707.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16707.html</trackback:ping><description><![CDATA[学习算法的复杂性的一个好网站
<hr /><a href="http://algorithm.diy.myrice.com/algorithm/complexity/index.htm">http://algorithm.diy.myrice.com/algorithm/complexity/index.htm</a><br /><br /><p class="noindent"><b>摘要</b></p><p class="abstract">本文介绍了算法的复杂性的概念和衡量方法，并提供了一些计算算法的复杂性的渐近阶的方法。</p><p class="noindent"><b>目录</b></p><ul class="contents"><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/introduction.htm">简介</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter1.htm">比较两对算法的效率</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter2.htm">复杂性的计量 </a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter3.htm">复杂性的渐近性态及其阶 </a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter4.htm">复杂性渐近阶的重要性 </a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter5.htm">算法复杂性渐近阶的分析</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6.htm">递归方程组的渐近阶的求法 </a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6_1.htm">1.代入法</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6_2.htm">2.迭代法</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6_3.htm">3.套用公式法</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6_4.htm">4.差分方程法</a></li><li><a href="http://algorithm.diy.myrice.com/algorithm/complexity/chapter6_5.htm">5.母函数法</a></li></ul><img src ="http://www.cnitblog.com/jsjzzm/aggbug/16707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-11 22:44 <a href="http://www.cnitblog.com/jsjzzm/articles/16707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我眼中的计算机、计算机科学、计算机技术、计算机工程、计算机操作、计算机产业（转贴）</title><link>http://www.cnitblog.com/jsjzzm/articles/16470.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Thu, 07 Sep 2006 02:53:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16470.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16470.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16470.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16470.html</trackback:ping><description><![CDATA[
		<div class="postcolor" align="center">我眼中的计算机、计算机科学、计算机技术、计算机工程、计算机操作、计算机产业<br /></div>
		<div class="postcolor">
				<hr />
		</div>
		<div class="postcolor" align="center">
				<a href="http://www.bossh.net/forums/index.php?s=6a5a9db786ea27110ae96062d928b8e4&amp;showtopic=32909&amp;st=0&amp;#entry172835">http://www.bossh.net/forums/index.php?s=6a5a9db786ea27110ae96062d928b8e4&amp;showtopic=32909&amp;st=0&amp;#entry172835</a>
				<br />
		</div>
		<div class="postcolor" align="left">
				<hr />
		</div>
		<div class="postcolor" align="left">
				<br />
				<br />很多人学了N年计算机，仍不知道这些都是哪些东西，社会上外行的看法更是五花八门，谈谈我的认识：<br /><br />1、计算机：这个好理解，就是我们看得见摸得着的电脑。比如CPU、主板、内存、显示器。。。。。。等等，这都是它的硬件。比如windows、IE流览器。。。。。。等等，这些是软件。还有网络，比如我们上的宽带网，等等。绝大多数人都知道，不再多说。<br /><br />2、计算机操作：把电脑买回家，我们按几下鼠标，按几下键盘，就可以上网，就可以打游戏，可以看电影。。。。。。这就是我们在操作计算机。<br /><br />3、计算机工程：设想一下，我们使用的网络是从哪里来的？软件又是从哪里来的？它们都是人工构建出来的。这就是“计算机工程”。比如，windows是一群软件工程师开发出来的，比如宽带网是网络工程师建造出来的。<br /><br />4、计算机技术：再深入地想一下，为什么计算机工程能成功的进行？就象飞船能上天靠的是宇航技术一样，计算机工程师们能开发出对我们来说很好用的软件，靠的是各种各样的计算机技术。比如数据库技术、多媒体技术、网络安全技术。。。。。。等等。这些技术的核心是构造性的算法，也就是由形式语言或自然语言书写出的解决问题的步骤。科研人员把计算机无所不在的应用域中的无数计算问题的数学性质做高度抽象和分类，对不同的问题类创造出新的更好的算法，为计算机程序解决问题提供方法和步骤。计算机工程师按照这种算法（方法和步骤）编写程序。计算机技术就是通过这种方式为计算机工程提供支持。新的计算机技术也就产生更优的工程效果，或提高工程效率。<br /><br />5、计算机科学：探索一类现象，试图发现该类现象背后的规律，只不过，它既不是物理、化学、生物等自然现象，也不是经济、政治、文化等社会现象。实际上，计算机科学探索的是无所不在的计算现象，这种现象遍布自然、社会各领域，但和数学类似，计算机科学并不关心具体的应用域，而是对高度抽象出的计算现象进行研究，试图去发现关于计算的数学规律，并对“计算”这一现象的本质做数学层面的思考。<br /><br />顾名思议，“计算”现象及其规律，这一领域本身就是数学的一个分支，只不过，计算机科学并不对计算的所有方面感兴趣，那是纯数学理论家关心的事，计算机科学家只关心“计算”的构造性现象及规律，也就是计算的过程（步骤和方法）及其理论。理解了计算的过程，才能对提出算法，进一步才能写出程序，从而在计算机上去实现“计算”，从而为计算机无处不在的应用提供数学上的保证。建立了计算的数学理论，才能知道什么问题是可计算的，什么是不可计算的，从而避免人类生产生活中每年巨额的工程项目经费投入到不可能完成的计算任务中。<br /><br />这样，我们才会看到，计算机科学的数学基础（理论计算机科学）会包括：组合数学与组合算法、数理逻辑、可计算性理论、计算复杂性理论、形式语言与自动机理论、形式语义学、程序理论、形式化方法。。。。。。等等。<br /><br />所以，计算机科学的核心是算法（计算的过程），算法的本质是构造性数学和离散数学。<br /><br />6、计算机产业：很容易理解，把计算机工程这样的活动商业化，就形成了计算机产业。工程师们通过计算机工程生产出产品，企业组织工程项目并把产品卖给用户，用户操作计算机，在工程师的背后，有科学家提供支持工程项目的技术创新和计算科学探索。<br /><br />有句话说的好，今天的计算机科学就是明天的计算机技术，就是后天的计算机工程，就是大后天公众桌子上的电脑产品。<br /><br />可见，加强计算机科学基础研究的重要性。<br /><br />举个例子，象微软这样的软件霸主企业，近几年就成立了多家计算机科学基础研究机构----分布在全球多个国家的微软研究院----它的研究方向不仅包括新一代多媒体技术这样的计算机技术层面的基础研究，也包括计算理论、人工智能理论、程序理论、形式化理论这样的计算机科学层面的基础研究。微软和IBM甚至在搞量子计算、人脑智能这样的基础研究，它的研究方向已经超越了计算机科学，涉及到理论物理和生命科学。我们已经看到，程序员的多少已经不是最重要的，一流的计算机科学家和一流的基础研究才是未来计算机产业不可缺少的，只有这样，才会有我们自己的计算机科学与核心技术的重大原创成果，我们才能在未来计算机产业中抢占科技制高点。<br /><br />看到那篇别人的日志：什么叫我是搞计算机的？外行认识很混乱,现在我们很清楚：如果你是在操作计算机，那你只是公众一员，或者叫电脑用户；如果你在做计算机工程开发，那你可能是程序员；如果在搞计算机科学与技术的创新，那可能是计算机科研人员或计算机科学家；如果在发展理论计算机科学，那不仅是计算机科学家，还有可能是数学家；如果是在搞计算机产业，组织研发、生产、销售，开办企业，那就是企业家或管理人员。<br /></div>
		<!-- THE POST -->
<img src ="http://www.cnitblog.com/jsjzzm/aggbug/16470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-07 10:53 <a href="http://www.cnitblog.com/jsjzzm/articles/16470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>李开复：算法的力量(转贴)</title><link>http://www.cnitblog.com/jsjzzm/articles/16468.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Thu, 07 Sep 2006 02:32:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16468.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16468.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16468.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16468.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center">
				<b>
						<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">李开复：算法的力量</span>
				</b>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<?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; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<o:p> 
<hr /></o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">http://www.kaifulee.com/default.asp<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<br />算法是计算机科学领域最重要的基石之一，但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解，认为学计算机就是学各种编程语言，或者认为，学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学，但是学习计算机算法和理论更重要，因为计算机算法和理论更重要，因为计算机语言和开发平台日新月异，但万变不离其宗的是那些算法和理论，例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上，有位同学生动地</span>
				<span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">把这些基础课程比拟为“内功”，把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式，没有功力，是不可能成为高手的。</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<br />
						<b>算法与我</b>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">当我在<span lang="EN-US">1980年转入计算机科学系时，还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们说：“知道为什么只有你们系要加一个‘科学’，而没有‘物理科学系’或‘化学科学系’吗？因为人家是真的科学，不需要画蛇添足，而你们自己心虚，生怕不‘科学’，才这样欲盖弥彰。”其实，这点他们彻底弄错了。真正学懂计算机的人（不只是“编程匠”）都对数学有相当的造诣，既能用科学家的严谨思维来求证，也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">记得我读博时写的<span lang="EN-US">Othello对弈软件获得了世界冠军。当时，得第二名的人认为我是靠侥幸才打赢他，不服气地问我的程序平均每秒能搜索多少步棋，当他发现我的软件在搜索效率上比他快60多倍时，才彻底服输。为什么在同样的机器上，我可以多做60倍的工作呢？这是因为我用了一个最新的算法，能够把一个指数函数转换成四个近似的表，只要用常数时间就可得到近似的答案。在这个例子中，是否用对算法才是能否赢得世界冠军的关键。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">还记得<span lang="EN-US">1988年贝尔实验室副总裁亲自来访问我的学校，目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍，而且，在扩大至大词汇系统后，速度差异更有几百倍之多。他们虽然买了几台超级计算机，勉强让系统跑了起来，但这么贵的计算资源让他们的产品部门很反感，因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中，我惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是，他们还为此发表了不少文章，甚至为自己的算法起了一个很特别的名字，并将算法提名到一个科学会议里，希望能得到大奖。当时，贝尔实验室的研究员当然绝顶聪明，但他们全都是学数学、物理或电机出身，从未学过计算机科学或算法，才犯了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧！<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<br />
						<b>网络时代的算法</b>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">有人也许会说：“今天计算机这么快，算法还重要吗？”其实永远不会有太快的计算机，因为我们总会想出新的应用。虽然在摩尔定律的作用下，计算机的计算能力每年都在飞快增长，价格也在不断下降。可我们不要忘记，需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据（照片，视频，语音，文本等等）。日益先进的纪录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面，随着研究手段的进步，数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别，都需要极大的计算量。在网络时代，越来越多的挑战需要靠卓越的算法来解决。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">再举另一个网络时代的例子。在互联网和手机搜索，如果要找附近的咖啡店，那么搜索引擎该怎么处理这个请求呢？最简单的办法就是把整个城市的咖啡馆都找出来，然后计算出它们的所在位置与你之间的距离，再进行排序，然后返回最近的结果。但该如何计算距离呢？图论里有不少算法可以解决这个问题。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">这么做也许是最直观的，但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆，那么这么做应该没什么问题，反正计算量不大。但如果一个城市里有很多咖啡馆，又有很多用户都需要类似的搜索，那么服务器所承受的压力就大多了。在这种情况下，我们该怎样优化算法呢？<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">首先，我们可以把整个城市的咖啡馆做一次“预处理”。比如，把一个城市分成若干个“格子<span lang="EN-US">(grid)”，然后根据用户所在的位置把他放到某一个格子里，只对格子里的咖啡馆进行距离排序。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">问题又来了，如果格子大小一样，那么绝大多数结果都可能出现在市中心的一个格子里，而郊区的格子里只有极少的结果。在这种情况下，我们应该把市中心多分出几个格子。更进一步，格子应该是一个“树结构”，最顶层是一个大格——整个城市，然后逐层下降，格子越来越小，这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多，用户可以逐级上升，放大搜索范围。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">上述算法对咖啡馆的例子很实用，但是它具有通用性吗？答案是否定的。把咖啡馆抽象一下，它是一个“点”，如果要搜索一个“面”该怎么办呢？比如，用户想去一个水库玩，而一个水库有好几个入口，那么哪一个离用户最近呢？这个时候，上述“树结构”就要改成“<span lang="EN-US">r-tree”，因为树中间的每一个节点都是一个范围，一个有边界的范围（参考:<a href="http://www.cs.umd.edu/~hjs/rtrees/index.html" target="_blank"><span style="COLOR: #4455aa; mso-bidi-font-size: 12.0pt">http://www.cs.umd.edu/~hjs/rtrees/index.html</span></a>）。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">通过这个小例子，我们看到，应用程序的要求千变万化，很多时候需要把一个复杂的问题分解成若干简单的小问题，然后再选用合适的算法和数据结构。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<br />
						<b>并行算法：Google的核心优势</b>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">上面的例子在<span lang="EN-US">Google里就要算是小case了！每天Google的网站要处理十亿个以上的搜索，GMail要储存几千万用户的2G邮箱，Google Earth要让数十万用户同时在整个地球上遨游，并将合适的图片经过互联网提交给每个用户。如果没有好的算法，这些应用都无法成为现实。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在这些的应用中，哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如，每天都有十亿以上的用户访问<span lang="EN-US">Google的网站，使用Google的服务，也产生很多很多的日志(Log)。因为Log每份每秒都在飞速增加，我们必须有聪明的办法来进行处理。我曾经在面试中问过关于如何对Log进行一些分析处理的问题，有很多面试者的回答虽然在逻辑上正确，但是实际应用中是几乎不可行的。按照它们的算法，即便用上几万台机器，我们的处理速度都根不上数据产生的速度。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">那么<span lang="EN-US">Google是如何解决这些问题的？<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">首先，在网络时代，就算有最好的算法，也要能在并行计算的环境下执行。在<span lang="EN-US">Google的数据中心，我们使用的是超大的并行计算机。但传统的并行算法运行时，效率会在增加机器数量后迅速降低，也就是说，十台机器如果有五倍的效果，增加到一千台时也许就只有几十倍的效果。这种事半功倍的代价是没有哪家公司可以负担得起的。而且，在许多并行算法中，只要一个结点犯错误，所有计算都会前功尽弃。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">那么<span lang="EN-US">Google是如何开发出既有效率又能容错的并行计算的呢？<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Google最资深的计算机科学家Jeff Dean认识到，Google所需的绝大部分数据处理都可以归结为一个简单的并行算法：Map and Reduce（<a href="http://labs.google.com/papers/mapreduce.html" target="_blank"><span style="COLOR: #4455aa; mso-bidi-font-size: 12.0pt">http://labs.google.com/papers/mapreduce.html</span></a>）。这个算法能够在很多种计算中达到相当高的效率，而且是可扩展的（也就是说，一千台机器就算不能达到一千倍的效果，至少也可以达到几百倍的效果）。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后，它的容错性能异常出色，就算一个server farm宕掉一半，整个fram依然能够运行。正是因为这个天才的认识，才有了Map and Reduce算法。借助该算法，Google几乎能无限地增加计算量，与日新月异的互联网应用一同成长。<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<br />
						<b>算法并不局限于计算机和网络</b>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">举一个计算机领域外的例子：在高能物理研究方面，很多实验每秒钟都能几个<span lang="EN-US">TB的数据量。但因为处理能力和存储能力的不足，科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道，新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的，在其他任何领域里，算法可以改变人类的生活。例如人类基因的研究，就可能因为算法而发明新的医疗方式。在国家安全领域，有效的算法可能避免下一个911的发生。在气象方面，算法可以更好地预测未来天灾的发生，以拯救生命。<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">所以，如果你把计算机的发展放到应用和数据飞速增长的大环境下，你一定会发现；算法的重要性不是在日益减小，而是在日益加强。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
<img src ="http://www.cnitblog.com/jsjzzm/aggbug/16468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-07 10:32 <a href="http://www.cnitblog.com/jsjzzm/articles/16468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习计算机算法、理论计算机的几个网站与论坛</title><link>http://www.cnitblog.com/jsjzzm/articles/16467.html</link><dc:creator>农夫之子㊣</dc:creator><author>农夫之子㊣</author><pubDate>Thu, 07 Sep 2006 02:28:00 GMT</pubDate><guid>http://www.cnitblog.com/jsjzzm/articles/16467.html</guid><wfw:comment>http://www.cnitblog.com/jsjzzm/comments/16467.html</wfw:comment><comments>http://www.cnitblog.com/jsjzzm/articles/16467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jsjzzm/comments/commentRss/16467.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jsjzzm/services/trackbacks/16467.html</trackback:ping><description><![CDATA[
		<p align="center">
				<font color="#000000">学习计算机算法、理论计算机的几点网站与论坛</font>
				<br />
		</p>
		<hr />
		<br />        以下是我收集到的一些网站与论坛，希望对计算机算法、理论计算机的学习有所帮助；同时，如果您有比较好的资源，也希望共享，先致谢意！<br /><br />       <u></u><a href="http://bbs.ir-lab.org/cgi-bin/leoboard.cgi">哈尔滨工业大学信息检索实验室论坛</a>  <a href="http://bbs.ir-lab.org/cgi-bin/forums.cgi?forum=11">http://bbs.ir-lab.org/cgi-bin/forums.cgi?forum=11</a><br />      <br />       <img height="24" src="http://www.zjtcm.net/wljx/Computer/Data%20Structure/Tsinghua/image1/title.jpg" width="198" /> <a href="http://www.zjtcm.net/wljx/Computer/Data%20Structure/Tsinghua/index.html">http://www.zjtcm.net/wljx/Computer/Data%20Structure/Tsinghua/index.html</a><br />       <br />      <b><font onmouseover="ShowMenu(ieeemenu,100)" style="FONT-FAMILY: Arial" color="blue">计算机科学论坛  <a href="http://www.ieee.org.cn/index.asp">http://www.ieee.org.cn/index.asp</a><br /><br />      <a href="http://zhiqiang.org/blog"><font color="#808080">阅微堂</font></a>  <a href="http://zhiqiang.org/blog/389.html">http://zhiqiang.org/blog/389.html</a><div id="navigation"><ul id="miniflex"><br /><br /><font color="#000000"><hr />
      <br /></font><font color="#800080">   </font><font color="#a52a2a">    其实网上的资源很多很多，只要我们多留意，多收藏，并进行充分利用，对我们的学习可以说可以终身受用。以上是我经常去的几个地方，还有一些，我会在以后补充进去。如果大家发现了一些，也请帮我补充。</font>      </ul></div></font></b><img src ="http://www.cnitblog.com/jsjzzm/aggbug/16467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jsjzzm/" target="_blank">农夫之子㊣</a> 2006-09-07 10:28 <a href="http://www.cnitblog.com/jsjzzm/articles/16467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>