作为一名自学成才的计算机程序员,我经常无法估计特定操作的 O() 值。是的,我知道大多数重要的,比如主要的分类和搜索,但是当新的东西出现时,我不知道如何计算一个,除非它非常明显。是否有一个很好的网站或文字来解释如何做到这一点?哎呀,我什至不知道计算机科学家怎么称呼它,所以我无法谷歌它。
5 回答
它被称为Big O Notation,用于计算复杂性理论。
维基百科文章是一个很好的起点,页面底部的参考书目也是如此。
算法简介是大多数大学使用的标准文本。我已经使用它并且可以推荐那些关于订单分析的章节。不过,我将从 Tim Howland 的回答中的文章开始。
如果你真的想学习这个主题,那么你可能需要一本标准的理论/算法教科书。我不知道有哪个网站可以真正教你复杂性分析(“复杂性”或“时间复杂性”是你如何称呼这些 O() 值;你可能还想在谷歌上搜索“算法分析”或“介绍算法”等)。
但在那之前——一个免费的选择。麻省理工学院的 Erik Demaine 和 Charles Leiserson 提供的课程中的幻灯片是免费的,而且看起来很棒。我肯定会尝试阅读它们,看看是否适合你。他们在这里。
现在,教科书:
教科书的经典选择是 Cormen 等人的著作Introduction to Algorithms (这里可能有便宜的版本可以买到,我记得在网上看到过免费(可能是非法的)版本,但我不记得在哪里)。
Kleinberg and Tardos' Algorithm Design是 IMO 读起来更有趣和更好的选择,更近现代风格的书。
以下是一些提供信息的网站(我通过谷歌搜索“算法分析讲义”而不带引号得到这些信息):
以上是由计算机科学理论家撰写的。所以程序员或其他实际的人可能会有一些不同的看法。
它被称为算法分析,本身就是一门科学。看看这里的一些书
您的链接将我带到一个 似乎需要用户名 和密码的俄语网站。合法的错误,还是 巨魔?保罗·汤布林
该网站是保加利亚语的,您不需要密码即可访问我链接到的文件列表并下载其中一些文件。当然,除非对保加利亚以外的 IP 有访问限制,我真的不知道。
对不起,我不知道如何发表评论。