Esistono implementazioni di un heap binario standard puramente funzionale? So che ci sono molti heap interessanti, ad esempio: Binomiale, heap di sinistra, tutti hanno un'implementazione funzionale, mi chiedo solo se c'è un modo per implementare l'heap binario standard o dobbiamo usare Array per implementarlo, a causa del tipo immutabile? Grazie!Come posso implementare un heap binario standard puramente funzionale (ocaml o haskell)?
risposta
Non è necessario un array per implementare un heap, è possibile implementarlo come struttura ad albero.
data Heap t = Node t (Heap t) (Heap t) | Nil
Lo svantaggio è che si finisce per riallocazione O(log N)
dei nodi per ogni operazione heap, e non avrà alcuna della cache località di un'implementazione imperativo basata su array. Alcune operazioni saranno difficili con questa struttura, ma poiché non so cosa vuoi fare con l'heap non posso indicarti una direzione più specifica.
Il motivo per cui abbiamo strutture funzionali speciali come le barrette è di velocizzare operazioni specifiche che normalmente non si eseguono su heap, come il recupero del nodo foglia più a sinistra. Puoi utilizzare molte delle stesse strutture dati che hai appreso per le lingue imperative in Haskell con solo modifiche ai modi in cui sono aggiornate.
Grazie a Dietrich, l'operazione che voglio implementare è far scendere un nuovo valore casuale dalla radice, ma non sono sicuro quale sia il modo migliore per implementare questa operazione in uno stile funzionale. – Ang
Tappo senza vergogna: Braun trees sono candidati perfetti per un min-heap puramente funzionale (o coda di priorità).
È possibile esaminare le idee descritte in questo documento A Functional Approach to Standard Binary Heaps o in questa fonte Heap.scala.
- 1. Heap efficienti in lingue puramente funzionali
- 2. Set puramente funzionale intelligente
- 3. Come implementare un heap mediano
- 4. Questa coda simulata puramente funzionale è valida?
- 5. Perché LINQ non è puramente funzionale?
- 6. Haskell o Standard ML per principianti?
- 7. Implementazione C++ di un heap binario
- 8. Come posso emulare i puntatori in Haskell?
- 9. JavaScript funzionale: come implementare Function.prototype.not
- 10. Come implementare un albero non binario
- 11. firme/tipi in programmazione funzionale (OCaml)
- 12. Purezza funzionale usando 'let' in Haskell
- 13. Implementare gli heap bootstrap di Okasaki in OCaml, perché non lo compila?
- 14. Elenco collegato in modo discreto in un linguaggio di programmazione puramente funzionale
- 15. Nuovo in OCaml: come potrei implementare l'eliminazione gaussiana?
- 16. haskell - come creare un binario da un modulo non principale?
- 17. Come generare un albero in modo funzionale. (Con Haskell)
- 18. Accesso da un paradigma di programmazione funzionale
- 19. Esiste un'implementazione Java standard di un heap di Fibonacci?
- 20. Haskell - Guida alla programmazione funzionale
- 21. Haskell conflitto di dipendenza funzionale
- 22. Overflow di heap in Haskell
- 23. Implementazione di un interprete a thread diretto in un linguaggio funzionale come OCaml
- 24. Che cos'è una struttura dati puramente funzionale che implementa efficientemente il rendering in un'immagine?
- 25. Esiste un debugger di traccia come `dbg` disponibile per Haskell o OCaml?
- 26. Come implementeresti un linguaggio di programmazione funzionale?
- 27. Come posso implementare una raccolta con indicizzazione O (1) e mutabilità in Haskell?
- 28. Esiste una funzione `flip` nella libreria standard OCaml?
- 29. Modo funzionale per implementare un contatore condiviso thread-safe
- 30. Come implementare i numeri binari in Haskell
Questa non è una gran domanda. Probabilmente dovresti riformularlo come qualcosa del tipo "Come posso implementare un heap binario puramente funzionale?" - hai molte più probabilità di ottenere risposte utili e perspicaci con questa formulazione. –
@TikhonJelvis grazie – Ang
Questo dipende. Ti aspetti che la versione puramente funzionale utilizzi lo stesso tipo di struttura per i dati? Comportarsi allo stesso modo per determinate operazioni? Se queste cose possono essere diverse, allora può davvero essere chiamato un "mucchio binario"? –