it-swarm.it

Complessità temporale di python imposta operazioni?

Qual è la complessità temporale di ciascuna delle operazioni set di Python in notazione Big O ?

Sto usando Python's set type per un'operazione su un gran numero di elementi. Voglio sapere come le prestazioni di ogni operazione saranno influenzate dalle dimensioni del set. Ad esempio aggiungi e il test per l'appartenenza:

myset = set()
myset.add('foo')
'foo' in myset

Cercare su Google non ha rivelato alcuna risorsa, ma sembra ragionevole che la complessità temporale per l'implementazione impostata di Python sarebbe stata attentamente considerata.

Se esiste, un collegamento a qualcosa come this sarebbe fantastico. Se nulla di simile è là fuori, allora forse possiamo risolverlo?

Contrassegni extra per la ricerca della complessità temporale di tutte le operazioni impostate.

50
Stephen Emslie

Secondo wiki di Python: complessità temporale , il set è implementato come tabella hash . Quindi puoi aspettarti di cercare/inserire/eliminare nella media O (1) . A meno che il fattore di carico della tua tabella hash non sia troppo elevato, allora affronti collisioni e O (n).

Post scriptum per qualche motivo rivendicano O(n) per l'operazione di cancellazione che sembra un errore di battitura.

P.P.S. Questo è vero per CPython, pypy è un storia diversa .

34

L'operazione in dovrebbe essere indipendente dalla dimensione del contenitore, ad es. O (1) - data una funzione hash ottimale. Questo dovrebbe essere quasi vero per Python. L'hashing delle stringhe è sempre fondamentale, Python dovrebbe essere intelligente lì e quindi puoi aspettarti risultati quasi ottimali.

4
towi