Dado um gráfico com arestas ponderadas, como podemos encontrar um ciclo negativo que contenha pelo menos um vértice em um determinado conjunto de vértices ? Obrigado.
ds.algorithms
graph-theory
Tianyi Cui
fonte
fonte
Respostas:
Se você não exige que o ciclo seja simples, divida o gráfico (direcionado) em seus componentes fortemente conectados e, para cada componente que contém um dos vértices , verifique se o componente contém um ciclo negativo. Se nenhum componente existir, não haverá um ciclo negativo contendo . Mas se algum componente o fizer, você poderá encontrar um ciclo negativo (não simples) contendo , fazendo muitas cópias do ciclo negativo e adicionando a esses caminhos os caminhos de e para algum vértice do ciclo para . (O tempo total para encontrar uma representação implícita do ciclo desejado será o mesmo que o tempo para encontrar um ciclo negativo em um gráfico direcionado, por exemplo, , se bem me lembro.)V i V i V i O ( n m )Vi Vi Vi Vi O(nm)
Se você exige que o ciclo seja simples, o problema se torna NP completo, mesmo que apenas um único vértice seja fornecido. (Você pode reduzir o caminho hamiltoniano para o problema: para encontrar um caminho hamiltoniano de uma determinada fonte para um determinado coletor em um dado gráfico , forneça o peso das arestas existentes -1 e adicione um vértice artificial com duas arestas de custo cada, um de a e um de a .) S T G V 1 N / 2 - 0,01 V 1 S T V 1V1 S T G V1 N/2−0.01 V1 S T V1
Se você permitir que o ciclo repita vértices, mas não arestas, acredito que ele ainda esteja completo com NP (por uma redução semelhante, mas dividindo cada vértice em uma aresta direcionada maneira padrão).( v , v ′ )v (v,v′)
fonte
Eu vou assumir que sua entrada é um gráfico direcionado; Não sei como fazer isso no caso não direcionado.
Faça cópias do conjunto de vértices do seu gráfico, onde é o número de vértices no gráfico. Substitua cada aresta de em no gráfico original por arestas que vão da cópia de para copiar de , para todas as opções de . Além disso, se pertence ao conjunto de vértices especificado, mas não o contrário, inclua também uma aresta que vai da cópia de para a cópia de .n u v i u i + 1 v i u i u u 0 vn n u v i u i+1 v i u i u 0 v
Todos os ciclos no gráfico expandido são projetados de volta para ciclos no gráfico original, mas todos os ciclos no gráfico expandido contêm um dos vértices especificados (caso contrário, você não pode retroceder nas camadas de expansão); portanto, o gráfico original contém um ciclo negativo contendo um vértice especificado se o gráfico expandido contiver qualquer ciclo negativo.
fonte