Яка складність in
оператора в Python? Це тета (n)?
Це те саме, що і наступне?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
є списком.
Яка складність in
оператора в Python? Це тета (n)?
Це те саме, що і наступне?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
є списком.
L
не означає список. seq
є найпоширенішим вибором, коли хочеться навести перелік. L
це жахлива назва змінної. Однобуквені погані, і велика буква означає, що це клас. Навіть якщо це було щось конкретне, Python є динамічним, тому чітко заявляйте про це у такому випадку.
L
засоби list
? Моя лібтелепатія.так, мабуть, застаріла.
list
Відповіді:
Складність Росії in
повністю залежить від того, що L
є. e in L
стане L.__contains__(e)
.
Дивіться цей документ про складність часу щодо складності декількох вбудованих типів.
Ось короткий зміст для in
:
Найгірший випадок O (n) для наборів і наборів дуже рідкісний, але це може статися, якщо __hash__
його неправильно реалізувати. Це трапляється лише в тому випадку, якщо все у вашому наборі має однакове хеш-значення.
OrderedDict
, і, як ви могли дізнатися: OrderedDict
успадковується від dict
, тому більшість операцій (звичайно, за винятками) мають однакову складність .
Це повністю залежить від типу контейнера. Контейнери для хешування ( dict
, set
) використовують хеш і є по суті O (1). Типові послідовності ( list
, tuple
) реалізуються, як ви здогадуєтесь, і є O (n). Дерева були б середніми O (log n). І так далі. Кожен із цих типів мав би відповідний __contains__
метод з його великими характеристиками.
dict
і set
(а також потенційно інші)
Це залежить від контейнера, який ви тестуєте. Зазвичай це те, чого ви очікуєте - лінійний для впорядкованих структур даних, постійний для невпорядкованих. Звичайно, існують обидва типи (упорядковані чи невпорядковані), які можуть бути підкріплені якимись варіантами дерева.
A in B
перевіряє, чи A
є B
.