很多程式設計師都愛犯的乙個毛病,就是剛開始動手寫**就想找到最優解,對那些已經被人解決過的問題,還可以通過網路獲取最優化的解決方案,當進入乙個全新的領域,這種想畢其功於一役的想法會限制人的能力,推遲專案進度。
更一般的做法是:
1)先分析問題,找到乙個可行的方案
2)將方案落地
3)思考當問題規模增大乙個量級(10倍)時,這套方案能在可接受的時間內給出問題答案嗎
4)如果隨著問題規模不斷增長,方案不能在期望時間內給出問題答案,我們就要分析,那一塊兒出現了效能瓶頸,優化它
5) 就這樣不斷優化方案,直到處理能力達到數學規定的上界,就有了最優解
來看乙個twosum問題:
輸入乙個陣列,找出陣列中和為0的數字對之和。
先給出乙個簡單的方案:使用暴力列舉法,粗獷,但是能解決小規模問題
public class twosum
public static void main(string args) ;
system.out.println(twosum.twosum(arr));}}
這個方案的複雜度是
public class binarysearch
int high = arr.length - 1;
int low = 0;
while(low <= high)
if(arr[mid] > key)
if(arr[mid] < key)
}return -1;
}public static void main(string args) ;
system.out.println(binarysearch.rank(5, arr));}}
利用二分法來改進演算法:
public class twosumfast
}return cnt;
}public static void main(string args) ;
system.out.println(twosumfast.twosumfast(arr));}}
須知,如果a[i] + a[j] = 0,那麼a[j] = -a[i],即遍歷陣列,如果存在-a[i],那麼一定存在滿足twosum規則的子陣列。
那麼還有比這種方案更快的演算法嗎?數學上可以證明,沒有,這是最優解了。
最後,要明白一點:乙個能不斷演化的演算法更有價值,乙個能不斷成長的人生更有意義!
需求分析的一般步驟
1.繪製系統關聯圖,這種關聯圖是用於定義系統與系統外部實體間的界限和介面的簡單模型。同時它也明確了通過介面的資訊流和物質流。2.建立使用者介面原型,當開發人員或使用者不能確定需求時,開發乙個使用者介面原型 乙個可能的區域性實現 這樣使得許多概念和可能發生的事更為直觀明了。使用者通過評價原型將使專案參...
SEO一般步驟
seo並不是簡單的幾個秘訣或幾個建議,而是一項需要足夠耐心和細緻的腦力勞動。大體上,seo包括六個環節 2 架構分析 結構符合搜尋引擎的爬蟲喜好則有利於seo。架構分析包括 剔除 架構不良設計 實現樹狀目錄結構 導航與鏈結優化。3 目錄和頁面優化 seo不止是讓 首頁在搜尋引擎有好的排名,更重要的是...
jdbc的一般步驟
1.匯入jdbc驅動jar 2.註冊jdbc驅動 引數 驅動程式類名 class.forname 驅動程式類名 3.獲得connection物件 conn.getstatement 方法建立物件 用於執行sql語句 execute sql 執行任何sql,常用執行ddl executeupdate ...