python資料結構 演算法引入

2021-08-06 07:20:45 字數 1702 閱讀 1530

如果 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 ...