《演算法》學習筆記 演算法分析(1)

2021-09-29 21:42:23 字數 1935 閱讀 9183

用於研究理解演算法的思想和方法

【任務】科學家理解自然世界

【策略】

細緻地觀察真實世界的特點,通常還要有精確的測量

根據觀察結果提出假設模型

根據模型來**未來的事件

繼續觀察並核實**的準確性

如此反覆知道確認**和觀察一致

【分類和類別】程式的執行時間。(精確/近似)

【原理與通則】準確測量程式的執行時間是困難的,一般只需要測量它的近似值。

【具體細節和要素】我們使用下面的類來測定程式的執行時間。

public class stopwatch

public double elapsedtime()

}

【術語/分類和類別的知識】問題規模(輸入元素總量的大小或輸入某個值得大小)。輸入本身(每個輸入元素的具體值)。

【分類和類別】程式的輸入。問題規模與輸入本身組成了輸入。

【關於本章內容的理解】本章討論的程式的執行時間主要取決於問題規模,而輸入本身對它的影響相對較小。

【關於本章內容的理解】 相同輸入相同程式在兩個不同計算機上的執行時間之比通常是乙個常數。

【原理與通則】乙個程式在某個輸入下的總執行時間主要與執行每條語句的耗時和執行每條語句的頻率有關。

【關於內容的理解(解釋)】乙個程式的執行時間可以由變數為問題規模的函式表示。

【關於任務】乙個程式中語句的執行頻率分析難度不一。比如,threesun程式中,int cut = 0;只執行一次,if語句會執行n(n-1)(n-2)/6次,而cut++的執行次數取決於輸入本身,可以是0也可以是其他值。

【關於內容的理解】乙個程式在某個輸入下的近似執行時間取決於執行關鍵語句的耗時和執行關鍵語句的頻率。

【猜想】乙個程式近似執行時間的增長數量級與執行時間的增長數量級相同。

【分類與類別】某一函式的增長數量級。

【具體細節和要素】

常見的增長數量級函式:常數級別,對數級別,線性級別,線性對數級別,平方級別,對數級別,指數級別。

【分類與類別】乙個程式的成本模型,它不是確定的,它可以由乙個變數為n的函式表示。乙個程式的成本模型的增長數量級。

【理論】研究程式的數學性質(成本模型的增長數量級),根據性質**程式的執行時間的增長數量級,再通過實驗驗證。比如,本例中,根據命題b的數學結論**了性質a,再由實驗驗證。

【具體細節與要素】上述的實驗驗證。

【術語】內迴圈(執行最頻繁的語句)

【思想與方法】

確定輸入模型,定義問題的規模

識別內迴圈

根據內迴圈中的原子操作確定成本模型

對於給定的輸入,判斷這些操作的執行頻率。

【基於上述知識分析二分查詢】

public

static

intrank

(int

a,int key)

return-1

;}

它的輸入模型是大小為n的陣列

內迴圈是while迴圈中的所有語句。

成本模型是兩個數之間比較的操作

最壞情況下,執行次數的增長數量級為logn+1

【細節與要素】

白名單問題程式的輸入模型是大小為n的白名單和由標準輸入得到的m個整數。假設m>>n

內迴圈是乙個while迴圈中的所有語句

成本模型是兩個數之間比較的操作。

最壞的情況下,執行次數的增長數量級為mlogn+1。

【白名單問題程式的理論】

如果n很小,標準輸入的規模成為了成本模型的主要成本。

比較的次數取決於標準輸入中由多少數在白名單中以及二分查詢需要多久才能找出他們。

【難點】

如果我們將標準輸入流的長度加倍,白名單問題程式的執行時間也將加倍。如果我們將白名單的長度加倍,白名單問題程式的執行時間只增加少許。

演算法學習筆記1

1 二分查詢 int arr new int binatsearch arr,12 public static int binatsearch int arr,int a else return 1 使用要求 1 有序 實現思路 1 確定最壞情況沒找到 low height 2 二分查詢 基於最低最...

演算法學習筆記1 演算法簡介

1.1演算法是一組完成任務的指令,任何 片段都可視為 1.2二分查詢 在乙個有序的元素列表 必須有序 如果要查詢的元素包含在列表中,則返回其位置 否則返回null。工作原理 每次都從列表的中間進行查詢,每次都排除一半的數字。例 在1 100中找到乙個我想的數。從50開始,小了,就找50 100之間的...

雜湊演算法 學習筆記1

今天聽了洛谷的字串課之後,對於自己好好學學字串演算法也有了更大的動力。但由於比較弱,所以先從最最簡單的乙個開始。也就是雜湊演算法。它通過給每個字串賦予乙個 隨機 生成的整數的方法,使得可以用更加快的效率實現字串判重或者匹配字串等等操作。比如說如果有兩個字串s和s 長度分別為l和l 而我們要比較它們是...