主要內容:演算法知識結構資料結構與演算法腦圖
時間複雜度
還要什麼演算法?!並不是說不要演算法。資料結構演算法對咱們程式設計師來說是最基本功,無論是工作的時候,還是面試的時候,基本功是否紮實,非常考驗開發人員能否勝任本職工作。本人對資料結構演算法的數,也是看了很多遍,無奈練習太少,思考也少,處於學忘了忘了學,相信有很多人和我有相似的經歷。我認為這些都是正常的,我們在學會基本知識點後,還要加以練習思考,實際工作中使用,才會靈活自如。一句話就是多動腦,多動手。
毫無以為對於絕大多數人來說,學習資料結構演算法就是為提公升個人競爭力,畢竟誰也不想日復一日的copy paste。演算法如此眾多,並不需要我們全部學習下來。至於要學習哪些基本的,我在網上收錄了一部分,記在下邊。
適用於工作的:
基礎資料結構和演算法
基礎的資料結構:陣列(array),鍊錶(linked list),佇列(queue),棧(stack),雜湊表,樹/二叉樹(tree/binary tree),堆(heap),跳表,圖(graph),trie樹。
基礎的演算法:排序,二分查詢,二叉樹的遍歷,圖的廣度、深度優先搜尋,雜湊演算法,字串匹配演算法。
基礎的演算法思想:遞迴,分治,貪心,回溯,動態規劃。
高階資料機構和演算法
紅黑樹,bm演算法,kmp演算法,ac自動機…
對於資料結構演算法的使用,應考慮時間空間複雜度,適合解決什麼問題應用場景,原理,**實現。
資料結構與演算法導圖
僅僅去學習理解這些演算法和資料結構是沒有用的,還需要我們在實際工作中多加實踐。對於某一點演算法要要帶著問題去思考,優劣勢,應用場景,有沒有可優化的地方。畢竟沒有萬能的演算法,要充分利用各自的優勢。
時間複雜度
就是程式執行時間隨著資料規模的擴大而呈現的變化趨勢,一般我們用此來作為判斷程式**的執行效能的常見手段,下面我使用python**來舉例每個時間複雜度的情況。
o(1)常數複雜度
n=
1print
(n)
o(log(n))對數複雜度
while n >1:
n = n //
2
o(n)線性
n=
1000
for i in
range
(n):
print
(i)
o(n^2)平方階
for i in
range
(n):
for j in
range
(n):
print
(i,j)
o(k^n)k次方階
while i<
2**n:
i +=
1
o(n!)階乘階
import math
for i in
range
(math.factorial(10)
):print
(i)
一般的時間複雜度從小到大o(1)這些似乎對於工作和理解**的複雜度基本夠用,我們還需要把時間合理利用起來。
資料演算法 資料結構與演算法
資料結構和演算法的意義?資料結構是資料的組織方式,演算法是對資料的處理方式,合理的資料結構和演算法,能夠保證程式高效的執行。演算法的五大特性 輸入 演算法具有0個或多個輸入 輸出 演算法具有1個或多個輸出 確定性 演算法每一步有確定的含義,不能有二義性 可行性 演算法有限次完成 演算法的評價方式?演...
演算法(資料結構)
空間不夠儲存 給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 40億個數空間儲存的問題 利用對映 分析 unsigned 範圍是2 32 40億大約大約4g個數不到,常規方法肯定是不行的 我們你可以利用 伴隨陣列 那種思想利用記...
演算法 資料結構
演算法是程式的核心,演算法的好壞直接決定了程式的好壞 基礎的幾種演算法 二分查詢 氣泡排序 插入排序 選擇排序 快速排序 二分查詢 假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功 若x小於當前位置值,則在數列的前半段中查詢 若x大於當前位置值則在數...