1 演算法複雜度

2022-06-18 22:27:15 字數 2619 閱讀 8435

演算法是用於解決特定問題的一系列的執行步驟,使用不同演算法,解決痛乙個問題,效率可能相差非常大.

package

zh.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

public

class

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 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...