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 √normalmente, mas com árvores dinâmicasO(VElog(V2/E))
- O algoritmo de Dinic é executado em , mas com árvores dinâmicas O ( V E log ( 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?
fonte
Respostas:
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 ".
fonte
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
fonte