什么是數(shù)據(jù)結(jié)構(gòu)?
- 數(shù)據(jù)對(duì)象在計(jì)算機(jī)中的組織方式: 邏輯結(jié)構(gòu), 物理存儲(chǔ)結(jié)構(gòu)
- 數(shù)據(jù)對(duì)象必定與一系列加在其上的操作相關(guān)聯(lián).
- 完成這些操作所用的方法就是算法
抽象數(shù)據(jù)類型 (Abstract Data Type)
- 數(shù)據(jù)類型: 數(shù)據(jù)對(duì)象集, 數(shù)據(jù)集合相關(guān)聯(lián)的操作集
- 抽象: 描述數(shù)據(jù)類型的方法不依賴于具體實(shí)現(xiàn)
- 與存放數(shù)據(jù)的機(jī)器無關(guān)
- 與數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu)無關(guān)
- 與實(shí)現(xiàn)操作的算法和編程語言均無關(guān)
只描述數(shù)據(jù)對(duì)象集合相關(guān)操作集"是什么", 并不涉及"如何做到"的問題.
什么是算法?
算法 (Algorithm)
- 有一個(gè)有限指令集
- 接受一些輸入 (有些時(shí)候不需要輸入)
- 產(chǎn)生輸出
- 一定在有限步驟之后終止
- 每一條指令必須
- 有充分明確的目標(biāo), 不可以有歧義
- 計(jì)算機(jī)能處理的范圍之內(nèi)
- 描述應(yīng)不依賴于任何一種計(jì)算機(jī)語言以及具體實(shí)現(xiàn)的手段
什么是好的算法?
- 空間復(fù)雜程度S(n) -- 根據(jù)算法寫成的程序在執(zhí)行時(shí)占用存儲(chǔ)單元的長(zhǎng)度(我理解為占用內(nèi)存的大小??). 這個(gè)長(zhǎng)度往往與輸入數(shù)據(jù)的規(guī)模有關(guān)(打印10個(gè)整數(shù)和打印10W個(gè)整數(shù), 時(shí)間肯定是不一樣的) 空間復(fù)雜度過高的算法可能導(dǎo)致使用的內(nèi)存超限, 造成程序Crash.
- 時(shí)間復(fù)雜程度T(n) -- 根據(jù)算法寫成的程序在執(zhí)行時(shí)耗費(fèi)的時(shí)間的長(zhǎng)度.這個(gè)長(zhǎng)度往往與輸入數(shù)據(jù)的規(guī)模有關(guān). 時(shí)間復(fù)雜度過高的低效算法可能導(dǎo)致我們有生之年都等不到運(yùn)行結(jié)果.
- 在分析一般算法的效率時(shí), 經(jīng)常關(guān)注下面兩種復(fù)雜度
- 最壞情況復(fù)雜度
- 平均復(fù)雜度