資料結構與演算法的應用場景

2021-08-11 11:14:06 字數 1297 閱讀 3313

資料結構與演算法可以按以下類別分類:

通用資料結構:陣列、鍊錶、樹、雜湊表

專用資料結構:棧、佇列、優先順序佇列

排序:插入排序、希爾排序、快速排序、歸併排序、堆排序

圖:鄰接矩陣、鄰接表

外部儲存:順序儲存、索引檔案、b-樹、雜湊方法

陣列和鍊錶是最慢的,樹相對較快,雜湊表是最快的。

但是並非使用最快的結構是最好的方案,因為最快的結構也有缺陷。

(1)實現起來比陣列和鍊錶複雜;

(2)雜湊表需要預先知道要儲存多少資料,對儲存空間的利用率也不是非常高;

(3)普通的二叉樹對於順序的資料來說,會變成緩慢的o(n)級操作;平衡樹雖然避免了上述問題,但是程式實現比較困難。

鍊錶:資料量小、資料量不可預知

有序陣列:資料量小、資料量可預知、查詢速度比插入速度更重要

無序陣列:資料量小、資料量可預知、插入速度比查詢速度更重要

雜湊表:資料量大、查詢和插入的速度必須很快

二叉查詢樹:資料量大、查詢和插入的速度不要求很快、關鍵字隨機分布

平衡樹:資料量大、查詢和插入的速度不要求很快、關鍵字順序分布

棧、佇列、優先順序佇列是抽象資料型別(adt)。

棧用在只對最後被插入的資料項訪問的時候,它是乙個後進先出(lifo)結構。棧可以通過陣列或鍊錶實現。如果資料量較小且可以預知則使用陣列實現,如果資料量較大且不可預知則用鍊錶實現。

隊用在只對最先被插入的資料項訪問的時候,它是乙個先進先出(fifo)的結構。隊可以通過陣列或鍊錶實現。如果資料量較小且可以預知則使用陣列實現,如果資料量較大且不可預知則用雙端鍊錶實現。

優先順序佇列用在只對訪問最高優先順序資料項的時候,最高優先順序資料項就是包含最大(最小)的關鍵字的項。優先順序佇列可以用有序陣列或堆來實現。向有序陣列中插入是很慢的,但是刪除很快。使用堆來實現優先順序佇列,插入和刪除的時間複雜度都是o(logn)級。當插入速度不重要時,可以是要陣列或者雙端鍊錶。

選擇排序演算法時,可以先選擇一種較慢但簡單的排序,例如插入排序。在資料量少於1000為宜。

如果插入排序太慢,下一步可以考慮希爾排序。在資料量少於5000為宜。

只有當希爾排序變得很慢時,才考慮歸併排序、堆排序或者快速排序。

歸併排序需要輔助儲存空間,堆排序需要乙個堆的資料結構,前兩者都比快速排序在某些程度上慢,所以當需要在最短的排序時間時經常選擇快速排序。

然而快速排序在處理非隨機性資料時效能可能蛻化至o(n^2)。

對於非隨機性的資料來說,堆排序更加可靠。

圖並不儲存通用資料,也並不會在其他演算法中成為工具,正相反,它們直接模擬現實世界中的情況。

稠密的圖用鄰接矩陣,稀疏的圖用鄰接表。

常用資料結構的應用場景

1 單向鏈結 單向鍊錶適用於只從一端單向訪問的場合,這種場合一般來說 1 刪除時,只適合刪除第乙個元素 2 新增時,只直接新增到最後乙個元素的後面或者新增到第乙個元素的前面 3 屬於單向迭代器,只能從乙個方向走到頭 只支援前進或後退,取決於實現 查詢效率極差。不適合大量查詢的場合。這種典型的應用場合...

常見資料結構應用場景

可以簡單的按照速度將通用資料結構劃分為 陣列和鍊錶 最慢 樹 較快 雜湊表 最快 增 刪 改 查是四大常見操作,不過其實可以濃縮為兩個操作 增和查。刪除操作和和修改操作都是建立在查詢操作上的,所以完美的資料結構應該是具有較高的插入效率和查詢效率。可以根據下圖選擇合適的通用資料結構 陣列在以下三個情形...

常見資料結構應用場景

陣列在以下三個情形下很有用 1 資料量較小。2 資料規模已知。3 隨機訪問,修改元素值。如果插入速度很重要,選擇無序陣列。如果查詢速度很重要,選擇有序陣列,並使用二分查詢。鍊錶的出現解決了陣列的兩個問題 1 需要預先知道資料規模 2 插入效率低 1 資料量較小 2 不需要預先知道資料規模 3 適應於...