Eu estava aprendendo sobre os caminhos mais longos e me deparei com o fato de que os caminhos mais longos nos gráficos gerais não são solucionáveis pela programação dinâmica porque o problema carecia de uma subestrutura ideal (que eu acho que a instrução precisa ser corrigida para os caminhos simples mais longos nos gráficos gerais não é solucionável por programaçao dinamica).
Se assumirmos que eles precisam ser simples (por algum motivo, isso ainda não é apreciado) e por mais tempo, é fácil criar um exemplo contrário. Considere o gráfico quadrado com 4 nós A → B → C → D → A.
O caminho mais longo de A a D é claramente A → B → CD. Mas o caminho mais longo de B a C não faz parte do caminho mais longo de A a D porque o caminho mais longo de B a C é B → A → D → C, que claramente não é o mesmo que o caminho B → C (que neste caso, é de fato o caminho mais curto!).
Isso parece funcionar apenas porque exigimos que os caminhos sejam simples. É necessário assumir que os caminhos devem ser simples para provarmos que a subestrutura ideal não está presente?
Penso que o contra-exemplo deve ser uma boa evidência / prova (o que não nego), simplesmente não acho o contra-exemplo muito esclarecedor. Entendo por que isso prova que não permite a subestrutura ideal, mas falha em fornecer-me uma compreensão ou intuição real, por que deveria ser óbvio que não deveria haver um caminho mais longo para a subestrutura ideal. Por exemplo, por que um argumento recortar e colar não funciona? Se o subcaminho não for mais longo, basta seguir um caminho mais longo! Parece muito tentador, quero dizer, se colocarmos em prática algo mais longo, é claro que deve demorar mais ... porém, isso está errado por alguma razão . O exemplo realmente prova que o DP nunca poderesolver caminhos mais longos (simples?) eficientemente? Não exijo uma prova geral de que não esteja em P (pois isso pode estar pedindo uma solução P vs NP). Estou logo após uma prova de que não é solucionável pelo DP (ou pelo menos uma evidência muito forte de que o DP nunca pode resolver esse problema de caminhos mais longos ou que o problema não possui uma estrutura ideal).
Eu tenho visto definitivamente na wikipedia que o problema deve ser NP-Hard, o que significa que provavelmente não existe um algoritmo rápido. Não tenho certeza se esse é o único tipo de evidência / intuição que existe para fornecer que a subestrutura ideal deve estar obviamente ausente (ou, se não estiver faltando, não pode ser usada para agilizar o problema). É que a única maneira de mostrar que ele deve não ser solucionável por um programa dinâmico rápido?
É a razão pela qual exigimos simplessó porque se não colocarmos esse requisito, o problema se torna trivial / desinteressante? Em outras palavras, se houver algum ciclo, será resolvido o problema do caminho mais longo para todos os nós alcançáveis a partir desse ciclo (localizando qualquer caminho para esse ciclo). Para os nós que não têm ciclo acessível, temos um gráfico acíclico, que é passível de solução por DP (se os pesos forem positivos?). Além disso, se houver ciclos, fizemos automaticamente as coisas terem uma subestrutura ideal (eu acho) porque qualquer caminho mais longo é composto pelo caminho mais longo que abrange dois casos: 1 os caminhos do ciclo ou 2 os caminhos do DAG, que ambos contêm subestrutura ideal. Então o problema se tornou trivial sem a necessidade de caminhos simples? Ou estou faltando alguma coisa ou existem melhores explicações para o porquê de caminhos simples serem necessários? Nãocaminhos mais longos em geral são solucionáveis pelo DP?
Também não tenho 100% de certeza de quais requisitos são necessários para garantir que o DP não possa ser usado. É necessário pesos de borda negativos, positivos, não ponderados, direcionados, não direcionados ... quais são os requisitos?
fonte
Respostas:
O problema do caminho mais longo tem uma subestrutura ideal e isso pode ser usado para melhorar a trivialidadeO(n!) algoritmo para um O~(2n) algoritmo. Primeiro temos que generalizar o problema:
Denotando a solução para esse problema,ℓ(s,t,A) (o gráfico é entendido), temos a recorrência
Você pode resolver essa recorrência usando a programação dinâmica no tempo .O~(2n)
Embora exista uma infraestrutura ideal aqui, há muitos parâmetros para acompanhar, e é isso que torna o problema intratável.
fonte
Primeiro de tudo, o caminho simples mais longo é NP-difícil e não há dúvida sobre isso (como o caminho Hamiltoniano se reduz a ele).
Em segundo lugar, se você considerar os caminhos não simples, o problema não fará muito sentido, pois o caminho não simples passa por uma aresta / vértice mais de uma vez, portanto, possui um loop. Como resultado de um loop no caminho, o caminho não simples mais longo é infinito .
fonte
Estive pensando o mesmo nas últimas 1 hora e cheguei às seguintes conclusões:
i) O caminho mais longo em um gráfico sem ciclos possui uma subestrutura ideal e o caminho mais curto.
ii) O caminho mais longo sem ciclos positivos possui uma subestrutura ideal e o caminho mais curto sem ciclos negativos.
iii) O caminho mais longo com ciclos positivos e o caminho mais curto com ciclos negativos não existem, pois podemos percorrer o ciclo infinitamente. Então, olhamos para caminhos simples.
iv) O caminho simples mais longo com ciclos positivos e o caminho simples mais curto com ciclos negativos é NP Hard.
DP resolve (i) em O (V + E). Bellman-Ford resolve (ii) em O (VE) e Djisktra ajuda em certos sub-casos de (ii).
A literatura confunde esse tópico quando o caminho mais longo é apenas o caminho mais curto com pesos negados e vice-versa. Não vejo razão para fornecer declarações gerais, como o caminho mais longo não possui uma subestrutura ideal, mas o caminho mais curto, etc.
fonte