演算法是用於解決特定問題的一系列的執行步驟,使用不同演算法,解決痛乙個問題,效率可能相差非常大.
packagezh.algorithm;
public
class
fibonacci
//方法2:迴圈,複雜度為o(n)
public
static
int fib2(int
n)
return
second;
}public
static
void
main(string args)
}
方法1:比較不同演算法對同一組輸入的執行處理時間(事後統計法),缺點
方法2:從以下維度來評估演算法的優劣:
一般用大o表示法來描述複雜度,它表示的是資料規模n對應的複雜度,可以忽略常數,係數,低階.
複雜度排序
o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)
而通常時間複雜度與執行時間有一些常見的比例關係:
複雜度
10
20
50
100
1000
10000
100000
o(1)
<1s
<1s
<1s
<1s
<1s
<1s
<1s
o(log2(n))
<1s
<1s
<1s
<1s
<1s
<1s
<1s
o(n)
<1s
<1s
<1s
<1s
<1s
<1s
<1s
o(n*log2(n))
<1s
<1s
<1s
<1s
<1s
<1s
<1s
o(n2)
<1s
<1s
<1s
<1s
<1s
2s3-4 min
o(n3)
<1s
<1s
<1s
<1s
20s5 hours
231 days
o(2n)
<1s
<1s
260 days
hangs
hangs
hangs
hangs
o(n!)
<1s
hangs
hangs
hangs
hangs
hangs
hangs
o(nn)
3-4 min
hangs
hangs
hangs
hangs
hangs
hangs
publicclass
main
//o(n)
public
static
int fib2(int
n)
return
second;
}public
static
void test1(int
n)
else
if (n > 5)
else
//1 + 4 + 4 + 4
for (int i = 0; i < 4; i++)
//140000
//o(1)
//o(1)
}
public
static
void test2(int
n) }
public
static
void test3(int
n) }
}public
static
void test4(int
n) }
}public
static
void test5(int
n) }
public
static
void test6(int
n) }
public
static
void test7(int
n) }
}public
static
void test10(int
n) }
}
每日演算法 1 複雜度
1.什麼是演算法 alorithm 數學領域裡 演算法是用於解決某一類問題的公式和思想 計算機領域裡 它的本質是一系列程式指令,用於解決特定的運算和邏輯問題 2.演算法有高效的,也有拙劣的 衡量演算法好壞的重要標準有兩個 時間複雜度和空間複雜度 演算法的應用領域 1 數 算還不簡單?其實不然比如求兩...
演算法複雜度分析 1
空間複雜度 複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。如果存在常數c和n0使得當n n0時t n cf n 則記為t n o f n 例如 雖然對於較小的n值1000n要比n2大,但n2以更快地速度增長,因此n2最終將是更大的函式。在這種情況下,n 1...
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...