極簡教程 資料結構與演算法(一)

2021-10-05 15:00:18 字數 2641 閱讀 5625

2020-4-28

時間複雜度與空間複雜度

我盡量用 最少的文字,最少的**。來講明白資料結構與演算法。
const

findcat

=(n)

=>

console.

log(`$

有 $只貓`)

}findcat(1

)// 石興龍 有 1 只貓

findcat(10

)// 石興龍 有 10 只貓

findcat

(n)// 石興龍 有 n 只貓

先來看看執行過程。先定義了 3 個變數、其次 for 迴圈、最後一行列印。假設每一行的執行時間為 x 。那麼總的執行時間為:

t(n) = 3x + for(n) + x

其中 3x 和 x 的執行時間是不會變的,和 n 沒有關係,我們忽略不計。那麼現在的執行時間是:

t(n) = for(n) = o(n)

find 函式的複雜度完全依賴變數 n 的大小,所以就是 o(n)

| 複雜度 | 執行速度 |

| -- | --|

| o(1) | 最快 |

| o(logn) | 快 |

| o(n) | 慢 |

| o(nlong) | 很慢 |

| o(n次方) | 最慢 |

// 最快的** o(1)

letfindcat=(

)=>

console.

log(`$

有 $只貓`)

}findcat()

// 石興龍 有 10 只貓

// 雖然也有 for 迴圈,但是執行時間是固定的

// 快的** o(logn)

findcat

=(n)

=>

} console.

log(`$

有 $只貓`)

}findcat(10

)// 石興龍 有 5 只貓

// logn 函式產生的值 < n

// 慢的** o(n)

findcat

=(n)

=>

console.

log(`$

有 $只貓`)

}findcat(10

)// 石興龍 有 10 只貓

// 執行的時間 和 n 成正比

// 很慢的** o(nlong)

findcat

=(n)

=>

console.

log(`$

有 $只貓`)

}findcat(10

)// 石興龍 有 20 只貓

// logn 函式產生的值 > n

// 最慢的** o(n次方)

findcat

=(n)

=>

} console.

log(`$

有 $只貓`)

}findcat(10

)// 石興龍 有 100 只貓

// for 迴圈的執行次數是 n 的平方,甚至更大

let cats =

['鋼蛋兒'

,'灰灰'

,'三花'

,'豆芽'

]findcat

=(catname)

=>

排行第 $`

)break;}

} console.

log(`$

不是你的貓`)}

findcat

('鋼蛋兒'

)// 鋼蛋兒 排行第 1

// 執行效率最快 o(1)

findcat

('豆芽'

)// 豆芽 排行第 4

// 執行效率最慢 o(n)

findcat

(parseint

(math.

random()

* cats.length)

)// 平均執行效率為 o(n),因為是隨機的

// 插入貓,擴容陣列

let index =

4let

insertcat

=(newcatname)

=>

cats = newcats

}index++

; cats.

push

(newcatname)

}insertcat

('金漸層'

)// 複雜度:o(n)

insertcat

('海雙布偶'

)// 複雜度:o(1)

insertcat

('藍白高地'

)// 複雜度:o(1)

/* 均攤:雖然有迴圈,但是迴圈是有規律的。

每一次 o(n) 的後面都跟著 n - 1 次 o(1)

極簡教程 資料結構與演算法(二)

2020 4 29 陣列篇 我盡量用 最少的文字,最少的 來講明白資料結構與演算法。定址演算法 a i 陣列開始的位置 i 固定大小動作 複雜度array 增 o n array 刪 o n array 改 o 1 array 查 根據下標 o 1 array 查 迴圈查 o logn 如果不需要排...

極客幫資料結構與演算法總結

1 工具 1 時間和空間複雜度 2 常見時間複雜度表示 由低到高 4 思考題 二叉樹遍歷 前序 中序 後序 時間複雜度是?o n 圖的遍歷 時間複雜度?o n 搜尋演算法 深度優先 dfs 廣度優先 bfs 時間複雜度?o n 二分查詢 時間複雜度?log n 排好序的二維矩陣中查詢 o n 歸併排...

資料結構與演算法教程彙總

一 演算法 1.二分法 2.遞推演算法 分為順推法 又叫 斐波那契數列 和倒推法 兩種 演算法思想 3.列舉 窮舉 演算法 4.遞迴演算法 5.分治演算法 演算法思想 把大問題分解成n個小問題 6.貪婪演算法 7.試探法演算法 8.模擬演算法 二 資料結構 1.線性結構 資料元素之間是一對一的關係 ...