JavaScript 算法與數據結構

build status codecov

本倉庫包含了多種基於 JavaScript 的算法與數據結構。javascript

每種算法和數據結構都有本身的 README 並提供相關說明以及進一步閱讀和 YouTube 視頻。java

數據結構

數據結構是在計算機中組織和存儲數據的一種特殊方式,它能夠高效地訪問和修改數據。更確切地說,數據結構是數據值的集合,它們之間的關係、函數或操做能夠應用於數據。git

算法

算法是如何解決一類問題的明確規範。 算法是一組精肯定義操做序列的規則。github

算法主題

算法範式

算法範式是基於類的設計的通用方法或方法的算法。 這是一個比算法概念更高的抽象,就像一個 算法是比計算機程序更高的抽象。算法

如何使用本倉庫

安裝依賴

npm install 複製代碼npm install

執行測試

npm test 複製代碼npm test

按照名稱執行測試

npm test -- -t 'LinkedList' 複製代碼npm test -- -t 'LinkedList'

Playground

你能夠在./src/playground/playground.js文件中操做數據結構與算法,並在./src/playground/__test__/playground.test.js中編寫測試。

而後,只需運行如下命令來測試你的 Playground 是否按無誤:

npm test -- -t 'playground' 複製代碼npm test -- -t 'playground'

有用的信息

引用

▶ YouTube

大O符號

大O符號中指定的算法的增加順序。

Big O graphs

源: Big O Cheat Sheet.

如下是一些最經常使用的 大O標記法 列表以及它們與不一樣大小輸入數據的性能比較。

大O標記法 計算10個元素 計算100個元素 計算1000個元素
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

數據結構操做的複雜性

數據結構 鏈接 查找 插入 刪除
數組 1 n n n
n n 1 1
隊列 n n 1 1
鏈表 n n 1 1
哈希表 - n n n
二分查找樹 n n n n
B樹 log(n) log(n) log(n) log(n)
紅黑樹 log(n) log(n) log(n) log(n)
AVL樹 log(n) log(n) log(n) log(n)

數組排序算法的複雜性

名稱 最優 平均 最壞 內存 穩定
冒泡排序 n n^2 n^2 1 Yes
插入排序 n n^2 n^2 1 Yes
選擇排序 n^2 n^2 n^2 1 No
堆排序 n log(n) n log(n) n log(n) 1 No
歸併排序 n log(n) n log(n) n log(n) n Yes
快速排序 n log(n) n log(n) n^2 log(n) No
希爾排序 n log(n) 取決於差距序列 n (log(n))^2 1 No
相關文章
相關標籤/搜索