Perché la programmazione funzionale non ha studiato alberi dinamici?


19

Gli alberi dinamici svolgono un ruolo importante nella risoluzione di problemi quali flussi di rete, grafici dinamici, problemi combinatori ("Alberi dinamici in pratica" di Tarjan e Werneck) e la recente fusione di dizionari ("A Simple Mergeable Dictionary" di Adam Karczmarz),

Per alberi dinamici mi riferisco alla definizione dichiarata nel documento di Sleator & Tarjan "Una struttura di dati per alberi dinamici" nel 1983. Pochi sforzi sono stati pubblicati nell'area di ricerca di programmazione funzionale da allora.

  1. Edward Kmett ha implementato una versione degli alberi ST principalmente come traduzione della controparte C ++, vedi alberi tagliati da link .
  2. Chris Okasaki ha scritto un'implementazione limitata degli alberi Splay nel suo famoso libro "Strutture di dati puramente funzionali".
  3. Ralf Hinze e Ross Paterson hanno introdotto una struttura dati funzionale chiamata 2-3 finger trees ma con un obiettivo un po 'diverso da quello della definizione originale di alberi dinamici.

L'implementazione (e forse le prestazioni) degli alberi dinamici è divisa in base a tre approcci:

  1. Linearizzazione, in cui gli alberi ET (Euler tour) svolgono un ruolo importante. Non trovato uno studio puramente funzionale.
  2. Path-decomposition, dove gli alberi ST sono il fiore all'occhiello, ho appena trovato la versione di Kmett.
  3. Contrazione dell'albero, in cui i giocatori sono i migliori alberi, gli alberi della topologia e gli alberi RC. Non trovato uno studio puramente funzionale.

Analisi e implementazione puramente funzionali possono essere trovate su Splay, AVL, albero rosso-nero, ma quelli NON sono alberi dinamici. I primi sono considerati la struttura dei dati ombra (chiamata anche virtuale o ausiliaria) dei secondi.

Quindi, la mia domanda è:

Quali sono i motivi (svantaggi, punti deboli) affinché la comunità di ricerca sulla programmazione funzionale non partecipi alla struttura dei dati degli alberi dinamici?


14
Non capisco come si possa eventualmente dare una risposta senza formare un comitato comunitario di programmazione funzionale autorevole per la formazione di pareri ufficiali. Non possiamo riformulare la domanda in modo che ci sia qualcosa a cui si può rispondere qui? Per quanto ne so, l'OP dovrebbe semplicemente andare e implementare i suoi alberi dinamici a Haskell o altro e poi tornare qui per riferire che dopo tutto è stato fatto.
Andrej Bauer,

Aggiornamento a @AndrejBauer: l'OP è andato e ha implementato i suoi alberi dinamici in Haskell: arxiv.org/abs/1908.11105
jbapple

Risposte:


-1

"Nell'informatica, la programmazione funzionale è un paradigma di programmazione. Uno stile di costruzione della struttura e degli elementi dei programmi per computer che considera il calcolo come la valutazione delle funzioni matematiche ed evita il cambiamento di dati statali e mutabili". - Wikipedia

"modifica dello stato e dei dati mutabili" in altre parole "dinamico".

Quindi la tua domanda è un po 'come chiedere perché sinistra non è giusta.


1
I programmi funzionali possono rappresentare dati dinamici con strutture di dati persistenti. Questa domanda si sta chiedendo perché non sia stato studiato lo sviluppo di strutture di dati persistenti per un determinato problema. La domanda ha un senso.
Ripristina Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.