in
Pythonの演算子の複雑さは何ですか?theta(n)ですか?
下記と同じですか?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
リストです。
in
Pythonの演算子の複雑さは何ですか?theta(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特性を備えた適切な方法があります。
テストするコンテナによって異なります。これは通常、期待するものです。順序付けされたデータ構造の場合は線形、順序付けされていない場合は定数です。もちろん、ツリーのいくつかのバリアントに裏打ちされている可能性のある両方のタイプ(順序付きまたは順序なし)があります。