国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python算法引入

Godtoy / 3080人閱讀

摘要:參數(shù)是要測(cè)試的代碼語(yǔ)句參數(shù)是運(yùn)行代碼時(shí)需要的設(shè)置參數(shù)是一個(gè)定時(shí)器函數(shù),與平臺(tái)有關(guān)。類中測(cè)試語(yǔ)句執(zhí)行速度的對(duì)象方法。參數(shù)是測(cè)試代碼時(shí)的測(cè)試次數(shù),默認(rèn)為次。方法返回執(zhí)行代碼的平均耗時(shí),一個(gè)類型的秒數(shù)。

[TOC]

這里主要是算法的介紹以及一些判斷算法好壞的標(biāo)準(zhǔn)和方式

引入

如果a+b+c = 1000,且a^2 + b^2 = c^2,如何求出所有a,b,c可能的組合?

第一次嘗試:
import time
print("開始")
start_time = time.time()
for a in range(1001):
    for b in range(1001):
        for c in range(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:{}".format(end_time - start_time))
print("結(jié)束")
# 時(shí)間復(fù)雜度:T(n) = n^3 *2
開始
a,b,c:0,500,500
a,b,c:200,375,425
a,b,c:375,200,425
a,b,c:500,0,500
time:140.17622900009155
結(jié)束

算法 算法的概述

算法是獨(dú)立存在的一種解決問(wèn)題的方法和思想

算法的五大特性:

輸入: 0個(gè)或多個(gè)輸入

輸出: 1個(gè)或多個(gè)輸出

有窮性: 有限步驟,可接受時(shí)間范圍內(nèi)完成

確定性: 每一步具有確定的意義,不會(huì)出翔二義性

可行性: 能不能實(shí)現(xiàn)

第二次嘗試:

提示:c=1000-a-b

import time
print("開始")
start_time = time.time()
for a in range(1001):
    for b in range(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:{}".format(end_time - start_time))
print("結(jié)束")
# 時(shí)間復(fù)雜度:T(n) = n^2 *3
開始
a,b,c:0,500,500
a,b,c:200,375,425
a,b,c:375,200,425
a,b,c:500,0,500
time:1.0204615592956543
結(jié)束

解決一個(gè)問(wèn)題有多個(gè)算法,每個(gè)算法的效率還是有差距的,如何判斷算法的效率呢?

算法的效率衡量 時(shí)間復(fù)雜度和大O記法

時(shí)間復(fù)雜度:算法進(jìn)行了多少個(gè)基本操作(即花費(fèi)了多少個(gè)時(shí)間單位),漸進(jìn)函數(shù)

時(shí)間復(fù)雜度的幾條基本計(jì)算規(guī)則

基本操作,即只有常數(shù)項(xiàng),時(shí)間復(fù)雜度為O(1)

順序結(jié)構(gòu),時(shí)間復(fù)雜度按加法進(jìn)行計(jì)算

循環(huán)結(jié)構(gòu),時(shí)間復(fù)雜度按乘法計(jì)算

分支結(jié)構(gòu),時(shí)間復(fù)雜度取最大值

判斷一個(gè)算法的效率時(shí),往往只需要關(guān)注操作數(shù)量的最高次項(xiàng),其他次要項(xiàng)和常數(shù)項(xiàng)可以忽略

在沒(méi)有特殊說(shuō)明時(shí),我們所分析的算法的時(shí)間復(fù)雜度都是指最壞時(shí)間復(fù)雜度

python內(nèi)置類型性能分析 timeit模塊

timeit模塊可以用來(lái)測(cè)試一小段Python代碼的執(zhí)行速度。

class timeit,Timer(stmt="pass",setup="pass",timer= <.timer function> )

Timer是測(cè)量小段代碼執(zhí)行速度的類。

stmt參數(shù)是要測(cè)試的代碼語(yǔ)句(statment);

setup參數(shù)是運(yùn)行代碼時(shí)需要的設(shè)置;

timer參數(shù)是一個(gè)定時(shí)器函數(shù),與平臺(tái)有關(guān)。

timeit.Timer.timeit(number=1000000)

Timer類中測(cè)試語(yǔ)句執(zhí)行速度的對(duì)象方法。number參數(shù)是測(cè)試代碼時(shí)的測(cè)試次數(shù),默認(rèn)為1000000次。方法返回執(zhí)行代碼的平均耗時(shí),一個(gè)float類型的秒數(shù)。

下面是timeit模塊的使用方式

from timeit import Timer   
def t1():
    li1 = []
    for i in range(10000):
        li1.append(i)

def t2():
    li = []
    for i in range(10000):
        # li= li+[i]  # 兩個(gè)列表相加放到一個(gè)新的列表中
        li += [i] # 這個(gè)做過(guò)優(yōu)化,速度比相加快的多
def t3():
    li = [i for i in range(10000)]
    
def t4():
    li = list(range(10000))
    
def t5():
    li = []
    for i in range(10000):
        li.extend([i])  # 放到li列表中
        
def t6_end():
    li1 = []
    for i in range(10000):
        li1.append(i)  # 在列表最后加元素

def t6_start():
    li1 = []
    for i in range(10000):
        li1.insert(0,i)  # 在列表最前面加元素
        
        
timer = Timer("t1()","from __main__ import t1")
print("t1",timer.timeit(1000))
timer = Timer("t2()","from __main__ import t2")
print("t2",timer.timeit(1000))
timer = Timer("t3()","from __main__ import t3")
print("t3",timer.timeit(1000))
timer = Timer("t4()","from __main__ import t4")
print("t4",timer.timeit(1000))
timer = Timer("t5()","from __main__ import t5")
print("t5",timer.timeit(1000))
timer = Timer("t6_start()","from __main__ import t6_start")
print("t6_start",timer.timeit(1000))
timer = Timer("t6_end()","from __main__ import t6_end")
print("t6_end",timer.timeit(1000))
t1 0.8016083359998447
t2 211.04629018700052
t3 0.43422231000022293
t4 0.17026640999938536
t5 1.0775756929997442
t6_start 0.7481699620002473
t6_end 25.572036152000692

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44150.html

相關(guān)文章

  • 算法日積月累】1-選擇排序

    摘要:選擇排序算法實(shí)現(xiàn)實(shí)現(xiàn)選擇排序,記錄最小元素的索引,最后才交換位置說(shuō)明交換兩個(gè)數(shù)組中的元素,在中有更簡(jiǎn)單的寫法,這是的語(yǔ)法糖,其它語(yǔ)言中是沒(méi)有的。和語(yǔ)言中比較器的實(shí)現(xiàn)前面我們說(shuō)到了,我們?yōu)榱送怀雠判蛩惴ǖ乃枷耄瑢⑺械睦觾H限在數(shù)組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...

    neuSnail 評(píng)論0 收藏0
  • Python數(shù)據(jù)分析:KNN算法(k-近鄰算法)

    摘要:算法是一種數(shù)據(jù)分類算法,以距離樣本個(gè)最鄰近數(shù)據(jù)的類別代表樣本的類別,因此也叫作近鄰算法。排序后訪問(wèn)元素的方式與訪問(wèn)二維數(shù)組元素的方式一致 KNN算法是一種數(shù)據(jù)分類算法,以距離樣本k個(gè)最鄰近數(shù)據(jù)的類別代表樣本的類別,因此也叫作k-近鄰算法。KNN算法是數(shù)據(jù)挖掘中最簡(jiǎn)單的方法之一,大致可分為以下幾個(gè)步驟: 訓(xùn)練數(shù)據(jù):原數(shù)據(jù)集中所有數(shù)據(jù)類別的數(shù)據(jù)。 測(cè)試數(shù)據(jù):我們將要拿來(lái)測(cè)試的數(shù)據(jù)樣本。 ...

    Tychio 評(píng)論0 收藏0
  • 分詞,難在哪里?科普+解決方案!

    摘要:分詞的算法中文分詞有難度,不過(guò)也有成熟的解決方案。例如通過(guò)人民日?qǐng)?bào)訓(xùn)練的分詞系統(tǒng),在網(wǎng)絡(luò)玄幻小說(shuō)上,分詞的效果就不會(huì)好。三的優(yōu)點(diǎn)是開源的,號(hào)稱是中,最好的中文分詞組件。 showImg(https://segmentfault.com/img/remote/1460000016359704?w=1350&h=900); 題圖:by Lucas Davies 一、前言 分詞,我想是大多數(shù)...

    Steven 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<