solito Heap è la-struttura di dati che si adatta bene quando dobbiamo determinare qualcosa come più/meno utilizzato.
Anche lo Python;s Counter.nlargest utilizzato per questi scopi viene implementato tramite la struttura dei dati di heap.
Un binario Mucchio dati-struttura ha la seguente Complessità
CreateHeap - O(1)
FindMin - O(1)
deleteMin - O(logn)
Insert - O(logn)
ho eseguito una comparition su Hash (utilizzando il dizionario predefinito in Python) e Heap (utilizzando Collections.Counter.nlargest in Python) e l'hash è carenatura leggermente migliore di Heap.
>>> stmt1="""
import collections, random
somedata=[random.randint(1,1000) for i in xrange(1,10000)]
somehash=collections.defaultdict(int)
for d in somedata:
somehash[d]+=1
maxkey=0
for k,v in somehash.items():
if somehash[maxkey] > v:
maxkey=k
"""
>>> stmt2="""
import collections,random
somedata=[random.randint(1,1000) for i in xrange(1,10000)]
collections.Counter(somedata).most_common(1)
"""
>>> t1=timeit.Timer(stmt=stmt1)
>>> t2=timeit.Timer(stmt=stmt2)
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=10)/10)
38168.96 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=10)/10)
33600.80 usec/pass
Modificato il tag, fammi sapere se non appropriato. Non sembra una domanda specifica per la lingua. –
Hashing è un buon euristico, ma non ottiene una risposta esatta (infatti due stringhe possono essere hash per lo stesso int) Inoltre, se si desidera trovare la maggior parte delle parole di frequenza, penso che si debbano saltare parole come 'the, then ,. ..' perché saranno più frequenti con alta probabilità, ma non è una buona notizia che tutti sappiano che questo libro ha "la" più frequentemente delle parole. –
user1002288, stai ricevendo molti consigli sbagliati su questo thread. Quasi tutte le risposte provengono da una prospettiva pratica/attuativa che probabilmente non è ciò che l'intervistatore sta cercando. Probabilmente vorrai guardare questo da una prospettiva teorica. Se fai questa domanda su http://cstheory.stackexchange.com/ probabilmente otterrai risposte migliori. – Spike