ho bisogno di un efficiente della memoria int-int dict in Python che avrebbe sostenuto le seguenti operazioni in O (log n) tempo:efficiente della memoria int-int dict in Python
d[k] = v # replace if present
v = d[k] # None or a negative number if not present
ho bisogno di tenere ~ Coppie 250M, quindi è davvero deve essere stretto.
Ti capita di conoscere un'implementazione adatta (Python 2.7)?
EDIT Requisito impossibile rimosso e altre assurdità. Grazie, Craig e Kylotan!
di riformulare. Ecco un dizionario int-int banale con coppie di 1M:
>>> import random, sys
>>> from guppy import hpy
>>> h = hpy()
>>> h.setrelheap()
>>> d = {}
>>> for _ in xrange(1000000):
... d[random.randint(0, sys.maxint)] = random.randint(0, sys.maxint)
...
>>> h.heap()
Partition of a set of 1999530 objects. Total size = 49161112 bytes.
Index Count % Size % Cumulative % Kind (class/dict of class)
0 1 0 25165960 51 25165960 51 dict (no owner)
1 1999521 100 23994252 49 49160212 100 int
In media, una coppia di interi utilizza 49 byte.
Ecco un array di interi 2M:
>>> import array, random, sys
>>> from guppy import hpy
>>> h = hpy()
>>> h.setrelheap()
>>> a = array.array('i')
>>> for _ in xrange(2000000):
... a.append(random.randint(0, sys.maxint))
...
>>> h.heap()
Partition of a set of 14 objects. Total size = 8001108 bytes.
Index Count % Size % Cumulative % Kind (class/dict of class)
0 1 7 8000028 100 8000028 100 array.array
In media, una coppia di numeri interi utilizza 8 byte.
Accetto che 8 byte/coppia in un dizionario sia piuttosto difficile da ottenere in generale. Domanda ripubblicata: esiste un'implementazione efficiente della memoria del dizionario int-int che utilizza molto meno di 49 byte/coppia?
Forse I Non sto pensando in modo diretto, ma non vedo come la tua proposta di implementazione (con le chiavi in corrispondenza di posizioni pari della matrice; valori in posizioni dispari) potrebbe essere * O (log n) * per entrambi gli inserimenti e le ricerche. –
@Craig Oh, hai ragione. Nella mia implementazione non è possibile eseguire ricerche in _O (log n) _ (per chiavi diverse dalla più piccola). – Bolo
In che modo le coppie 250M si riferiscono all'intervallo di valori-chiave? Ci sono 250 milioni di chiavi possibili e 250 milioni di coppie effettive, quindi la matrice è densa al 100%? – hughdbrown