¿Cuáles son las preguntas pendientes en estructuras de datos puramente funcionales?

51

Esta pregunta está inspirada en otra pregunta sobre las novedades en PFDS desde la publicación del libro de Okasaki en 1998 .

Comenzaré con dos preguntas que tengo:

  • ¿Existe una estructura de datos de conjunto puramente funcional que se aproxime a la velocidad de las tablas hash? Los intentos aún no están allí.
  • ¿Hay árboles de dedos puramente funcionales con O (1) anexar? Lo mejor hasta ahora es O (lg lg n), ideado por Kaplan y Tarjan.

¿Qué otros problemas de estructura de datos puramente funcionales están abiertos?

revs jbapple
fuente
¿Supongo que te refieres a intentos como en hash trees en lugar de los diccionarios más generales con claves que son secuencias? FWIW, creo que es imposible acercarse a la buena y antigua tabla hash aquí.
Jon Harrop

Respuestas:

19

Interpretaré la pregunta un poco liberalmente. Para las estructuras de datos de estilo Okasaki, la memorización es una forma de mutación implícita que tiene un efecto secundario en el tiempo de ejecución. Por lo tanto, tomaré la pregunta sobre estructuras de datos persistentes en sentido estricto, en lugar de estructuras de datos con una implementación puramente funcional, que son un subconjunto de las primeras. Por estricto quiero decir que debe poder acceder a versiones anteriores de una estructura de datos sin penalización, el árbol de versiones puede ramificarse arbitrariamente, etc.

En ese contexto, considero que UNION-FIND persistente es un importante problema abierto. Está el papel de Conchon-Filliâtre que se mencionó en el otro hilo. Un comentarista ya planteó un problema con su llamado arreglo persistente: en realidad es solo semipersistente. Pero suponga que lo reemplaza con un hash trie u otra matriz verdaderamente persistente que se comporta mejor en el peor (y posiblemente promedio) pero peor en el mejor de los casos. Eso todavía deja una cuestión importante abierta:

El documento da una prueba formal de corrección en Coq. Pero no abordan la complejidad amortizada ni formal ni informalmente. No me queda claro que la complicada mutación detrás de escena resulte en la complejidad amortizada esperada en todos los casos. Cuando lo pensé por última vez, me sentí algo confiado de poder construir un contraejemplo si ponía esfuerzo en ello. Incluso si me equivoco sobre esa última parte, la falta de un análisis adecuado es una brecha importante; Está claro que el análisis clásico de amortización de Trajan de UNION-FIND no se transfiere directamente.

por Vognsen
fuente
55
Un candidato para matrices totalmente persistentes (pero no persistentes de forma confluente) se presenta en Intentos con persistencia de confianza para un control de versión eficiente . Los autores afirman que la desaceleración de O (lg lg n) supera a la desaceleración de O (lg lg m) de Dietz et al, donde m es el número de operaciones que se han realizado en la matriz.
jbapple
1
También agregaré que, aunque las estructuras amortizadas perezosas de Okasaki a menudo son mucho más simples que las alternativas, no conozco ninguna estructura de datos que pueda implementarse de esa manera que no pueda implementarse también (con los mismos límites de tiempo, pero peor de los casos) de una manera verdaderamente puramente funcional.
jbapple
12

¿Qué otros problemas de estructura de datos puramente funcionales están abiertos?

Aquí hay uno:

¿Cuál es el equivalente puramente funcional de una tabla hash débil?

Jon Harrop
fuente
15
um ... el OP ha formulado preguntas sin respuesta, por lo que esto calificaría como respuesta potencial a la pregunta del OP.
Jason S
66
Está bien, voy a morder. ¿Qué es una tabla hash débil?
Jeffε
44
Es una tabla hash que permite que sus elementos se recojan si solo (y otros mapas débiles) contienen referencias a ella.
Havvy
3
@ JonHarrop: es fácil demostrar que una versión pura de una referencia débil es imposible, ya que las referencias débiles hacen que la semántica del lenguaje no sea determinista y los lenguajes puramente funcionales sean deterministas. Si además marca el no determinismo en el tipo, la implementación habitual funciona. Necesita tipos dependientes (para demostrar que una implementación proporciona las mismas respuestas independientemente del contenido de la referencia) si desea enmascarar el efecto de forma segura.
Neel Krishnaswami
55
@NeelKrishnaswami, no creo que ese sea el caso. Puede crear estructuras de datos débiles que no creen no determinismo, como una tabla débil que no admite enumeración (o conteo). Consulte wiki.ecmascript.org/doku.php?id=harmony:weak_maps para ver un ejemplo.
Sam Tobin-Hochstadt