quando la gente dice insiemi hanno O (1) L'adesione controllo, sono parlando del medio del caso. Nel caso peggiore (quando tutti i valori hash si scontrano) il controllo dell'iscrizione è O (n). Vedi lo Python wiki on time complexity.
Il Wikipedia article dice il migliore dei casi complessità temporale per una tabella di hash che non è ridimensionare O(1 + k/n)
. Questo risultato non si applica direttamente ai set Python poiché i set Python usano una tabella hash che si ridimensiona.
Poco più sull'articolo Wikipedia dice che per il caso media, e assumendo una semplice funzione di hashing uniforme, la complessità temporale è O(1/(1-k/n))
, dove k/n
può essere delimitata da una costante c<1
.
Big-O si riferisce solo al comportamento asintotico come n → ∞. Poiché k/n può essere limitato da una costante, c < 1, indipendente da n,
O(1/(1-k/n))
è non più grande di O(1/(1-c))
che equivale a O(constant)
= O(1)
.
Quindi, supponendo un semplice hashing uniforme, su medio, il controllo di appartenenza per i set Python è O(1)
.
IIRC, l'originale 'implementazione set' realtà * è *' dict' con valori fittizi, ed è ottenuto ottimizzato in seguito. – dan04
Non è grande O lo scenario peggiore? Se riesci a trovare un'istanza in cui l'ora è O (n), allora è O (n) .. Non capisco nulla in questo momento da tutti quei tutorial. –
No, il caso medio è O (1) ma il caso peggiore è O (N) per la ricerca tabella hash. –