Яка складність 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.