一什麼是演算法: 解決問題的策略機制,重要的是思想
求滿足a+b+c=1000,a^2+b^2=c^2 條件的所有a,b,c
思路:列舉法,以下被注釋掉的語句就是列舉每個滿足條件的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:',a,'b:',b,'c:',c)
for a in range(0,1001):
for b in range(0, 1001):
c=1000-a-b
if a**2+b**2==c**2:
print('a:',a,'b:',b,'c:',c)
end_time=time.time()
time=end_time-start_time
print('time:',time)
二特徵:輸入,輸出,可行性,確定性,有窮性
三時間複雜度:對資料總的操作次數
每台機器執行的總時間不同,但是執行的基本運算數量大體相同
係數並不影響走勢,n^2 拋物線,n^3
最優時間複雜度:演算法完成工作最少需要多少基本操作
最壞時間複雜度:演算法完成工作最多需要多少基本操作
平均時間複雜度:演算法完成工作平均需要多少基本操作
基本時間複雜度
list內建操作的時間複雜度
index o(1)
pop() o(1)
pop(i) o(n)
insert(i,item) o(n)
del operator o(n)
iteration o(n)
contains(in) o(n)
get slice[x:y] o(k)
del slice o(n)
set slice o(n+k)
reverse o(n)
sort o(nlogn)
multiply o(nk)
dict內建操作的時間複雜度
copy o(n)
get item o(1)
set item o(1)
del item o(1)
iteration o(n)
contains(in) o(1)
四常用內建演算法與資料結構
sorted dict list set tuple bisect(二分演算法) heapq(堆演算法)
演算法基本概念
所謂演算法,就是解決問題的一種方法或乙個過程。具體來講,演算法是由若干指令組成的有窮序列。演算法概念並不是計算機學科獨有的概念,生活到到處可見演算法的應用。演算法要滿足4條性質 1.輸入 2.輸出 3.確定性 4.有限性 複雜性 時間複雜度 t 演算法所求解問題規模n的 函式 漸進時間複雜度 o 當...
演算法基本概念
演算法 algorithm 評價演算法優劣的依據 複雜度 時間複雜度和空間複雜度 時間複雜度 time complexity eg.某兩個演算法的時間頻度是t n 100000n2 10n 6100000n 2 10n 6 100000 n2 1 0n 6 t n n2 t n n 2 t n n ...
演算法 基本概念
排序 氣泡排序 每次比較相鄰兩個元素大小,交換,直到末尾,迴圈執行 穩定 選擇排序 每次從待排序列中找出最大 最小 元素放在起始位置,迴圈執行 穩定 插入排序 不斷將新元素插入到前面已排好序的序列中 穩定,比冒泡和選擇更快 適於基本有序集合 希爾排序 插入排序的改進,將資料按步長分組,每組進行插入排...