概念:資料:是對客觀事物的符號表示。能輸入到計算機中並且被電腦程式處理的符號的總稱;
資料元素:描述資料的基本單位;
資料項:描述資料的最小單位;
資料型別:數值,字元等對資料分成不同的型別;
抽象資料型別:由資料物件,資料關係和基本操作三部分組成,可用三元組(d,s,p)表示;
資料結構:資料和結構兩部分,資料部分是資料元素的集合,結構是指資料之間關係的集合;
資料結構的邏輯結構:用抽象的資料模型來描述資料結構中資料元素之間的邏輯關係;
物理結構(又叫 儲存結構 或者 記憶體映像):資料在計算機內的儲存表示;
有窮性:乙個演算法必須總是(對於任何合法的輸入值)在之星有窮步之後結束,且每一步都可在有窮時間內完成。
確定性:演算法中每一條指令都必須有明確的含義,不應產生二義性。演算法只有唯一的執行路徑。
可執行:每個演算法中的操作都可以通過已經時間的基本運算之執行有限次來玩完成。
有輸入:根據實際問題需要。在執行演算法時可能要接收外部資料,也可能不需要外部輸入。所以:乙個演算法應有零個或多個輸入。
有輸出:演算法被執行後,一定要有乙個或多個結果或結論。
健壯性:指當輸入不合法的資料時,演算法能做出響應或進行適當處理,避免帶著非法資料執行。
關於時間複雜度和空間複雜度:
常用的排序演算法的時間複雜度和空間複雜度
1、時間複雜度
(1)時間頻度乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n)。
(2)時間複雜度在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
在各種不同演算法中,若演算法中語句執行次數為乙個常數,則時間複雜度為o(1),另外,在時間頻度不相同時,時間複雜度有可能相同,如t(n)=n2+3n+4與t(n)=4n2+2n+1它們的頻度不同,但時間複雜度相同,都為o(n2)。按數量級遞增排列,常見的時間複雜度有:常數階o(1),對數階o(log2n),線性階o(n), 線性對數階o(nlog2n),平方階o(n2),立方階o(n3),..., k次方階o(nk),指數階o(2n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。 2、空間複雜度與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。記作: s(n)=o(f(n)) 我們一般所討論的是除正常占用記憶體開銷外的輔助儲存單元規模。討論方法與時間複雜度類似,不再贅述。
(3)漸進時間複雜度評價演算法時間效能 主要用演算法時間複雜度的數量級(即演算法的漸近時間複雜度)評價乙個演算法的時間效能。
2、類似於時間複雜度的討論,乙個演算法的空間複雜度(space complexity)s(n)定義為該演算法所耗費的儲存空間,它也是問題規模n的函式。漸近空間複雜度也常常簡稱為空間複雜度。
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種演算法是「就地/"進行的,是節省儲存的演算法,如這一節介紹過的幾個演算法都是如此;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元,例如將在第九章介紹的快速排序和歸併排序演算法就屬於這種情況。
如當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為0(10g2n);當乙個演算法的空i司複雜度與n成線性比例關係時,可表示為0(n).若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。
資料結構 概覽
資料結構 在電腦科學資料結構是一種資料組織和儲存格式,支援非常高效。訪問和修改。1 2 3 更準確地說,乙個資料結構是資料值的集合,它們之間的關係,可以應用到的函式或運算元據。4 資料結構可以實現乙個或多個特定的抽象資料型別 adt 指定的操作可以在乙個資料結構和執行計算複雜度這些操作。相比之下,乙...
線性資料結構概覽
陣列 array 是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。陣列支援隨機訪問,根據下標隨機訪問的時間複雜度為 o 1 arraylist 無法儲存基本型別,比如 int long,需要封裝為 integer long 類,而 autoboxing unboxing...
資料結構 演算法 筆記1 概覽
程式 資料結構 演算法 資料結構 邏輯結構 物理結構 儲存結構 運算 根據三種方式劃分有 邏輯結構 有 線性結構,非線性結構 物理結構 儲存結構 有 順序儲存結構,鏈式儲存結構,索引儲存結構,雜湊儲存結構 運算 插入,刪除,檢索,更新,排序等 演算法 有 遞迴,回溯,貪婪,分治,動態規劃 線性結構 ...