日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

發布時間:2023/12/2 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据结构算法优势_Python数据结构与算法(一)----- 算法效率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.引入

先來看一道題:

如果a+b+c=1000, 且a2+b2=c^2(a,b,c為自然數),如何求出所有a,b,c可能的組合?

(1) 枚舉法

import time

start_time = time.time()

for a in range(0,1001):

for b in range(0,1001):

for c in range(1,1001):

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('time:%d'%(end_time-start_time))

print('finished')

##基本步驟數量T = 1000*1000*1000*2

改進代碼

import time

start_time = time.time()

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,b,c:%d,%d,%d'%(a,b,c))

##每臺機器執行的總時間不同

##但執行基本運算數量大體相同

end_time = time.time()

print('time:%d'%(end_time-start_time))

print('finished')

##基本步驟數量T(n)=n*n*(1+max(1,0))=n^2

算法的概念:是獨立存在的一種解決問題的方法和思想

算法的五大特征:

(1)輸入:算法具有0個或多個輸入

(2)輸出:至少有一個或多個輸出

(3)有窮性:在有限的步驟之后會自動結束而不會無限循環,并且每一個步驟可以在可接受的時間內執行

(4)確切性:每一步有確切的含義

(5)可行性:每一步是可行的

二 . 算法效率

時間復雜度和“大O計法”

時間復雜度:T(n) = n^3 * 2

大O計法:不用分析很精確 T(n) = n^3

最壞時間復雜度:

[1,2,4,8,6,5,3,1]排序 n^2

[1,2,3,4,5] for i in ls: n

(1) 最優時間復雜度:價值不大,沒有提供什么有用信息

(2)最壞時間復雜度:提供了一種保證

(3)平均時間復雜度:是對算法的一個全面評價,沒有提供保證

因此,主要關注最壞時間復雜度,然后最優時間敷在讀

2. 時間復雜度的幾條基本計算規則:

(1) 基本操作,即只有常數項

(2)順序結構,按照加法進行計算

(3)循環結構,按照乘法進行計算

(4)分支結構,時間復雜度取最大值

(5)判斷一個算法的效率時,往往只需要關注操作量的最高項次,其他次要項和常數項可以忽略

(6)在沒有特殊說明時,我們通常分析最壞時間復雜度

3. 常見時間復雜度:

(1)12 O(1) 常數階

(2) 2n+1 O(n) 線性階

(3)3n^2 O(n2) 平方階

(4)5logn. O(long) 對數階

(5)2n+3nlogn+19 O(n*logn) nlogn階

(6) 6n3+2n2+3n+4 O(n3) 立方階

(7)2n O(2n) 指數階

關系:

O(1)

三. Python內置類型性能分析

1. timeit模塊

可以用來測試一小段代碼的運行速度

class time.Timer(stmt=‘pass’,setup=‘pass’,time=)

time.Timer.timeit(n=1000000)

number參數時測試代碼時的測試次數

測算list

from timeit import Timer

#li1 = [1,2]

#li2 = [23,5]

#li = li1 +li2

#li = [i for i in range(10000)]

#li = list[range(10000)]

def test1():

li = []

for i in range(10000):

li.append(i)

def test2():

li = []

for i in range(10000):

li += [i]

def test3():

li = [i for i in range(10000)]

def test4():

li = list(range(10000))

def test5():

li = []

for i in range(10000):

li.extend([i])

timer1 = Timer('test1()','from __main__ import test1')

print('append:',timer1.timeit(1000))

timer2 = Timer('test2()','from __main__ import test2')

print('+:',timer2.timeit(1000))

timer3 = Timer('test3()','from __main__ import test3')

print('[i from i in range]:',timer3.timeit(1000))

timer4 = Timer('test4()','from __main__ import test4')

print('list(range()):',timer4.timeit(1000))

timer5 = Timer('test5()','from __main__ import test5')

print('list(range()):',timer5.timeit(1000))

##最快的是timer5

def test6():

li = []

for i in range(10000):

li.append(i) ##從列表尾添加

def test7():

li = []

for i in range(10000):

li.insert(0,i) ##從列表頭添加

timer6 = Timer('test6()','from __main__ import test6')

print('append:',timer6.timeit(1000))

timer7 = Timer('test7()','from __main__ import test5')

print('list(extend:',timer7.timeit(1000))

##對頭添加比對尾添加慢

list 內置時間復雜度

dict內置時間復雜度

四. 數據結構

數據是一個抽象的概念,將其分類后得到程序設計語言中的基本類型。

數據元素之間不是獨立的,存在特點的關系,這些關系便是數據結構。

程序=算法+數據結構

算法是為了解決實際問題而設計的,數據結構是算法需要處理的問題載體。

抽象數據類型:指一個數學模型以及定義在此數學模型上的一組操作。即把數據類型和數據類型上的運算捆在一起,進行封裝。

常用的數據運算有五種:插入,刪除,修改,查找和排序

原文鏈接:https://blog.csdn.net/mangogogo321/article/details/106678151

總結

以上是生活随笔為你收集整理的python数据结构算法优势_Python数据结构与算法(一)----- 算法效率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。