Pythonのin演算子の複雑さは何ですか?シータ(n)ですか?
次と同じですか?
def find(L, x)
for e in L:
if e == x:
return True
return False
Lはリストです。
in
の複雑さは、L
が何であるかに完全に依存します。 _e in L
_はL.__contains__(e)
になります。
いくつかの組み込み型の複雑さについては、これを参照してください 時間の複雑さのドキュメント 。
in
の概要は次のとおりです。
O(n)セットと辞書の最悪のケースは非常にまれですが、___hash__
_の実装が不十分な場合に発生する可能性があります。これは、セット内のすべてが同じハッシュを持つ場合にのみ発生します値。
コンテナのタイプに完全に依存します。ハッシュコンテナ(dict
、set
)はハッシュを使用し、基本的にO(1)です。典型的なシーケンス(list
、Tuple
)は、推測通りに実装され、O(n)です。木は平均O(log n)になります。等々。これらの各タイプには、適切な__contains__
そのbig-O特性を持つメソッド。
テストするコンテナによって異なります。それは通常、あなたが期待するものです-順序付けられたデータ構造では線形、順序付けられていない場合は定数です。もちろん、両方のタイプ(順序付きまたは順序なし)がありますが、それらはツリーのバリアントによって裏付けられている場合があります。