資料結構與演算法

2021-09-24 01:35:50 字數 1695 閱讀 1094

因為在刷leecode的時候涉及時間複雜度的問題,還是需要把本科學習的資料結構基礎知識進行整理

1.4 演算法及其複雜性

演算法的複雜性

時間複雜性: 演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜性,

** 乙個演算法在執行過程中消耗的時間取決於下面的因素:**

(1)演算法所需資料輸入的時間

(2)演算法編譯為可執行程式的時間

(3)計算機執行每條指令所需的時間

(4)演算法語句重複執行的次數

主要時間度量:演算法語句重複執行的次數

o後面的括號中有乙個函式,指明某個演算法的耗時/耗空間與資料增長量之間的關係。其中的n代表輸入資料的量。

2.1 比如時間複雜度為o(n),表示資料量增大幾倍,耗時也增大幾倍,常見的遍歷演算法

2.2 時間複雜度為o(n^2), 表示資料量增大n倍,耗時增大n的平方,比先行更高的時間複雜度。比如氣泡排序、選擇排序, 對n個數排序,需要掃瞄n*n次,

2.3 比如o(logn),當資料量增大n倍時,耗時增大logn倍數(以2為底)比如,當資料增大256倍時,耗時只增大8倍,是比線性還要低的時間複雜度,二分法查詢就是o(logn)的演算法,每找一次排除一半的可能,256個資料中,只需要查詢8次就可以找到目標

同理o(nlogn)同理,就是n乘以logn,當資料增大256倍時,耗時增大256*8倍,這個複雜度高於線性,地域平方。歸併排序就是o(nlogn)的時間複雜度。快速排序演算法

2.4 o(1)就是最低的時空複雜度了,也就是耗時/耗空間與輸入資料大小無關,無論輸入資料增大多少倍,耗時/耗空間都不變。雜湊演算法就是典型的o(1)時間複雜度,無論資料規模多大,都可以在一次計算後找到目標(不考慮衝突的話)

hash 演算法

雜湊表就是一種以**鍵-值(key-indexed)**儲存資料的結構,只需要輸入帶查詢的值即key ,即可查詢對應的值

使用哈西查詢的兩個步驟:

3.1 使用雜湊函式將被查詢的鍵轉換為陣列的索引。在理想的情況下,不同的鍵會被轉換為不同的索引值,但是有些情況下我們需要處理多個鍵被雜湊到乙個索引值的情況,因此雜湊的第二個步驟處理衝突

3.2. 處理哈西碰撞衝突:拉鍊法和線性探測法

雜湊表是在時間和空間上做出權衡的經典例子,如果沒有記憶體限制,可以直接將鍵作為陣列的索引,那麼所有的查詢時間複雜度為o(1):如果沒有沒存限制,可以使用無序陣列並進行順序查詢,這樣只需要很少的記憶體。雜湊表使用了適度的空間和時間在兩個極端找到了平衡。

構造雜湊表的方法:這裡部落格

介紹的很清楚,不再贅述:直接定址法,數字分析法,摺疊法,平方取中法,減去法,基數轉換法,除留餘數法,隨機數法,隨機乘數法;字串數值雜湊法;旋轉法

雜湊處理衝突的方法

其中h(key)為雜湊函式,m為表長,di為增量序列。增量序列的取值方式不同,相應的再雜湊方式也不同。主要有以下三種:

線性探測再雜湊:dii=1,2,3,…,m-1

二次探測再雜湊: di=12,-12,22,-22,…,k2,-k2 ( k<=m/2 )

偽隨機探測再雜湊:di=偽隨機數序列。

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...

資料結構 資料結構與演算法01

1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...

資料結構 資料結構與演算法02

1 演算法設計的原則 設計演算法時,通常應考慮達到以下目標 1,正確性 2,可讀性 3,健壯性 4,高效率與低儲存量需求 1,正確性 規格說明 四個層次 a,程式中不含語法錯誤 b,程式對於幾組輸入資料能夠得出滿足要求的結果 c,程式對精心選擇的 典型 苛刻切帶有刁難性的幾組輸入資料能夠得出滿足要求...