資料結構與演算法(演算法特點,時間複雜度)

2021-10-03 06:14:54 字數 1785 閱讀 4149

例題:如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 為自然數),如何求出所有a、b、c可能的組合?

#列舉法

import time

start_time = time.time(

)for a in

range(0

,1001):

for b in

range(0

,1001):

for c in

range(0

,1001):

if a+b+c==

1000

and a**

2+b**

2== c**2:

print

("a,b,c:%d,%d,%d"

%(a,b,c)

)end_time = time.time(

)print

("times:%d"

%(end_time-start_time)

)print

("finished"

)

輸入: 演算法具有0個或多個輸入

輸出: 演算法至少有1個或多個輸出

有窮性: 演算法在有限的步驟之後會自動結束而不會無限迴圈,並且每乙個步 驟可以在可接受的時間內完成

確定性:演算法中的每一步都有確定的含義,不會出現二義性

可行性:演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成

import time

start_time = time.time(

)for a in

range(0

,1001):

for b in

range(0

,1001):

c =1000

-a-b

if a+b+c==

1000

and a**

2+b**

2== c**2:

print

("a,b,c:%d,%d,%d"

%(a,b,c)

)end_time = time.time(

)print

("times:%d"

%(end_time-start_time)

)print

("finished"

)

時間複雜度幾條基本計算規則基本操作,即只有常數項,認為其時間複雜度為o(1)

順序結構,時間複雜度按加法進行計算

迴圈結構,時間複雜度按乘法進行計算

分支結構,時間複雜度取最大值

判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其它次要項和常數項可以忽略在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度

時間複雜度之間的關係:

資料結構只是靜態的描述了資料元素之間的關係。

高效的程式需要在資料結構的基礎上設計和選擇演算法。

程式 = 資料結構 + 演算法

總結:演算法是為了解決實際問題而設計的,資料結構是演算法需要處理的問題載體

資料結構與演算法 演算法與時間複雜度

演算法的五大特性 1.輸入,0 個或多個 2.輸入 1 個或多個 3.有窮性 4.確定性 5.可行性 如果乙個演算法執行效率 步驟 標記成 t n n 3 2 那麼這個2 可以看作乙個常數 k 就可以寫成 t n n 3 k 可以看出,如果改變常數k的值,並不會影響 t n 這個函式在座標軸的走勢,...

演算法與資料結構 時間複雜度

複雜度是衡量乙個演算法效率高低的乙個重要的因素,一般分為時間複雜度和空間複雜度。空間複雜度,一般在排序等 抽象資料型別的運算和物理實現 有關。本篇主要介紹時間複雜度的一些概念。我們在ram模型 1 記憶體無限大 2 基本運算o 1 下面考慮接下來的內容。準確的說,演算法的複雜性是執行演算法所需要的計...

資料結構與演算法 演算法的時間複雜度

乙個演算法花費的時間與演算法中語句執行次數成正比,哪個演算法中語句執行次數多,它花費的時間就多。乙個演算法中語句的執行次數稱為語句頻度或時間頻度。記為t n 複製 比如計算1到100所有數字之和,我們設計倆種演算法 int count 0 int end 100 該演算法中使用了for迴圈,迴圈了1...