1. 程式人生 > >演算法導論第三版 第一章答案

演算法導論第三版 第一章答案

【時間】2018.09.18

【題目】演算法導論第三版第一章答案

一、練習1.1

練習1.1.1

給出一個需要排序的現實示例或需要計算凸包的真實示例。

排序的真例項子非常簡單 - 例如,按字母順序呈現列表的每個網頁都需要對條目進行排序 - 目錄,索引或其他任何內容。

我不知道為什麼我們需要計算凸包,但維基百科說有很多應用程式。

【補充】:

a)排序:將一次考試中 500名考生的成績按分數從高到低迕行排名。

b)確定多矩陣相乘的最佳順序:某實驗模型,需要計算 返 17個矩陣的積,根據矩陣乘法的結合律確定計算順序,以達到計算乘法次數最少的目的。矩陣乘法的結合律:

c)找出凸殼:木板上釘了 21個釘子,以其中一些釘子為頂點組成的凸多邊形可以包含所有 21個釘子,找出使凸多邊形達到最小的所有釘子。

練習1.1.2

除了速度之外,在現實環境中可以使用哪些其他效率指標?

記憶體使用和資源利用(網路,資料庫)是很好的答案。

練習1.1.3

選擇您之前看到的資料結構,並討論其優勢和侷限性。

我們來看看單鏈表。

優勢:

  • 它不需要記憶體中的順序空間

  • 我們可以在任何地方插入新元素

限制:

  • 隨機訪問是O(n)

  • 它需要額外的記憶體用於連結

練習1.1.4

上面給出的最短路徑和旅行商問題如何相似?他們有什麼不同?

它們是相似的,因為每個人都必須走一個圖並在其中找到一條路徑。

不同之處在於對解決方案的約束。最短路徑僅需要兩點之間的路徑,而旅行推銷員需要在返回第一點的更多點之間的路徑。

練習1.1.5

想出一個現實世界的問題,只有最好的解決方案才能解決。然後提出一個“近似”最好的解決方案就足夠了。

對目錄進行排序是一個問題,只有最佳解決方案才能實現。“近似”排序的目錄不會那麼有用。

找到一個城市中兩點之間的最短路徑是一個問題,在那裡可以做得足夠好。它可能不是最快的方式,但你仍然會到達那裡。

二、練習1.2

練習1.2.1

舉例說明在應用程式級別需要演算法內容的應用程式,並討論所涉及的演算法的功能。

在兩個地方之間找到路線時的Google地圖。

演算法是此用例的重要組成部分,因為路由是使用者最關心的。

練習1.2.2

假設我們在同一機器上比較插入排序和合並排序的實現。對於大小為n的輸入,插入排序以8n2步執行,而合併排序執行在64 nlgn步驟中。對於哪個值,插入排序優於合併排序?

在n>43處,合併排序優於插入排序。

練習1.2.3

在同一臺機器上,執行時間為100 n^2的演算法比執行時間為2^n的演算法跑得更快,那麼n的最小值是多少?

在n>14時,第一個演算法執行得更快。

三、思考題

對於下表中的每個函式f(N)和時間t,確定可以在時間t中解決的問題的最大大小n,假設求解該問題的演算法需要f(N)微秒。

【PS】指數部分採用的是科學計數法