心智圖資源庫 資料結構與演算法
關於資料結構與演算法的心智圖,涵蓋了複雜度分析、二元樹、動態規劃、排序、遞歸、二分查找、線性結構,希望這份心智圖都會對你有幫助。
編輯於2023-02-14 16:38:07이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
資料結構與演算法
複雜度分析
表示隨著資料規模的變化演算法在時間和空間兩個維度上的效能,使用 O() 表示,括號內的數值越低越好
時間複雜度
運算過程與資料規模的關係
例如演算法有一個循環說明所有資料都要遍歷一遍則事件複雜度為 O(n)
如果是兩層循環則所有的資料需要遍歷兩邊則時間複雜度為 O(n^2)
空間複雜度
主要看為了解決問題額外引入的資料結構與測試集資料規模的關係
引入常量基底的遍歷則空間複雜度為 O(1)
引入和資料規模一樣的資料結構,例如集合,這空間複雜度為 O(n)
魚和熊掌不可兼得,時間和空間亦是如此,通常會犧牲空間換取事件,或犧牲時間取得空間
二元樹
二元樹是每個節點最多有兩個子樹的樹結構,通常子樹被稱為「左子樹」和「右子樹」。
二元樹的遍歷
前序遍歷 root -> root.left -> root.right
中序遍歷:root.left -> root -> root.right
後序遍歷:root.left -> root.right -> root
可以看到 X 序是以 root 節點位置決定的,root 在前就是前序,在中間就是中序…而子節點的順序都是從左到右
層遍歷
逐層遍歷是一種廣度優先演算法
廣度優先搜尋是一種廣泛在樹和圖中運用的遍歷搜尋演算法
演算法從一個根節點開始,首先訪問節點本身。 然後遍歷它的相鄰節點,其次遍歷它的二級鄰節點、三級鄰節點,以此類推
Leetcode 題目
使用遞歸解決問題
自頂向上:前序遍歷解決問題
判斷條件
你能確定一些參數,從該節點自行解決出發找答案嗎?
你可以使用這些參數和節點本身的值來決定什麼應該是傳遞給它子節點的參數嗎?
都需要一個全域變數或是反覆傳遞的參數來儲存中間結果
路徑總和
自底向下:後續遍歷解決
判斷條件
對於樹中的任一個節點,如果你知道它子節點的答案,你能計算出該節點的答案嗎?
二元樹的最大深度
還原二元樹
如果是同一二元樹所有 [左子樹集合] 和 [右子數集合] 的長度是相等的
前序遍歷:根節點 [左子樹集合] [右子數集合]
後序遍歷:[左子樹集合] [右子樹集合] 根節點
用於確定根節點
中序遍歷:[左子樹集合] 根節點 [右子樹集合] : 根據根節點位置決定左右邊界
這是解題的關鍵,同這些關係推導出遞歸公式
使用 Map 儲存中序遍歷的結果,快速定位根節點的位置從而明確左右邊界
key : 節點的值
value:節點在數組的索引
從中序與後序遍歷序列建構二元樹
粉紅色 = 左子樹、紅色 = 根節點、綠色 = 右子樹
is: inorderStart
ri = rootIndex
ie = inorderEnd
ps = postorderStart
pe = postorderEnd
從前序與中序遍歷序列建構二元樹
動態規劃
動態規劃的核心思想是利用最優子結構和重疊子問題性質對窮舉法進行最佳化,透過將中間結果保存在陣列中,實現用空間來換取時間交換,實現程式的快速運作。
特徵
重疊子問題
最優子結構
排序
比較類別排序
交換排序
冒泡排序
演算法描述
比較相鄰的元素。如果第一個比第二個大,就交換它們兩個
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
針對所有的元素重複以上的步驟,除了最後一個;
重複步驟1~3,直到排序完成。
插入排序
選擇排序
簡單選擇排序
演算法描述
歸併排序
非比較類排序
遞迴
當有疑問的時候寫下遞歸公式
只要有可能,就應用記憶化
當堆疊溢位時,尾遞歸可能會有所幫助。
尾遞歸透過消除遞歸帶來的堆疊開銷,優化了演算法的空間複雜度
與非尾遞歸相比,尾部遞歸更容易閱讀和理解。
二分查找
二分查找是一種在每次比較後將查找空間一分為二的演算法。有序是二分查找的先決條件。每次需要尋找集合中的索引或元素時,都應該考慮二分查找。如果集合是無序的,我們可以總是在應用二分查找之前先對其進行排序。
二分查找是必考題目,一定要達到信手拈來的程度
模板1:在嚴格有序數組中尋找一個數,或插入一個數
題目:x 的平方根
想法還是二分查找,透過不斷二分壓縮樣本空間尋找 val^2 最接近 x 的值
注意尋找的是平方數最近接 x 的 mid
題目:搜尋螺旋數組
使用常規二分插找出的 mid 分割數組,判斷分割後的兩部分那部分有序,並使用有序的部分確定二分查找的邊界
注意判斷 targe 是否在區間內的判斷
區分語法
初始條件:left = 0, right = length-1
終止時:left > right
向左找:right = mid-1
向右查找:left = mid 1
關鍵屬性
查找條件可以在不與元素的兩側進行比較的情況下確定
不需要後處理,因為每一步中,你都在檢查是否找到了元素。如果到達末尾,則知道未找到該元素。
循環結束時候 left = right 1 會回傳 target 右鄰居下標
模板2:在嚴格有序數組中找到某個數字第一次出現的位置或尋找第一個大於等於某個數的位置
區分語法
初始條件:left = 0, right = length
終止時:left == right
向左找:right = mid
向右查找:left = mid 1
關鍵屬性
查找條件需要存取元素的直接右鄰居。此時 right = length - 1
需要進行後處理。 當你剩下 1 個元素時,循環 / 遞歸結束。 需要評估剩餘元素是否符合條件。
循環結束時候 left = right 將會回傳 target 的座標
模板3:在選嚴格遞增後嚴格遞減的陣列中尋找最大值(不常見,用於解特定題型)
線性結構
陣列
Top K 問題
解題想法就是排序,最簡單的方法就是上圖的使用 API 搞定,當然面試的時候這麼寫時過不了的
使用 PriorityQueue 有限隊列
優先權佇列會對資料進行排序,小的在頭大的在尾
程式碼也很簡單:時間和空間都是 O(n)
此題測驗的是排序演算法,只有手寫排序才能迎合了面試官考點
刪除排序數組中的重複項
體驗是排序資料。基本想法是雙指針,關鍵在於啟始值為 1 使用當前值比較後一個 -> num[i] != num[i-1] .時間O(n),空間O(1)
刪除排序數組中的重複項 II
此題比上一題難,允許存在兩個相同元素,體驗依舊是排序數組。想到的還是雙指針,但是實現難度不小
更屌的解題方式:比較大小,LeetCode 總站上大佬就是牛逼.時間O(n),空間O(1)
據此得出刪除排序數組中的k個重複項目標
顏色分類- 荷蘭國旗問題
合併兩個有序數組
正著不行,咱反著來。從尾部遍歷.時間O(n),空間O(1)