舉例說:
假設你們班級有30個人,假設按照成績高低已經把試卷排列好了,你想找出數學成績在75分的人。
第一種辦法,就是簡單的順次查詢,找到就退出。複雜度o(n)
第二種辦法,把試卷分兩羅,大概在中間那張如果小於75分,就把上邊的再分兩羅再執行上邊步驟,按照這個辦法找到為止。
(每次輸入範圍是上次的一半,遞迴,這也叫分治演算法)複雜度o(logn)
第三種辦法,假設你有100個編號的桶,你擺放的時候,直接把試卷丟到相應的編號的桶裡,這樣你一下就找到了試卷。複雜度o(1)
所有的演算法都可以最終演變為為查詢和排序,排序相當與查詢*n。
三種思路下
查詢的複雜度分別是o(n),o(logn),o(1)。
排序的複雜度分別是o(n*n),o(n*logn),o(n)。
掌握這些,資料結構和演算法的整體核心思路就有了,所有問題都是從這裡衍生出去的。
回溯演算法討論
目前為止,我見過的關於回溯演算法最精準的定義來自於leetcode。具體如下 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選...
failover機制的小討論
對於乙個7 24小時無間斷的線上服務來說,在服役時間內難免會遇到一些fail,例如db斷開連線且短暫連線不上了,下游的某個節點忽然掛了,運維部署上依賴的某乙個東西不存在了等等場景。本文主要來討論一下這些場景使用怎樣的策略會比較好。最簡單的方法,while true sleep 固定時間 不斷的重試,...
演算法討論 RMQ 學習筆記
模板及講解 運用st表實現區間詢問區間最大 最小,初始化時間複雜度o nlog n 查詢o 1 模板題 poj 3264 include include include include define ms i,j memset i,j,sizeof i using namespace std con...