演算法 常用思路

2022-08-02 05:30:13 字數 1418 閱讀 6370

原文: 

暴力法

對於一些簡單的題或者是數值範圍較小暴力不會時間超限的那種題。一般筆試時,若想不出 ac 的演算法,能暴力通過一部分也是可以的。

從簡單情況開始尋找規律

對於乙個題,可以看下在簡單情況下的數值,以尋求他的內在規律或者為破解複雜的情況提供線索。如登台階的那個題,一次可以上 1 個或者上 2 個,問上 n 層有多少種方法。這個題當我們考慮 n=1,2,3,4 時的情況時就很容易發現這不就是斐波那契數列嗎?

想想是否做過類似的題

並嘗試能否轉化為我們所熟悉的型別。例如,其實有些題就是乙個圖論,就是隱藏的較深,我們轉化一下或許就能撥開雲霧見青天了。

從特殊情況開始分析

就是模擬。例如,當我們解決乙個二維三維情況下的題目時,我們可以從一維開始分析。

陣列/鍊錶定位

不要總迴圈考慮直接定位。比如當前位置的前邊兩位比較,a[i]>a[i-2],node>node.pre.pre,這樣就減少迴圈遍歷,要注意越界和空指標

常用的排序查詢搜尋演算法和資料結構

從基本的常用排序查詢演算法切入。看有沒有解決思路。

遞迴/回溯

遞迴在某些問題上會是問題思路更加清晰,也會大大減少某些題的難度。特別適合於哪些 n =? 怎麼樣的問題。

分治(log)

分治主要是減少問題的規模,分治的主要難點在於合併兩個子問題的結果。

二分

二分不僅僅是有序性查詢,也是一種臨界值的好方法。找到點的其左邊全部滿足條件,右邊都不滿足條件,則此點臨界值

動態規劃

動態規劃就是尋找最優子結構,並最大化減少遞迴計算中重複計算子問題的情況。用動態規劃時,若一時沒有思路,可以先暴力,然後尋找分析暴力中哪些子問題被重複計算了,對於發現的重複計算的問題,用動態規劃的方式去消除它。

貪心演算法

若乙個題具有明顯的貪心傾向,可以先用貪心演算法試一下,能證明這個貪心演算法是正確的最好,不能證明的話就嘗試看能不能找乙個反例,如果找不到反例就證明這個演算法勉強能用。

位運算

對於一些沒有太好思路的題,位運算或許能收穫到意想不到的後果。

暴力打表尋找規律

就是用程式暴力例舉出數值小時的情況,看看能不能發現什麼規律。

分情況解決

我們不一定非得所有情況都用一種方式解決。不同的情況,若我們多加幾個 if 能夠使演算法複雜度降低也是乙個很好的方法。

從任意乙個情況開始分析

若都沒有太好的思路,先隨便分析一種情況,或許分析著分析著思路就出來了。

演算法 常用思路

暴力法 對於一些簡單的題或者是數值範圍較小暴力不會時間超限的那種題。一般筆試時,若想不出 ac 的演算法,能暴力通過一部分也是可以的。從簡單情況開始尋找規律 對於乙個題,可以看下在簡單情況下的數值,以尋求他的內在規律或者為破解複雜的情況提供線索。如登台階的那個題,一次可以上 1 個或者上 2 個,問...

程式設計演算法基礎 常用思路 0

0 暴力破解法 概念 通過直接列舉所有可能情況的求解思路。因為計算機的運算速度優勢,在手工計算看似不可能的處理方法,通過機器計算很可能十分輕鬆。只要所列舉的情況數目不是特別巨大即可。思路 a 列舉所有可能的情況 b 用條件來篩選可能情況 案例 package day1 public class te...

陣列物件常用處理方案(演算法思路)

1 依據陣列物件中某個值,將相同的物件合併成乙個新物件 資料來源是這樣的 beforedata 要將資料中name相同的項合併成乙個物件 afterdata 實現 let temparr for let i 0 i this beforedata.length i temparr.push this...