資料結構讀書筆記之演算法初識

2021-09-11 02:01:51 字數 1427 閱讀 2893

演算法

演算法是對特定問題求解步驟的一種描述,它是指定的有限數列,其中每一條指令表示乙個或多個操作。

演算法的5個特徵:

有窮性:乙個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。

確定性:演算法中每一條指令必須有確切的含義,讀者理解時不會產生二義性。並且,在任何條件下,演算法只有唯一的一條執行路徑,即對於相同的輸入只能得出相同的輸出。

可行性:乙個演算法是能行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。

輸入:乙個演算法有零個或多個的輸入,這些輸入取自於某個特定的物件的集合。

輸出:乙個演算法有乙個或多個的輸出,這些輸出是同輸入有著某些特定關係的量。

演算法的設計要求

正確性:演算法的正確性大概分為四個層次:程式不含語法錯誤;程式對於幾組輸入資料能夠得出滿足規格說明要求的結果;程式對於精心選擇的典型、苛刻而帶有刁難性的幾組輸入資料能夠得出滿足規格說明要求的結果;程式對於一切合法的輸入資料都能產生滿足規格說明要求的結果。通常以達到第三層意義的正確性作為衡量乙個程式是否合格的標準。

健壯性:當輸入資料非法時,演算法也能適當地做出反應或進行處理,而不會產生莫名其妙的輸出結果。處理出錯的方法應是返回乙個表示錯誤或者錯誤性質的值,而不是列印錯誤資訊或異常並終止程式的執行,以便在更高的抽象層次上進行處理。

效率與低儲存量需求:通俗的說,效率指的是演算法執行的時間。儲存量需求指的是演算法執行過程中需要的最大儲存空間。效率與低儲存量需求都與這兩者都與問題的規模有關。

演算法效率的度量

度量乙個程式的執行時間通常有兩種方法:

1.事後統計的方法

2.事前分析估算的方法

乙個用高階程式語言編寫的程式在計算機上執行時所消耗的時間取決於以下因素:依據的演算法選用何種策略;問題的規模;書寫程式的語言(對於同乙個演算法,實現語言的級別越高,執行效率就越低);編譯程式所產生的機器**的質量;機器執行指令的速度。

乙個演算法是由控制結構(順序、分支和迴圈)和原操作(指固有資料型別的操作)構成的,則算時間取決於兩者的綜合效果。通常從演算法中選取一種對於所研究的問題(或演算法型別)來說是基本操作的原操作,以該基本操作重複執行的次數作為演算法的時間量度。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作:t(n) = o( f(n) )。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱做演算法的漸近時間複雜度,簡稱時間複雜度。

演算法的儲存空間需求

類似演算法的時間複雜度,演算法所需儲存空間的度量稱為空間複雜度:s(n) = o( f(n) )。其中n為問題的規模(或大小)。

我們在設計演算法的時候,通常時間複雜度和空間複雜度是相互矛盾的,一般我們會採取犧牲空間換取時間的方式。當然,我們也要根據實際情況來設計合適的演算法。

資料結構讀書筆記之資料結構初識

資料結構 資料結構是相互之間存在一種或多種特定關係的資料元素的集合。資料結構這個概念,至今尚未有乙個被一致公認的定義,不同的人在使用這個詞時所表達的意思有所不同 資料 資料是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。對電腦科學而言,資料的含義極為廣泛,數...

資料結構讀書筆記

首先有個關於指標的問題 如果函式傳進來乙個指標 p,函式裡操作p不會影響原來的值,而如果有 或者 才會改變 比如 malloc的時候傳入指標的指標才行 o 1 刪除節點時末尾必須要便利一遍 刪除頭指標要變為刪除第二個節點。1.o 1 刪除指定位置的節點 如果為最後乙個節點還是必須遍歷一遍 2.倒數第...

《資料結構》讀書筆記

2010年9月2日開始研究 資料結構基礎 這本書。為什麼要說是研究呢,一是覺得研究這個詞比較賞心悅目,總比 看 閱讀 之類的好聽多了。二是真的想把資料結構學好。488頁,看來有忙活的了!第一章 基本概述 生命週期各階段描述及理解 1.需求階段 所有人規模程式設計專案,都是從確定規範宣告開始,規範宣告...