Habituellement Heap est la structure de données qui convient bien quand nous devons déterminer quelque chose comme plus/moins utilisé.
Même Python;s Counter.nlargest qui est utilisé à ces fins est mis en œuvre via la structure de données de tas.
Binary Heap structure de données a la complexité suivante
CreateHeap - O(1)
FindMin - O(1)
deleteMin - O(logn)
Insert - O(logn)
J'ai couru un comparition sur Hash (en utilisant le dictionnaire par défaut en Python) et Heap (en utilisant Collections.Counter.nlargest en python) et le Hash est carénage légèrement mieux que 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
Modifié les étiquettes, faites le moi savoir si ce n'est pas approprié. Ne semble pas une question spécifique à la langue. –
Hashing est une bonne heuristique, mais elle n'obtient pas de réponse exacte (en fait, deux chaînes peuvent être hash au même int) Aussi, si vous voulez trouver la plupart des fréquences, je pense que vous devriez sauter des mots comme ça. .. »parce qu'ils seront plus fréquents avec une forte probabilité, mais ce n'est pas une bonne nouvelle pour tout le monde de savoir que ce livre a le mot« fréquence ». –
user1002288, vous obtenez beaucoup de mauvais conseils sur ce sujet. Presque toutes les réponses proviennent d'une perspective pratique/de mise en œuvre qui n'est probablement pas ce que l'interviewer recherche. Vous voulez probablement regarder cela d'un point de vue théorique. Si vous posez cette question sur http://cstheory.stackexchange.com/ vous obtiendrez probablement de meilleures réponses. – Spike