1.什麼是演算法?
演算法是基於特定的計算模型(比如計算機工具),解決某乙個資訊處理問題二號色記得指令序列。演算法必須呀具備以下要素:(1)輸入,指所求解的特定問題的例項
(2)輸出:經過演算法求解過程之後,所求解出來的問題答案
(3)基本操作,確定性和可行性:演算法由一系列語義明確的指令所構成,指令在計算機模型上可以實現。
(4)有窮性和正確性:演算法在執行有限次數之後能夠輸出,並且輸出的結果是正確的。
2.如何度量演算法的好壞?
首先演算法必須是正確的,符合語法,能夠正確地編譯和鏈結,演算法還需要具有魯棒性/健壯,要應對特殊情況/邊界情況也能得到正確的輸出。演算法必須要具有可讀性,結構化,並且含有特定語義資訊的變數需要被準確地命名,還要準備足夠多的注釋和文件。以上都是演算法需要具備的特徵,但不是衡量演算法好壞的關鍵。衡量演算法好壞最為關鍵的特徵是演算法的效率,包括時間效率和空間效率,好的演算法應該具有:速度盡可能快,所占用的儲存空間盡可能少的特點。
algorithm + data structure = programs 演算法和資料結構的集合就可以得到解決問題的程式
(algorithm + data structure)*efficiency = computations
3.演算法的計算成本
也就是演算法的複雜度,包括演算法的時間複雜度和空間複雜度,現在僅考慮時間複雜度。執行乙個演算法所需要耗費的時間往往和輸入例項的規模有關係,通常情況下,輸入例項的規模越大,執行演算法所需要的時間成本越大。而且,問題例項的規模,往往是決定演算法時間複雜度的重要因素。
4.演算法的時間複雜度(輸入問題的規模是影響演算法時間複雜度的主要因素)
特定演算法在不同例項輸入時,時間複雜度大不相同
演算法的時間複雜度定義為對於輸入問題規模為n時,將規模為n的所有問題例項輸入演算法,演算法的最長執行時間(也就是最壞的輸入例項情況)則被定義為演算法在問題規模為n時的時間複雜度。(考慮的時最壞的情況)
t(n)=max
5.大o記號
程式=資料結構+演算法
衡量dsa(data structure and algorithm)效能的指標:o,o記號用來分析演算法的複雜度。當前所關心的問題是,隨著問題規模的增長,相應的計算成本如何增長?對於規模為n的輸入,計算成本主要包含兩個部分:(1)需要執行的基本操作次數t(n);(2)執行演算法所需要的儲存單元數。而執行程式所需要的儲存空間一般不做考慮,僅僅考慮需要進行多少次基本操作。
演算法的執行時間通常與執行演算法所需要的基本操作次數成正比,用t(n)表示當輸入的問題例項為n時,所需要執行的基本操作的次數。
6.迴圈問題的時間複雜度分析
執行二重迴圈所需要的時間複雜度等於圖中的面積。
7.解決複雜問題的思路:減而治之和分而治之。
8.遞迴跟蹤
遞迴版本的求解斐波那契數列的第n項計算複雜度很大,計算效率很低,即
def fib(n):
return n if n<2 else fib(n-1)+fib(n-2)
這是因為會有大量的遞迴例項被重複地計算。
資料結構第一章緒論
緒論主要是對計算機資料結構一書有大致了解,系統的講解資料結構在程式結構的應用,資料結構的相關概念,演算法在程式中的應用,從而從巨集觀上了解資料結構,更有利於以後學習。1 資料結構在程式中的應用 其實乙個公式就可以了解程式和演算法還有資料,即資料結構 演算法 程式,由公式可知資料結構是程式的一部分。2...
資料結構 第一章 緒論
用計算機求解任何問題都離不開程式設計,程式設計的實質是資料表示和資料處理。一,資料結構基本概念 1.資料是資訊的載體,是電腦程式處理的原料。可以將資料分為兩大類 一類是整數實數等數值資料,一類是文字,影象聲音,圖形等非數值資料。資料元素是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。構...
資料結構 第一章 緒論
程式設計的實質是資料表示和資料處理。資料要能被計算機處理,首先必須能夠儲存在計算機的記憶體中,這項任務稱為資料表示,其核心是資料結構 乙個實際問題的求解必須滿足各項處理要求,這項任務稱為資料處理,其核心是演算法。資料結構課程主要是討論資料表示和資料處理的基本方法。1.1 1.2 1 資料的邏輯結構 ...