一、數(shù)據(jù)結(jié)構(gòu)
1、常見數(shù)據(jù)結(jié)構(gòu):Array(數(shù)組)、Stack(棧)、Queue(隊列)、LinkedList(鏈表)、Tree(樹)、Hash(哈希表)、Heap(堆)、Graph(圖)
2、各種數(shù)據(jù)結(jié)構(gòu)總結(jié):
(1)、數(shù)組:
????優(yōu)點:插入數(shù)據(jù)快
????缺點:查找慢,刪除慢,大小固定,只能存儲單一元素
(2)、有序數(shù)組:
????優(yōu)點:比無序數(shù)組查詢快
????缺點:查找慢,刪除慢,大小固定,只能存儲單一元素
(3)、棧:
????優(yōu)點:先進后出
????缺點:存取很慢
(4)、隊列:
????優(yōu)點:先進先出
????缺點:存取很慢
(5)、鏈表:
????優(yōu)點:插入快,刪除快
????缺點:查找很慢
(6)、二叉樹:
????優(yōu)點:如果樹是平橫的,查找、刪除、插入都很快
????缺點:刪除算法復(fù)雜
(7)、紅黑樹:
????優(yōu)點:樹總是平衡的,查找、刪除、插入都很快
????缺點:算法復(fù)雜
(8)、2-3-4樹:
????優(yōu)點:樹總是平衡的,類似的樹對磁盤存儲有效,
????缺點:算法復(fù)雜
(9)、哈希表:
????優(yōu)點:如果已知關(guān)鍵字則存取極快
????缺點:刪除數(shù)據(jù)慢,不知道關(guān)鍵字則存取數(shù)據(jù)都很慢,對存儲空間使用不充分
(10)、堆:
????優(yōu)點:插入數(shù)據(jù)和刪除數(shù)據(jù)都快,對最大項數(shù)據(jù)存取快
????缺點:對其它數(shù)據(jù)項存取慢
(11)、圖:
????優(yōu)點:對現(xiàn)實世界建模
????缺點:有些算法慢且復(fù)雜
二、算法
? ? 1、算法5個特征:
????(1)、有窮性:對于任意一組合法輸入值,在執(zhí)行又窮步驟之后一定能結(jié)束,即:算法中的每個步驟都能在有限時間內(nèi)完成。
????(2)、確定性:在每種情況下所應(yīng)執(zhí)行的操作,在算法中都有確切的規(guī)定,使算法的執(zhí)行者或閱讀者都能明確其含義及如何執(zhí)行。并且在任何條件下,算法都只有一條執(zhí)行路徑。
????(3)、可行性:算法中的所有操作都必須足夠基本,都可以通過已經(jīng)實現(xiàn)的基本操作運算有限次實現(xiàn)之。
????(4)、有輸入:作為算法加工對象的量值,通常體現(xiàn)在算法當中的一組變量。有些輸入量需要在算法執(zhí)行的過程中輸入,而有的算法表面上可以沒有輸入,實際上已被嵌入算法之中。
????(5)、有輸出:它是一組與“輸入”有確定關(guān)系的量值,是算法進行信息加工后得到的結(jié)果,這種確定關(guān)系即為算法功能。
? ? 2、算法的設(shè)計原則:
? ? (1)、正確性:首先,算法應(yīng)當滿足以特定的“規(guī)則說明”方式給出的需求。其次,對算法是否“正確”的理解可以有以下四個層次:
? 一、程序語法錯誤。
二、程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足需要的結(jié)果。
三、程序?qū)τ诰倪x擇的、典型、苛刻切帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果。
四、程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能得到滿足要求的結(jié)果。
? ? ? ? ? ? ? ?PS:通常以第 三 層意義的正確性作為衡量一個算法是否合格的標準。
????(2)、可讀性:算法為了人的閱讀與交流,其次才是計算機執(zhí)行。因此算法應(yīng)該易于人的理解;另一方面,晦澀難懂的程序易于隱藏較多的錯誤而難以調(diào)試。
????(3)、健壯性:當輸入的數(shù)據(jù)非法時,算法應(yīng)當恰當?shù)淖龀龇磻?yīng)或進行相應(yīng)處理,而不是產(chǎn)生莫名其妙的輸出結(jié)果。并且,處理出錯的方法不應(yīng)是中斷程序執(zhí)行,而是應(yīng)當返回一個表示錯誤或錯誤性質(zhì)的值,以便在更高的抽象層次上進行處理。
????(4)、高效率且低存儲量需求:通常算法效率值得是算法執(zhí)行時間;存儲量是指算法執(zhí)行過程中所需要的最大存儲空間,兩者都與問題的規(guī)模有關(guān)