分治演算法
線性時間選擇
o(n)
33//隨機線性選擇(偽**),o(n)
int partition (type a, int p, int r))
return table[n-1][w-1]
main: function () else else {
lowcost[i] = 0
for (int i = 1; i < n; i++) {
int temp = inf //權
int t = u0
for (int j = 1; j < n; j++) {
if ((!s[j]) && (lowcost[j] < temp)) { //不在u內且權更小
t = j
temp = lowcost[j]
if (t === u0) //找不到最小路徑點
break
s[t] = true //加入u
//更新lowcost和closet
for (int j = 1; j <= n; j++) {
if ((!s[j]) && (c[t][j] < lowcost[j])) { //不在u內且t到j的權小於最短權
lowcost[j] = c[t][j]
closest[j] = t
//最小費用為lowcost之和
排序演算法比較排序方式
平均情況
輔助空間
穩定性氣泡排序
o(n2)
o(1)
穩定選擇排序
o(n2)
o(1)
不穩定插入排序
o(n2)
o(1)
穩定希爾排序
o(nlogn)
o(1)
不穩定快速排序
o(nlogn)
o(nlogn)
不穩定歸併排序
o(nlogn)
o(n)
穩定堆排序
o(nlogn)
o(1)
不穩定桶排序
o(n+c)
o(1)
不穩定基數排序
o(nlog(r)m)
o(r)
穩定漸進複雜度3n2+10n
n2/10+2n
21+1/n
logn3
10log3n
o(n2)
o(2n)
o(1)
o(logn)
o(n)
2 < logn
f(n)的階 <= g(n)的階 => f(n)=o(g(n))
f(n)的階 >= g(n)的階 => f(n)=ω(g(n))
f(n) == g(n) => f(n)=θ(g(n))
基本概念
演算法特性有窮性:演算法的有窮性是指演算法必須能在執行有限個步驟之後終止。
確定性:演算法的每一步驟必須有確切的定義。
可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成。
輸入輸出:有0個或多個輸入,有1個或多個輸出。
好演算法標準
高效率,低儲存。
正確性、易讀性、健壯性、高效性、低儲存性
分支限界法
分支限界法與回溯法的區別二者都是在問題的解空間數上搜尋問題解的演算法。
分支限界法採用廣度優先或最小耗費優先方式生成解空間;回溯法採用深度優先方式生成解空間。
分支界限法一般用於求最優解;回溯法一般用於求全部解。
分支界限法需要額外輔助空間;回溯法不需要。
回溯 皇后 演算法筆記 演算法筆記
遞迴演算法 能夠用遞迴解決的問題需要滿足三個條件 原問題可以轉換為乙個或多個子問題來求解,而這些子問題的求解方法和原問題完全相同,只是規模不同 遞迴呼叫次數必須是有限的 必須有結束遞迴的條件 遞迴出口 來終止遞迴。設計遞迴演算法模式先求解問題的遞迴模型。在設計遞迴演算法的時候,如果糾結遞迴樹的每乙個...
回溯 皇后 演算法筆記 演算法筆記 回溯法
1 0 1揹包問題 思路 構造乙個二叉樹,每個商品都有兩種狀態,要或者不要。如果要就在這個節點的左枝掛子節點,如果不要就在右節點掛子節點。如果全部商品都分配完狀態之後就回溯,回溯到乙個還有其他選擇的節點,接著往這個選擇發展節點,然後再回溯,然後再往下。直到無路可走,就結束了。假如限制重量是10,總共...
回溯 皇后 演算法筆記 回溯演算法 N皇后問題
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4 輸出...