Muito semelhante à minha pergunta postada anteriormente . Desta vez, no entanto, o gráfico não é direcionado.
Dado
- Um gráfico não direcionado sem arestas múltiplas ou loops,
- Um vértice de origem ,
- Um vértice alvo ,
- Comprimento máximo do caminho ,
Estou procurando por - Um subgrafo de G que contém qualquer vértice e qualquer aresta em G (e somente aqueles) que fazem parte de pelo menos um caminho simples de s a t com comprimento ≤ l .
Notas:
- Não preciso enumerar os caminhos.
- Estou procurando um algoritmo eficiente (tempo e memória), pois preciso executá-lo em gráficos muito grandes (10 ^ 8 vértices, 10 ^ 9 bordas).
ds.algorithms
graph-algorithms
shortest-path
Lior Kogan
fonte
fonte
Respostas:
Bem, o problema está em afinal. Vou manter a resposta anterior , uma vez que também funciona para o caso dirigido (que é NPC, como respondida na outra questão), e mostra que é F P T com relação a l .P FPT l
No caso não direcionado, é solucionável, deterministicamente, por meio do fluxo de custo mínimo (isso pode não funcionar nas escalas a que você está se referindo na pergunta, mas é melhor que o algoritmo exponencial.
O procedimento a seguir decidirá se alguma aresta deve fazer parte do gráfico de saída. Para responder ao problema original, faça um loop em todas as bordas.e=(u,v)∈E
Para criar a rede de fluxo, faça o seguinte:
Passo 1: Expand ter um vértice x e e substituir e com as arestas ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (que são dirigidos como um parte da rede de fluxo), defina seu custo como 0.e xe e (u,xe), (xe,u),(v,xe),(xe,v)
Etapa 2: substitua todos os vértices , exceto x e por dois vértices t - e t + , e adicione uma aresta ( t - , t + ) . Defina o custo dessas arestas como 1.t xe t− t+ (t−,t+)
Etapa 3: Substitua todas as arestas pelas arestas ( a + , b - ) , ( b + , a - ) . Defina o custo dessas arestas para 0.{a,b}∈E (a+,b−),(b+,a−)
Passo 4: Adicionar um novo vértice e adicionar as bordas ( s , y e ) , ( t , y e ) com custo 0.ye (s,ye),(t,ye)
Etapa 5: defina todas as capacidades para 1.
Agora execute o algoritmo de fluxo de custo mínimo, procurando um fluxo de valor 2 de para y e .xe ye
Análise:
fonte
fonte
Isso pretende ser um comentário, mas é muito longo para ser postado como um comentário.
Se isso parecer útil, posso tentar desenterrar as construções relevantes para você.
fonte