Calcular a composição relacional em

7

Definições: Seja um DAG sem auto-loops e e sejam gráficos.G=(V,E)XGYG

Entrada: . Saída: A composição relacional composição relacional em .X,Y XYO(|E||V|)

  • Caso 1:. Dois para loops acima de e : Tempo de execução .|E||V|E(X)E(Y)O(|E|2)O(|E||V|)
  • Caso 2:|V||E|
    1. Desenhe o gráfico : . Chamamos arestas de preto e de vermelho.(V(G),E(X)E(Y))(O(|V|)+O(|2E|)))E(X)E(Y)
    2. Classifique-o topologicamente (Kahn: ). Deixe o primeiro nível ser , e as arestas vão de um nível para um nível mais alto.O(|V|)+O(|E|)0
    3. Desenhe este gráfico duas vezes.
    4. Na primeira cópia, remova todas as bordas vermelhas que começam no nível par e todas as bordas pretas que começam no nível ímpar: .O(E)
    5. Na segunda cópia, remova cada "par preto" e "ímpar vermelho": .O(E)
    6. Para a primeira cópia:
      • para todos os nós no nívelu2i
      • para todos os nós no nívelv2i+1
      • borda do relatório (Tempo de execução ).(u,v)O(V2)O(EV)
    7. Para a segunda cópia: O mesmo para " ".2i+1
    8. União os nós relatados, elimine duplicatas (espero que a representação gráfica permita isso).O(V2)<=O(EV)

Alguns de vocês poderiam examinar meu algoritmo e verificar se

  • isso está correto
  • está emO(|E||V|)

Se estiver correto, meu algoritmo já "existe"? Caso contrário, você poderia fornecer uma alternativa? Aceito a primeira resposta, mas voto a favor se mais algumas pessoas tiverem a gentileza de verificar.

EDIT: Etapa 6 Parece estar em às vezes. Eu gostaria que isso não fosse verdade. Alguém tem um algoritmo de trabalho?O(E2)

Johannes
fonte

Respostas:

4

O problema está na etapa 6 (pelo que entendi).

Essencialmente, sua idéia é verificar as seqüências se e . A classificação topológica está correta, pois nessas seqüências as duas arestas devem ser uma após a outra.(u,w)(w,v)(u,w)E(X)(w,v)E(Y)

Uma aresta é preta se pertencer a . Uma aresta é vermelha se pertencer a . Uma aresta pode ter duas cores neste caso. (u,w)E(X)(w,v)E(Y)

Um nó verificará que cada vizinho [st é preto] se tiver uma borda vermelha para um de seus vizinhos. Nesse caso:uw(u,w)w(w,v)uVdeg(u).wN(x)deg(w)=O(E2)

Pelo que entendi: você fez uma filtragem de algumas arestas desnecessárias (etapa 4,5) - no entanto, pode ser o pior caso que levará a uma complexidade maior que . O(E2)

AJed
fonte
Obrigado, você está certo! Eu não posso relatar todos os pares de nós, eu preciso seguir as bordas. Hmm, sim, acho que isso pode levar a . Eu acho que o meu algoritmo não pode fazê-lo :(O(E2)
Johannes
Então, isso responde à sua pergunta?
AJed
Bem, mais ou menos. Gostaria que alguém encontrasse uma alternativa para a etapa 6, mas você será aceito.
Johannes
6

O Teorema 2.29 na página 60 da Teoria da Análise de Sippu e Soisalon-Soininen fornece um algoritmo para calcular (entre outras operações sobre relações) a composição de duas relações. O algoritmo é executado no tempo , em que é o tempo necessário para executar operações de união ou atribuição em conjuntos de vértices. O resultado dessa operação é um conjunto de vértices por vértice representando seus vizinhos. Esse algoritmo funciona em gráficos arbitrários, não apenas acíclicos.O(t(|V|+|E|))t

Alex ten Brink
fonte
Parece bom, embora eu não tenha acesso a este livro, nem mesmo da universidade :(
Johannes
@ Johannes, tente a biblioteca da sua universidade - eu também não tenho acesso ao livro, e o comprei na biblioteca da minha universidade.
Alex10 Brink