Skip to content

Latest commit

 

History

History
217 lines (183 loc) · 12.6 KB

README.zh-TW.md

File metadata and controls

217 lines (183 loc) · 12.6 KB

JavaScript 演算法與資料結構

build statuscodecov

這個知識庫包含許多 JavaScript 的資料結構與演算法的基礎範例。 每個演算法和資料結構都有其個別的文件,內有相關的解釋以及更多相關的文章或Youtube影片連結。

Read this in other languages:English, 简体中文, 한국어, 日本語, Polski, Français, Español, Português

資料結構

資料結構是一個電腦用來組織和排序資料的特定方式,透過這樣的方式資料可以有效率地被讀取以及修改。更精確地說,一個資料結構是一個資料值的集合、彼此間的關係,函數或者運作可以應用於資料上。

演算法

演算法是一個如何解決一類問題的非模糊規格。演算法是一個具有精確地定義了一系列運作的規則的集合

演算法議題分類

演算法範型

演算法的範型是一個泛用方法或設計一類底層演算法的方式。它是一個比演算法的概念更高階的抽象化,就像是演算法是比電腦程式更高階的抽象化。

如何使用本知識庫

安裝所有必須套件

npm install 

執行所有測試

npm test 

以名稱執行該測試

npm test -- 'LinkedList' 

練習場

你可以透過在./src/playground/playground.js裡面的檔案練習資料結構以及演算法,並且撰寫在./src/playground/__test__/playground.test.js裡面的測試程式。

接著直接執行下列的指令來測試你練習的 code 是否如預期運作:

npm test -- 'playground' 

有用的資訊

參考

▶ Data Structures and Algorithms on YouTube

大 O 標記

特別用大 O 標記演算法增長度的排序。

Big O 表

資料來源: Big O Cheat Sheet.

下列列出幾個常用的 Big O 標記以及其不同大小資料量輸入後的運算效能比較。

Big O 標記10個資料量需花費的時間100個資料量需花費的時間1000個資料量需花費的時間
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

資料結構運作複雜度

資料結構存取搜尋插入刪除
陣列1nnn
堆疊nn11
貯列nn11
鏈結串列nn11
雜湊表-nnn
二元搜尋樹nnnn
B-Treelog(n)log(n)log(n)log(n)
紅黑樹log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)

陣列排序演算法複雜度

名稱最佳平均最差記憶體穩定
氣派排序nn^2n^21Yes
插入排序nn^2n^21Yes
選擇排序n^2n^2n^21No
Heap 排序n log(n)n log(n)n log(n)1No
合併排序n log(n)n log(n)n log(n)nYes
快速排序n log(n)n log(n)n^2log(n)No
希爾排序n log(n)由gap sequence決定n (log(n))^21No
close