As árvores de corte de link são sempre usadas na prática, para computação de fluxo máximo ou outras aplicações?

20

Muitos algoritmos de fluxo máximo que eu normalmente vejo implementados, o algoritmo de Dinic, push relabel e outros, podem ter seu custo de tempo assintótico aprimorado através do uso de árvores dinâmicas (também conhecidas como árvores de corte de link).

  • O reencaminhamento por push é executado em ou O ( V 3 ) ou O ( V 2 O(V2E)O(V3)normalmente, mas com árvores dinâmicasO(VElog(V2/E))O(V2E)O(VElog(V2/E))
  • O algoritmo de Dinic é executado em , mas com árvores dinâmicas O ( V E log ( V ) )O(V2E)O(VElog(V))

No entanto, implementações práticas de algoritmos de fluxo máximo na maioria das bibliotecas não parecem fazer uso dessa estrutura de dados. As árvores dinâmicas são usadas na prática para o cálculo do fluxo máximo? Ou eles carregam muita sobrecarga para serem úteis para tamanhos de problemas do mundo real?

Existem outros domínios problemáticos em que as árvores cortadas por link são usadas?

Esta pergunta está relacionada a uma pergunta que eu fiz na história: Algum dos algoritmos de fluxo máximo de última geração é prático?

Rob Lachlan
fonte
visão geral / desc de árvores ligação de corte , mas apenas afirma que "é útil para aplicações tais como o fluxo de rede"
vzn
a partir da pesquisa tarjan citada por reza, basicamente os algoritmos de tempo linear têm um desempenho muito bom / melhor para um número moderado de vértices / arestas e, em seguida, há um limiar de vértices / arestas maiores, onde os algoritmos logarítmicos superam o algoritmo linear. portanto, o acesso logarítmico fns é útil e pode ser significativamente melhor para gráficos muito grandes.
vzn

Respostas:

7

Existe um artigo intitulado " Árvores dinâmicas na prática ", que analisa a implementação prática.

As outras categorias que a árvore Link-Cut pode ser usada com eficiência estão na Indexação de banco de dados . Você pode encontrar isso no livro " Técnicas de índice de banco de dados ".

Reza
fonte
acho que isso precisa de alguma elaboração. as árvores são úteis para índices em geral, é claro, mas sob quais condições a árvore seria modificada?
vzn
@vzn: árvore B +, árvore R, árvore H e árvore X são alguns exemplos.
Reza
é claro, mas suspeito que talvez ninguém tenha tentado usar árvores cortadas por link nos índices de banco de dados até o momento. é um aplicativo plausível, mas não parece claro que eles sejam otimizados para as mesmas operações que ocorrem nos índices do banco de dados.
vzn
5

este artigo conclui que uma árvore de corte de link (LC) supera as árvores de compressão de rake (RC) para o algoritmo de fluxo máximo Sleator / Tarjan usando um gerador de gráfico aleatório Dimacs padrão.

o artigo foca na propagação de mudanças como uma aplicação de árvores dinâmicas. por exemplo, a propagação de alterações é semelhante à maneira como as células da planilha do Excel precisam ser recalculadas nas alterações de algumas células com base nas dependências de célula / fórmula. os autores lançaram seu código como uma biblioteca aberta.

Uma análise experimental da propagação de mudanças em árvores dinâmicas Acar, Blelloch, Vittes

A propagação de mudanças é uma técnica para ajustar automaticamente a saída de um algoritmo às mudanças na entrada. A idéia por trás da propagação de alterações é rastrear as dependências entre os dados e as chamadas de função, para que, quando a entrada for alterada, as funções afetadas por essa alteração possam ser reexecutadas para atualizar a computação e a saída. A propagação de alterações possibilita que um compilador dinamize algoritmos estáticos.

vzn
fonte
Obrigado. É bom ver algumas referências de algoritmos que envolvem árvores dinâmicas.
22613 Robb Lachlan #