Sto tentando di scrivere una funzione che utilizza hash (per un'implementazione di A *).Algoritmica complessità di Data.Hashtable
Dopo un po 'di ricerca, ho trovato che lo standard defacto è Data.Map
.
Tuttavia, leggendo la documentazione API, ho trovato che: O(log n). Find the value at a key.
https://downloads.haskell.org/~ghc/6.12.2/docs/html/libraries/containers-0.3.0.0/Data-Map.html
Infatti documentazione suggerisce generalmente volte grandi O significativamente inferiori al O (1) di un hash standard.
Quindi ho trovato Data.HashTable
. https://hackage.haskell.org/package/base-4.2.0.2/docs/Data-HashTable.html Questa documentazione non menziona direttamente la grande O, portandomi a credere che probabilmente soddisfi le mie aspettative.
Ho diverse domande: 1) È corretto? O (lookupInDataHashTable) = O (1)? 2) Perché dovrei voler usare Data.Map
data la sua inefficienza? 3) Esiste una libreria migliore per le mie esigenze di struttura dei dati?
In pratica dovresti confrontare gli algoritmi O (1) vs O (log n) (il primo potrebbe avere una costante più grande), 'Data.Map' o' Data.IntMap' potrebbe essere una buona scelta. Se si desidera 'Data.HashTable' controllare https://hackage.haskell.org/package/hashtables In generale penso che sia più importante l'utilizzo della memoria finale. – josejuan