程式設計的非常規總結

2021-06-03 22:14:36 字數 1688 閱讀 9047

1、將問題簡化,從比較簡單的情況開始分析,比如1個元素情況,2個元素情況,3個元素情況,不斷增加,尋找規律,這樣有利於發現規律,從而解決問題,並且也有利於處理邊界情況。比如程式設計之美1.11、又如送貨站選址問題、1的個數問題等都可一通過逐漸的分析加以解決

2、從比較簡單的例子,模擬程式執行過程,比如二分查詢,可以使用4個元素的例子,模擬查詢過程,總結判斷條件等。

3、拿到乙個問題,首先看看能否依照題意通過迴圈直接求解,能否分治求解,分治求解關鍵的是兩部和合併後如何求解,例如距離最近的點問題,歸併排序問題,陣列和最大問題(程式設計珠璣上的解法)這和使用遞迴的解法很相似,分治法通常採用遞迴解決問題、如果是組合優化問題,優先考慮動態規劃或貪心求解

4、關於「2」,從中國古代的陰陽,到辯證唯物主義的正反面,「2」在哲學上具有重要的意義。對計算機來說更是如此:計算機中的二進位制;分治法通常將問題分成2份;折半查詢也有2;很多問題要麼分成兩面來看(二分查詢);要麼分成兩個子問題(分治法);要麼扣其兩端,比較中間(鍊錶相交使用2個指標、找符合條件的兩個數程式設計之美2.2、程式設計之美2.21等問題都很2有關);還有資料結構二叉樹;分析問題時,查其兩端,使用兩個指標,可能會給問題的解決帶來諸多方便,再比如可以用兩個stack來實現乙個queue。

1、如果乙個問題涉及到求最優的解,就可能會試用動態規劃來求解

2、動態規劃關鍵要給出遞迴求解的方程,再看看遞迴過程中是否重複了某些求解過程,將這些求解過程預先從底向上的求解出來並儲存好,以後直接使用。

3、如果能畫出儲存資料的矩陣或陣列,程式基本就清楚了,由於是自底向上求解,在求解i問題時,使用到i-1的結果,也就是訪問陣列或矩陣的i-1位置

4、動態規劃常常設計到組合**問題,一般不要考慮如何組合來解決問題,因為這樣通常不利於思考程式如何設計,而應該考慮如何迴圈並設定儲存計算結果的矩陣,通過i-1到i的迭代來解決問題,組合雖然是問題的直接表達,但不利與程式的設計,因為程式最終是通過若干個迴圈來完成的。

5、儲存資料的矩陣或陣列通常比處理的資料要多一行(列),因為第0行(列)是初始值,用來計算i=1(0)時,用到i-1資料

*6、如果用到迴圈求部分和問題,常常會導致增加n倍的複雜度,這時可以利用以前求和的結果+當前元素來減少迴圈的次數,從而降低複雜度,例如:送貨站選址問題、子陣列最大和問題等等,這一點很有價值。

1、如果遞迴前對全域性或引用變數++了,那麼如果遞迴後希望該變數恢復到以前的值,那麼遞迴後--該變數,例如求樹的高度,就採用了這種策略。

2、遞迴使用了函式呼叫的結果,我們不用關心結果是如何得到的,直接使用就是了,但其實不然,實際的計算過程都是在遞迴後面真正的計算處理過程完成的,而遞迴得到的結果常常有利與後面的計算過程,典型的問題是求最近兩點的距離問題。

3、遞迴常常帶來效率問題,比如求斐波那契數列問題,迴圈的速度要遠高於遞迴的速度,遞迴的效率和棧的規模都比較限制遞迴問題能夠處理的問題的規模。

1、陣列中間的位置是(start + end) / 2,分治演算法通常處理f(start, (start + end) / 2)和f((start + end) / 2 + 1, end)兩個問題,而折半查詢,因為已經比較了中間的元素,因此start = middle + 1;或end = middle - 1,start = end時處理只有乙個元素的情況,需要特別注意

2、陣列中元素的個素為end - start + 1個

3、給定乙個數要求各位通過模10來獲得,要取十位以上的資料通過除10來處理,

例如123,123 % 10 = 3; 123 / 10 = 12

Ubuntu非常規命令tips

最後利用 update rc.d 命令更新系統啟動項 如 sudo update rc.d disable transparent hugepages defaults p.s.disable transparent hugepages在文末 update alternatives display ...

非常規應用 bbed介紹

bbed安裝 cd oracle home rdbms lib make f ins rdbms.mk oracle home rdbms lib bbed 也可通過以下命令將bbed生成到 oracle home bin目錄 make f ins rdbms.mk bbed oracle home...

1687 陣列操作(非常規思維)

1687 陣列操作 time limit 1 sec memory limit 128 mb submit status web board description 給你乙個初始的長度為n的陣列。1 n 105 有兩個操作 op1 l,r 給兩個整數l和r 1 l r 當前陣列長度 你需要計算陣列從...