Ketika orang mengatakan set memiliki O (1) memeriksa keanggotaan, mereka berbicara tentang kasus rata - rata . Dalam kasus terburuk (ketika semua nilai hash bertabrakan) pengecekan keanggotaan adalah O (n). Lihat wiki Python pada kompleksitas waktu .
The artikel Wikipedia mengatakan kasus terbaik waktu kompleksitas untuk tabel hash yang tidak resize adalah O(1 + k/n)
. Hasil ini tidak secara langsung berlaku untuk set Python karena set Python menggunakan tabel hash yang mengubah ukuran.
Sedikit lebih jauh pada artikel Wikipedia mengatakan bahwa untuk kasus rata - rata , dan dengan asumsi fungsi hashing seragam sederhana, kompleksitas waktu adalah O(1/(1-k/n))
, di mana k/n
dapat dibatasi oleh konstanta c<1
.
Big-O hanya merujuk pada perilaku asimptotik sebagai n → ∞. Karena k / n dapat dibatasi oleh konstanta, c <1, tidak bergantung pada n ,
O(1/(1-k/n))
tidak lebih besar dari O(1/(1-c))
yang setara dengan O(constant)
= O(1)
.
Jadi dengan asumsi hashing sederhana yang seragam, rata-rata , memeriksa keanggotaan untuk set Python adalah O(1)
.
set
pelaksanaan sebenarnya adalahdict
dengan nilai-nilai boneka, dan itu bisa dioptimalkan kemudian.