此方法通過寫出問題的一些特定的例子,分析總結其中的規律。具體而言,就是通過列舉少量的特殊情況,經過分析,最後找出一般的關系。
問題與以前莫個演算法解決過的問題相似,此時就可以觸類旁通,嘗試改進原有演算法來解決
此方法首先將問題簡單化,如改變數據類型、空間大小等,然後嘗試著將簡化後的問題解決。
為了降低問題的復雜度,很多時候都會將問題逐層分解,最後歸結為一些簡單的問題,這就是遞歸法
將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。分治法一般包括以下三個步驟:
1)將問題的實例劃分為幾個較小的實例,最好最有相等的規模。
2)對這些較小的實例求解,而最常見的方法一般是遞歸。
3)如歌有必要,合並這些較小問題的解,以得到原始問題的解。
一般而言,時間復雜度越低的演算法越高效。而更想達到時間復雜度的高效,很多時候就必須在空間上有所犧牲,用空間來換時間。而用空間換時間最有效的方法就是Hash法、大數組和點陣圖法。
在設計題目時,往往會有一個載體,這個載體便是數據結構。如數組、鏈表、二叉樹和圖等,當窄體確定後,可用的演算法自然而然就會顯現出來。可問題是很多時候並不確定這個載體是什麼,當無法確定這個載體時,一般也就很難想到合適的方法了。
當遇到上面的問題時,可以採用最原始的思考問題的方式——輪詢法。常考的數據結構與演算法一共就幾種,如下圖
此種方法看似笨拙,卻很實用,只要對常見的數據結構與演算法爛熟於心,一點都沒有問題。
2. 什麼叫演算法什麼叫計算機演算法
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
特徵
一個演算法應該具有以下五個重要的特徵:
有窮性(Finiteness)演算法的有窮性是指演算法必須能在執行有限個步驟之後終止;
確切性(Definiteness)演算法的每一步驟必須有確切的定義;
輸入項(Input)一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;
輸出項(Output)一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
可行性(Effectiveness)
演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
例1:輸入矩形的邊長,計算並輸出矩形面積
輸入矩形的邊長a和b
面積s=a*b
輸出s的值,演算法結束
例2:交換兩個變數a和b的值
輸入兩個數a和b
t=a;
a=b;
b=t;
輸出變數a和b的值,演算法結束
例3:輸入3個任意的整數,按從小到大的順序輸出這三個整數
輸入三個數a、b和c
如果a>b,就交換a、b的值
如果a>c,就交換a、c的值
如果b>c,就交換b、c的值
輸出a、b、c的值,演算法結束
例4:輸入一個正整數n,輸出1+2+3+...+n的和
1)輸入n的值
2)s=0;
3)i=1;
4)s=s+i;
5)如果i<n,則i=i+1,轉步驟4)
6)輸出s的值,演算法結束
例5:輸入兩個正整數a和b,輸出它們的最大公約數
1)輸入兩個數a和b
2)r=a%b;
3)如果r=0,轉步驟7)
4)a=b;
5)b=r;
6)轉步驟2)
7)輸出b的值,演算法結束
3. 演算法和開發的區別通俗說
簡單來說,演算法和開發有以下區別:
1. 定義:演算法是一套清晰、有序和可執行的步驟,用於解決特定問題或完成特定任務。開發則指的是根據需求,設計、實現和測試軟體或系統。
2. 抽象程度:演算法通常是一種高度抽象的概念,它描述了問題的解決思路和步驟,而不關注具體的實現細節。開發則注重具體的實施和實現方案,需要考慮編程語言、框架、技術等的使用。
3. 目標:演算法旨在解決特定的計算問題,通過優化步驟和演算法復雜度來提高效率和性能。開發的目標是根據需求構建可靠、高質量、易維護的軟體或系統。
4. 范圍:演算法可以獨立於具體的軟體或系統存在,可以在多個應用中共享和重復使用。開發則是為了構建具體的軟體或系統,涉及到更廣泛的開發流程、工具和技術。
總的來說,演算法是一種抽象的問題解決方法,它不依賴於具體的實施方式,而開發則是將演算法等概念轉化為實際的軟體或系統,涉及到更多的工具和技術。演算法是開發的基礎和靈魂,而開發是將演算法等思想付諸實際的過程。
4. 演算法和程序的區別
兩者區別有定義不同、書寫規定不同、實現方式不同。
1、定義不同:演算法是對特定問題求解步驟的描述,它是有限序列指令。程序是實現預期目的而進行操作的一系列語句和指令。
2、書寫規定不同:程序必須用規定的程序設計語言來寫,而演算法很隨意。
3、實現方式不同:演算法是解決問題的思路,程序是解決這些問題所具體編寫的代碼。
5. 演算法和函數的區別是什麼》
演算法可以理解成完成某個功能的思路
函數可能只是演算法的一部分
函數有參數,返回值 計算過程等