2012-01-08 31 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算法」那樣讀一些書呢?