如果 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):
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")
a, b, c:0, 500 ,500
a, b, c:200, 375 ,425
a, b, c:375, 200 ,425
a, b, c:500, 0 ,500
times:0
finished
t(
n)=o
(n∗n
∗(1+
1))=
o(n∗
n)=o
(n2)
輸入: 演算法具有0個或多個輸入
輸出: 演算法至少有1個或多個輸出
有窮性: 演算法在有限的步驟之後會自動結束而不會無限迴圈,並且每乙個步驟可以在可接受的時間內完成
確定性:演算法中的每一步都有確定的含義,不會出現二義性
可行性:演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成
」大o記法」:對於單調的整數函式f,如果存在乙個整數函式g和實常數c>0,使得對於充分大的n總有f(n)<=c*g(n),就說函式g是f的乙個漸近函式(忽略常數),記為f(n)=o(g(n))。也就是說,在趨向無窮的極限意義下,函式f的增長速度受到函式g的約束,亦即函式f與函式g的特徵相似。
時間複雜度:假設存在函式g,使得演算法a處理規模為n的問題示例所用時間為t(n)=o(g(n)),則稱o(g(n))為演算法a的漸近時間複雜度,簡稱時間複雜度,記為t(n)
基本操作,即只有常數項,認為其時間複雜度為o(1)
順序結構,時間複雜度按加法進行計算
迴圈結構,時間複雜度按乘法進行計算
分支結構,時間複雜度取最大值判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其它次要項和常數項可以忽略
在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度
資料結構與演算法 學習引入
找到丟失的數字 現在你手上有n 1個數字,這些數字的範圍是 1,n 且這n 1個數字中沒有重複的數字。有上述條件可知 你手上的數字缺了乙個。請編寫一段高效的找到缺失數字的 此題是一道比較老的資料結構與演算法考題,首先,在解答該題時,要進行一些題目的分析,題目分析我們主要做些什麼呢?要弄清楚,這n 1...
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...