如果 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 開發框架用的相當熟練...