關於演算法的一點總結

2021-08-22 14:58:08 字數 1294 閱讀 1797

分解問題的角度: fix 某一維度,嘗試另一維度上的所有可能

a. 可能是array的(i, j)pointers, b. 可能是矩形的長與寬, c. 可能是tree的每乙個subtree, d. 可能是情景題的每一對pair…

求所有解的, 暴力上backtracking吧

如果問最短/最少的, 先想bfs、dp這對好**

如果環相關/重複訪問, dfs + visited state雄起

如果問連通性, 靜態靠dfs/bfs, 動態靠union-find

如果有依賴性, 想想topologic order 和indegree

dag的萬能套路 dfs+memo, 再到dp

建圖的時候想想vertex, edges/neighbors, cost分別是什麼。如果出現cycle, 別忘了給vertex增加狀態

樹相關, 永遠有backtracking 和 pure recursion兩條路

遇到字串/字典/char board相關的, trie tree總是可以試試的

range裡求最大/最小/sum等特徵值, segment tree會是不錯的選擇

matrix和array通常都是1. two pointers, 2. sliding window(fixed & not fixed), 3. dp

dp題型往往是: a. 問你可不可以啊, 數量有多少啊, b. 兩個string上match來match去的, c. 1d/2d array 相關, d. 博弈遊戲

破解dag cycle想想哪個維度是具有單調性的: 常見的steps, directions, paths

reversed idea非常重要, 可能會幫助你破題: 最長可能是某種最短的反面, 最多可能是某種最少的反面, obstacle的反面是reachable, subarray的反面是array中的剩下元素, left的反面是right。

look up別忘了hashmap/hashset, hashmap + dll是常見hybrid資料結構。

找規律試試那些旁門左道: 單調stack/雙端deque

排序**總是可以試試的

比較不同sol的trade offs: a. time/space complexity異同

b. online/offline演算法

c. pre-computation cost

d. 不同apis的call frequency差異會導致不同的時間要求

e. extension: 是否適用於generic parameters/stream input

f. 執行緒安全/large scale

關於MongoDB的一點總結

今天推送引擎註冊在dubbo上的服務總是自動會關閉掉,查了一下發現是system.in.read 的原因,導致自動關閉。但是還是不太明白,別人執行spring的時候,只要啟動以後就不會自動關閉,而我的spring剛啟動就關閉了,找了半天都沒有解決,沒辦法,只好用了最笨的方法 while true 而...

關於演算法的一點思考。。。

關於演算法的一點思考。在實踐過程中,我發現 有時候要解決乙個問題,可以設計幾個演算法分步完成任務,這樣處理起來比較簡單,但是情況並非總是如此,有時,我們需要將幾個步驟放在同乙個演算法內連帶處理,這樣才比較容易處理問題。我還發現,有時候,解決問題的演算法,是被發現出來的,並加以一步一步的檢驗才得以確定...

關於多執行緒的一點總結

昨天又在toplanguage上看到一些關於輕量級執行緒的討論,於是對其中很有用的一段話轉過來 記錄下來以供自己日後慢慢研究。下面是由red.gmail.com發表在toplanguage上的 1.process per connection thread per connection 這在連線數不...