python為什麼要學資料結構與演算法

2021-09-19 13:42:43 字數 1816 閱讀 4427

如果 a+b+c=1000,且 a^2+b^2=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**2 + b**2 == c**2 and a+b+c == 1000:

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

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))

print("complete!")

執行結果:

a, b, c: 0, 500, 500

a, b, c: 200, 375, 425

a, b, c: 375, 200, 425

a, b, c: 500, 0, 500

elapsed: 214.583347

complete!

import time

start_time = time.time()

# 注意是兩重迴圈

for a in range(0, 1001):

for b in range(0, 1001-a):

c = 1000 - a - b

if a**2 + b**2 == c**2:

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

end_time = time.time()

print("elapsed: %f" % (end_time - start_time))

print("complete!")

執行結果:

a, b, c: 0, 500, 500

a, b, c: 200, 375, 425

a, b, c: 375, 200, 425

a, b, c: 500, 0, 500

elapsed: 0.182897

complete!

單純的改了一行**就提高了好幾倍的運算效率

for c in range(0, 1001):

if a**2 + b**2 == c**2 and a+b+c == 1000:

c = 1000 - a - b

if a**2 + b**2 == c**2:

方法一  的時間複雜度比較大,

t(n) = o(n*n*n) = o(n3)

方法二  第三次不用迴圈時間複雜度比較小

t(n) = o(n*n*(1+1)) = o(n*n) = o(n2)

對於同一問題,我們給出了兩種解決演算法,在兩種演算法的實現中,我們對程式執行的時間進行了測算,發現兩段程式執行的時間相差懸殊(214.583347秒相比於0.182897秒),由此我們可以得出結論:實現演算法程式的執行時間可以反應出演算法的效率,即演算法的優劣。

為什麼要學資料結構?

文章目錄 四 資料結構型別 在視覺化化程式設計的今天,借助於整合開發環境可以很快地生成程式,程式設計不再是計算機專業人員的專利。很多人認為,只要掌握幾種開發工具就可以成為程式設計高手,其實,這是一種誤解。要想成為乙個專業的開發人員,至少需要以下三個條件 1 能夠熟練地選擇和設計各種資料結構和演算法 ...

為什麼要學習資料結構

目錄 1 什麼是資料結構?2 為什麼我們要學習資料結構?3 常見的資料他的結構有8種 資料結構是以某種特定的布局方式儲存資料的容器。這種布局方式決定了資料結構對於某些操作是高效的,而對於其他操作則是低效的。所以我們需要理解各種資料結構,才能處理實際問題時選取最合適的資料結構。資料是電腦科學當中最關鍵...

資料結構與演算法 01 為什麼要學資料結構與演算法

從今天起,我打算寫乙個系列,關於資料結構與演算法.這篇文章,算是乙個開篇之詞吧.資料結構與演算法,作業系統,計算機組成原理,還有計算機網路,這些內容在實際工作中你用到了多少?是不是除了面試的時候會問到,好像寫 的時候,也沒怎麼用,對吧?況且就算用到,我只要會呼叫 j a api 開發框架用的相當熟練...