2012-01-08 32 views
2

有没有一个很好的教程来理解如何计算给定代码片段的运行时间和空间?我正在看这些代码书,问题会告诉运行时间,但是没有解释它是如何得到它的。我知道大哦的基本概念,但是有一些基本的规则或技巧来弄清楚内存和空间需求吗?找出程序的运行时间和空间

我可能没有看到正确的地方,但任何帮助或一些有用的教程的链接将是伟大的!

谢谢

+2

https://en.wikipedia.org/wiki/Introduction_to_Algorithms – 2012-01-08 13:01:22

回答

3

获取Introduction to Algorithms。它在那里。

他们还制作了您感兴趣的部分的视频讲座:http://www.catonmat.net/blog/mit-introduction-to-algorithms-part-one/向下滚动以查看视频。

+0

我会这样做,但任何好的链接,以在线学习的东西? – user807496 2012-01-08 13:02:58

+0

添加了本书视频讲座的链接。 – Tudor 2012-01-08 13:04:19

+0

Cormen&Co远不是一个“教程”,我担心:虽然技术上确实存在,但它不是理解概念的简单方法。 Skiena更实用;有趣的是,即使在SICP中,时间和空间的概念也是非常具有图形化的,因此更易于理解。 – alf 2012-01-08 13:13:57

1

基本规则是,每个操作需要1;你试图了解你有多少次做任何事情。也就是说,一个循环将需要精确的迭代次数乘以它的物体成本。

内存更加简单:当您创建结构时,请留意分配。加上每个递归调用的成本你都所有的局部变量。而已。很简单,是吧?

截至网上资源,请尝试http://www.cs.sunysb.edu/~algorith/video-lectures/ - 你应该主要关注第2部分,渐近表示法。

此外,它只是时间注册到斯坦福大学的http://www.cs101-class.org/http://www.algo-class.org/课程,免费和点。

0

大O给你的想法如何在理想的机器上的时间和内存需求规模。实际机器上所需资源数量适中的数据最好使用探查器进行测量。

+0

它在很多方面都不是真实的... Profiler确实很好,因此没有downvoting,但... – alf 2012-01-08 13:29:39

+0

例如,O(n^2)和O(n ln n)之间的差异不是你需要的探测器发现。另一方面,处理非重要部分的算法复杂性是浪费时间。这与理想的机器无关,没有“最好的”:这是两种完全不同的任务的两种不同的工具。 – alf 2012-01-08 13:32:17

+0

你可以看看O(n^2)和O(n ln n),但是这不会让你知道因素,也没有什么迹象表明它是如何在真实机器上表现适度/实际大小的数据。如果你有一个算法需要两个长度,你不会知道哪个算法是第一个算法,哪个算法是第二个算法。 – 2012-01-08 13:41:30

0

为什么不像MIT的“Introduction to Algorithms 2nd”,Sanjoy Dasgupta的“Algorithms”或Sedgewick的“C算法”那样读一些书呢?