¿Los árboles de corte de enlace se utilizan en la práctica, para el cálculo de flujo máximo u otras aplicaciones?

20

Muchos algoritmos de flujo máximo que comúnmente veo implementados, el algoritmo de Dinic, el relé de empuje y otros, pueden mejorar su costo de tiempo asintótico a través del uso de árboles dinámicos (también conocidos como árboles de corte de enlace).

  • Push reetiquetado se ejecuta normalmente en u u , pero con árboles dinámicosO(V2E)O(V3)O(V2E)O(VElog(V2/E))
  • El algoritmo de Dinic se ejecuta en , pero con árboles dinámicosO(V2E)O(VElog(V))

Sin embargo, las implementaciones prácticas de algoritmos de flujo máximo en la mayoría de las bibliotecas no parecen hacer uso de esta estructura de datos. ¿Se utilizan árboles dinámicos en la práctica para el cálculo del flujo máximo? ¿O llevan demasiados gastos generales para ser útiles para los problemas del mundo real?

¿Hay otros dominios problemáticos en los que se usan árboles de corte de enlace?

Esta pregunta está relacionada con una pregunta que hice en teoría: ¿Son prácticos algunos de los algoritmos de flujo máximo de última generación?

Rob Lachlan
fuente
descripción general / descripción de los árboles cortados de enlaces, pero solo dice "es útil para aplicaciones como Network Flow"
vzn
de la encuesta tarjan citada por reza, básicamente los algoritmos de tiempo lineal funcionan muy bien / mejor para un número moderado de vértices / bordes, y luego hay un umbral de vértices / bordes más grandes donde los algoritmos logarítmicos superan al algoritmo lineal. por lo tanto, los fns de acceso logarítmico son útiles y pueden ser significativamente mejores para gráficos muy grandes.
vzn

Respuestas:

7

Hay un documento titulado " Árboles dinámicos en la práctica " que revisa la implementación práctica.

Las otras categorías en las que el árbol Link-Cut podría usarse de manera eficiente se encuentran en la indexación de bases de datos . Puede encontrar esto en el libro " Técnicas de índice de base de datos ".

Reza
fuente
Creo que esto necesita algo de elaboración. los árboles son útiles para los índices en general, por supuesto, pero ¿en qué condiciones se modificaría el árbol?
vzn
@vzn: B + -tree, R-tree, H-Tree y X-Tree son algunos ejemplos.
Reza
por supuesto, pero sospecho que tal vez nadie haya intentado usar árboles de corte de enlace en los índices de base de datos hasta la fecha. es una aplicación plausible, pero no parece claro que estén optimizados para las mismas operaciones que ocurren en los índices DB.
vzn
5

Este artículo encuentra al final que un árbol de corte de enlace (LC) supera a los árboles de compresión de rastrillo (RC) para el algoritmo de flujo máximo Sleator / Tarjan utilizando un generador de gráficos aleatorios Dimacs estándar.

El documento se centra en la propagación del cambio como una aplicación de los árboles dinámicos. por ejemplo, la propagación de cambios es similar a la forma en que las celdas de hoja de cálculo de Excel tienen que ser recalculadas en los cambios a algunas celdas en función de las dependencias de celda / fórmula. Los autores publicaron su código como una biblioteca abierta.

Un análisis experimental de la propagación del cambio en árboles dinámicos Acar, Blelloch, Vittes

La propagación de cambios es una técnica para ajustar automáticamente la salida de un algoritmo a los cambios en la entrada. La idea detrás de la propagación del cambio es rastrear las dependencias entre los datos y las llamadas a funciones, de modo que, cuando la entrada cambia, las funciones afectadas por ese cambio se pueden volver a ejecutar para actualizar el cálculo y la salida. La propagación de cambios hace posible que un compilador dinamice algoritmos estáticos.

vzn
fuente
Gracias. Es bueno ver algunos puntos de referencia de algoritmos que involucran árboles dinámicos.
Rob Lachlan