パフォーマンスデータ構造のpython

2019年11月3日午後4時07分33秒

##比較*リスト*と*辞書の*操作

タイプ リスト 辞書
指数 キー
加えます 追加し、拡張し、挿入 D [キー] =値
削除 ポップ、*削除 ポップ
更新 L [I] =値 D [キー] =値
正チェック L [i]は、L [I:J] D [キー]、コピー
検索 インデックス(値)、カウント(値) /
他の ソート、逆 has_key、更新

一般的な操作のための原則として、最高のパフォーマンス

#リスト

リスト:最も一般的な操作を持っています

割り当てインデックス値+プレス: `L [i]を= v``のVの= 1 [i]は`

+リストの成長:

  - )(追加

  - __追加()__

  - "+"

最初のn個の整数のリストの4種類の生成方法

#のループ接続
DEFのTEST1():
    L = []
     のための I における範囲(1,000 ):
        L = L + [I] 

追記()メソッド
DEFのTEST2():
    L = []
     のための I における(1,000レンジ):
        L .append(I) 

リスト由来の一般式
DEF Test3は():
    L = [I  I における範囲(1,000 )] 

#の転送リストの範囲()関数呼び出し
DEF :TEST4()
    L =リスト(レンジ(1000))

性能比較

timeit インポートタイマ

T1 =タイマ(" TEST1()"" __main__ imporrt TEST1から" 印刷" 連結%のF秒\ n "%t1.timeit(数= 1000 ))

T2 =タイマ(" TEST2()"" __main__ imporrt TEST2から" 印刷" %のF秒を追加\ n "%はt2.timeit(数= 1000 ))

、T3 =タイマ(" TEST3()""__main__ imporrt TEST3から" プリント" 理解%のF秒\ n "%t3.timeit(数= 1000 ))

T4 =タイマ(" TEST4()" " __main__ imporrt TEST4から" プリント" リスト範囲%F秒\ nは"%のt4.timeit(番号= 1000))

- はtimeitモジュールTimer.timeit()メソッド[番号]パラメータのコールを繰り返す回数を示し

結果は1 <2 <3 <4の実行します

連結1.082888秒は
0.054237秒追加
理解0.027933秒の
リスト範囲0.011302秒

 ## list.pop操作

比較ポップ()とPOP(I)

インポートはtimeit 
popzero = timeit.Timer(" x.pop(0)"" __main__インポートXから" 
popend = timeit.Timer(" x.pop()"" から__main__インポートX " 

X =リスト(範囲(2000000 ))
 プリント(popzero.timeit(数= 1000 ))

X =リスト(範囲(2000000 ))
 プリント(popend.timeit(数= 1000))

業績

1.5929707000000235 
5.389999989802163e-05

2時間の成長傾向を比較

印刷" \ TPOP(0)\ T \ T \ TPOP()" のための I における範囲(1000000,100000001,1000000 ):
    X = リスト(範囲(I))
    PT = popend.timeit(数= 1000 
    、X = リスト(範囲(I))
    PZ = popzero.timeit(数= 1000 、印刷" %の15.5f、%15.5f "%(PZ、PT))
	ポップ(0)POP()
        0.79530、0.00007 
        1.62498、0.00006 
        2.71965、0.00007 
        3.78712、0.00006 
        5.04768、0.00006 
        6.15274、0.00006 
        6.96183、0.00007 
        7.83566、0.00007 
        9.28867、0.00007

 目に見える線形成長:なし成長

 

#の辞書

最も一般的な操作

- GETの値()

- 割り当てセット()

- 存在が(に)含まれてい

パフォーマンスはO(1)

インポートランダム
  I における範囲(10000,100001,10000 :)
    T = timeit.Timer(" random.randrange(%D)xの"%I、" から__main__インポートランダム、X " 
    のx = リスト(範囲(I ))
    lst_time = t.timeit(数= 1000 
    、X = {J:なし J における範囲(I)} 
    d_time = t.timeit(数= 1000 、印刷" %のDは、%10.3f、%10.3f "%(I、lst_time、d_time))

経営成績(サイズ、リスト、辞書)

    10000、0.047、0.001 
    20000、0.085、0.001 
    30000、0.129、0.001 
    40000、0.179、0.001 
    50000、0.220、0.001 
    60000、0.255、0.001 
    70000、0.311、0.001 
    80000、0.355、0.001 
    90000、0.376、0.001 
    100000、0.414、0.001

かかわらず、サイズの可視線形成長

O(n)  :  O(1)

詳細については、公式のwikiを参照してください

https://wiki.python.org/moin/TimeComplexity

おすすめ

転載: www.cnblogs.com/ilyyfan/p/11788222.html