演算法和演算法分析
要考慮清楚問題、問題例項和演算法三方面的概念。
問題:問題w是指需要用演算法來解決的乙個具體需求。例如:判斷乙個正整數是否為素數。問題是研究和實現演算法的出發點。
問題例項:問題例項是問題w的乙個具體例子,可以用彝族具體的引數來設定。乙個問題反映了所有問題例項的共性。
演算法:解決乙個問題w的演算法a,是乙個計算過程的嚴格描述。實施演算法a的描述過程,可以得到w的解。
演算法的性質
嚴格的演算法應該具有以下的幾個性質。
有窮性:乙個演算法應該有有限條描述(指令)構成。
能行性:演算法中指令含義嚴格,而且簡單明瞭,乙個演算法可以完全機械的進行。
確定性:給予一定的輸入可以得到確定的唯一的輸出。根據具體情況給予的輸入可以得到唯一的解。
終止性:對於問題的任何例項,演算法產生的行動序列是有窮的,或者終止行動序列給出唯一的解,或者終止給定的輸入無解。
輸入/輸出:有明確的輸入、輸出。
演算法描述
演算法是一種嚴格的描述過程,但是並沒有限定演算法的描述形式和描述方式。
演算法描述的方式:
自然語言的形式。
自然語言加公式。
嚴格定義的形式:通用的計算模型;專門的演算法描述。
某種程式語言的形式。
偽**的形式。
演算法設計與分析
演算法設計:演算法設計的模式包括:
列舉法:把所有可能出現的結果都一一例舉出來。
貪心法:根據問題資訊盡可能做出部分的解,然後根據部分解逐步擴充得到完整的解。這種辦法不一定能夠得到最好的解。
分治法:把複雜問題分解為多個子問題,求解多個子問題,並將多個子問題的解進行組合得到原問題的解。
回溯法(搜尋法):通過搜尋的方式來求解。如果沒有清晰地求解路徑就要分步驟來進行。二每乙個步驟可能有多種求解過程。採用試探的方式,根據實際情況,找乙個可能的方向來求解,如果後面的步驟無法求解下去,就退回到原來的步驟另尋求解路徑。
動態規劃法:在求解過程中,無法直截了當地求解時,需要在前面的步驟中不斷的積累,根據已知資訊,在後面的步驟中動態選擇最好的路徑,同時可能進一步積累資訊。
分支定界法:對於實際解決問題中無用的資訊可以提前刪除,縮小求解空間,加速求解過程。
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...
python演算法與資料結構
若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...