資料操作的時間複雜度主要由磁碟尋道所消耗的時間所決定,同時在磁碟中通過尋道查詢相應資料所需要的時間又由資料在磁碟中的儲存形式所影響。想要更加透徹的了解時間複雜度問題,就需要對磁碟的儲存原理有乙個清楚認識。所以推薦大家一片詳細講解磁碟原理的部落格,非常nice!影響機械磁碟速度的因素:尋道時間、旋轉延遲、資料傳輸時間
一、線性表
線性表分為順序表和煉表,順序表是指資料在磁碟中儲存在連續位址上,如陣列;鍊錶指資料在磁碟中儲存位址不連續。順序表進一步可分為有序和無序兩種,即各資料是否遵循從小到大或從大到小的順序依次儲存。同理鍊錶可分為有序和無序兩種。有序順序表又要根據各資料間是否存在固定的數學規律,如等差、等比,從而分為有規律及無規律兩種。大致分類如下圖:
分別對不同型別線性表進行「增刪改查」操作時時間複雜度進行分析:
1、有序有規律線性表
設有如下資料按有序有規律線性表形式儲存在磁碟中:
1 2 3 4 5 6 7 8 9
有序有規律線性表儲存模型 1
2345
6789
查:可通過首元素位址增加相應數量個資料單位大小,跳轉到相應位置查詢所需資料。例如首元素位址為12,查詢資料6,則根據元素間數學規律得知資料6在首位址後第5個位置處,則直接定址到位址(12+5)位置,即資料6所在位址位置為17。從而得出時間複雜度為o(1).
改:同「查」操作相似,在查詢後將所在位置資料修改為相應值,時間複雜度為o(1),然後根據修改後資料的大小重新確定資料應在有序鍊錶中所處的位置,並移動到相應位置,時間複雜度為o(n)。
刪:通過「查」操作找到相應資料後刪除,時間複雜度為o(1),刪除位置後的資料依次前移1個資料單位,時間複雜度為o(n),則整個刪除過程的時間複雜度為o(n).
增:增加操作首先要考慮線性表中是否還有閒餘位置,如果沒有則需要開闢更大空間的線性表,並將原表複製過去。將預定插入位置及之後的資料依次後移1個單位,將資料插入到指定位置,之後根據數學規律確定資料在表中應處位置並進行調整。總的時間複雜度為o(n)。
2、有序無規律線性表
設有如下資料按有序無規律線性表形式儲存在磁碟中:
2 4 7 10 13 22 41 58
有序無規律線性表 2
471013
2241
58查:通過二分法查詢,時間複雜度為o(log2n)。
改:將資料插入到指定位置,之後根據二分法確定資料應處位置並進行調整,時間複雜度為o(log2n).
刪:通過「查」操作找到相應資料後刪除,時間複雜度為o(log2n),刪除位置後的資料依次前移1個資料單位,時間複雜度為o(n),則整個刪除過程的時間複雜度為o(n).
增:增加操作首先要考慮線性表中是否還有閒餘位置,如果沒有則需要開闢更大空間的線性表,並將原表複製過去。將預定插入位置及之後的資料依次後移1個單位,將資料插入到指定位置,之後通過二分法確定資料在表中應處位置並進行調整。總的時間複雜度為o(n)。
3、無序順序表
設有如下資料按無序順序表形式儲存在磁碟中:
3 1 9 15 7 3 2 4
無序順序表 3
19157
324查:通過迴圈遍歷每乙個元素查詢,時間複雜度為o(n)。
改:同「查」操作相似,只要在查詢後將所在位置資料修改為相應值,時間複雜度為o(n).
刪:通過「查」操作找到相應資料後刪除,時間複雜度為o(n),刪除位置後的資料依次前移1個資料單位,時間複雜度為o(n),則整個刪除過程的時間複雜度為o(n).
增:增加操作首先要考慮線性表中是否還有閒餘位置,如果沒有則需要開闢更大空間的線性表,並將原表複製過去。將指定位置及之後的元素依次後移1個資料單位,時間複雜度為o(n),然後在相應位置插入資料,整個增加過程的時間複雜度為o(n).
二、鍊錶
1.有序鍊錶
設有如下資料按有序鍊錶形式儲存在磁碟中:
2 4 6 11 15 22 61 95
有序鍊錶 4
1115295
61622查:通過迴圈遍歷查詢,時間複雜度為o(n)。
改:通過「查」操作,在查詢後將所在位置資料修改為相應值,然後通過迴圈遍歷找到新修改的資料在有序鍊錶中應該的位置,並進行相應調整。時間複雜度為o(n).
刪:通過「查」操作找到相應資料後刪除,時間複雜度為o(n),使所刪除的前乙個資料的指標指向後乙個資料,時間複雜度為o(1),則整個刪除過程的時間複雜度為o(n).
增:通過迴圈遍歷到相應位置,將元素插入此處,然後通過迴圈遍歷找到新修改的資料在有序鍊錶中應該的位置,並進行相應調整。時間複雜度為o(n).
2.無序鍊錶
設有如下資料按有序鍊錶形式儲存在磁碟中:
23 12 61 11 15 9 61 33
無序鍊錶 12
1533
2361
1161
9查:通過迴圈遍歷查詢,時間複雜度為o(n)。
改:通過「查」操作,在查詢後將所在位置資料修改為相應值。時間複雜度為o(n).
刪:通過「查」操作找到相應資料後刪除,時間複雜度為o(n),使所刪除的前乙個資料的指標指向後乙個資料,時間複雜度為o(1),則整個刪除過程的時間複雜度為o(n).
增:通過迴圈遍歷到相應位置,將元素插入此處。時間複雜度為o(n).
第一次撰寫部落格,有很多不足之處,敬請大佬們指正。
線性表之 陣列的時間複雜度分析
陣列 array 是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。解釋一下線性表 線性表 linear list 顧名思義,線性表就是資料排成像一條線一樣的結構。每個線性表上的資料最多只有前和後兩個方向。其實除了陣列,鍊錶 佇列 棧等也是線性表結構。非線性表,比如二叉樹...
演算法中的時間複雜度和空間複雜度
演算法 algorithm 是指用來運算元據 解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢?主要還是從演算法所占用的 時間 和 空間 兩個維度去考量。因此,評價乙個演算法...
資料結構時間複雜度 資料結構之時間複雜度分析
正文 開篇我們先思考這麼乙個問題 一台老式的 cpu 的計算機執行 o n 的程式,和一台速度提高的新式 cpu 的計算機運 o n2 的程式。誰的程執行效率高呢?答案是前者優於後者。為什麼呢?我們從時間複雜度分析就可以知道。1 什麼是時間複雜度?在進行演算法分析時,語句總的執行次數 t n 是關於...