漫畫演算法 學習筆記01

2021-10-19 19:54:16 字數 1643 閱讀 3042

在計算機領域裡,演算法是一系列程式指令,用於處理特定的運算和邏輯問題。衡量演算法優劣的主要標準是時間複雜度空間複雜度

資料結構是資料的組織、管理和儲存格式,其使用目的是為了高效的訪問和修改資料。

資料結構包含陣列、鍊錶這樣的線性資料結構,也包含樹、圖這樣的複雜資料結構。

資料結構(data structure)是演算法的基石。如果把演算法比喻成美麗靈動的舞者,那麼資料結構就是舞者腳下廣闊而堅實的舞台。

2.1 資料結構都有哪些組成方式?

線性結構

線性結構是最簡單的資料結構,包括陣列、鍊錶以及由它們衍生出來的棧、佇列、雜湊表

是相對複雜的資料結構,其中比較有代表性的是二叉樹,由它衍生出了二叉堆之類的資料結構。

圖圖是更為複雜的資料結構,因為在圖中會呈現出多對多的關聯關係。

其他資料結構

除了基礎資料結構之外,還有一些由基礎資料結構變形而來用於解決某些特定問題,如跳表、雜湊鍊錶、點陣圖等。例如在排序演算法中的堆排序,利用的就是二叉堆這樣一種資料結構;再如快取淘汰演算法lru(least recently used),利用的就是特殊資料結構雜湊鍊錶

時間複雜度是對乙個演算法執行時間長短的量度,用大o表示,記作t(n)=o(f(n))。常見的時間複雜度按照從低到高的順序,包括o(1)、o(logn)、o(n)、o(nlogn)、o(n2)

3.1 演算法的好壞

衡量演算法的好壞有很多標準,其中最重要的兩個指標是演算法的時間複雜度空間複雜度

3.2 基本操作執行次數

由於受執行環境和輸入規模的影響,**的絕對執行時間是無法預告的。但我們可以預估**的基本操作執行次數。

基本操作執行次數:設t(n)為程式基本操作執行次數的函式(也可認為是程式的相對執行時間函式),n為輸入規模。例如 t(n)=3n,執行次數是線性的;t(n)=5logn,執行次數是用對數計算的;t(n)=2,執行次數是常量;t(n)=0.5n2+0.5n,執行次數是用多項式計算的。

3.3 漸進時間複雜度

漸進時間複雜度(asymptotic time complexity): 若存在函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱為o(f(n)); o為演算法的漸進時間複雜度,簡稱時間複雜度。

直白的講:時間複雜度就是把程式的相對執行時間函式t(n)簡化為乙個數量級,這個數量級可以是n,n2,n3.等。

如何推導時間複雜度?

空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的度量,用大o表示,記作s(n)=o(f(n))。常見的空間複雜度按照從低到高的順序,包括o(1)、o(n)、o(n2)等。其中遞迴演算法的空間複雜度和遞迴深度成正比。

漫畫演算法 學習筆記(03)

3.實現 4.陣列與鍊錶的比較 鍊錶 linked list 是一種在物理上非連續 非順序的資料結構,由若干節點 node 所組成。private static class node 鍊錶的第乙個節點被稱為頭節點,最後乙個節點被稱為尾節點,尾節點的next指標指向null。對於鍊錶的其中乙個節點a,...

漫畫演算法 學習筆記(11)

2.二叉堆堆自我調整 3.二叉堆的 實現 二叉堆 本質上是一種完全二叉樹,它分兩個型別。什麼是最大堆?最大堆 最大堆的任何乙個父節點的值,都大於或等於它左 右孩子節點的值。什麼是最小堆?最小堆 最小堆的任何乙個父節點的值,都小於或等於它左 右孩子節點的值。二叉堆的根節點叫作堆頂。最大堆和最小堆堆特點...

漫畫演算法 學習筆記(23)

q 用兩個棧來模擬乙個佇列,要求實現佇列的兩個基本操作,入隊和出隊。思路 棧的特點是先入後出 filo 出入元素都是在同一端 棧頂 佇列的特點是先入先出 fifo 出入元素是在不同的兩端 隊頭和隊尾 由於我們可以使用兩個棧,那麼可以讓其中乙個棧作為佇列的入口,負責插入新元素 另乙個棧作為佇列的出口,...