Considere gráficos direcionados. Chamamos um nó astro se e somente se nenhum outro nó pode ser alcançado a partir dele, mas todos os outros nós temos uma vantagem para . Formalmente:
v
com o número de nós no gráfico. Por exemplo, no gráfico abaixo, o nó não preenchido é uma superestrela (e os outros nós não).
[ fonte ]
Como você pode identificar todas as estrelas em gráficos direcionados em ? Uma representação gráfica adequada pode ser escolhida entre os candidatos habituais ; evite usar representações que movam a complexidade do problema para o pré-processamento.
Nenhuma suposição sobre densidade pode ser feita. Não assumimos que o gráfico contenha uma estrela; se não houver, o algoritmo deve reconhecê-lo.
Notação : é o número de arestas de saída de um nó, semelhante às arestas de entrada.
fonte
Respostas:
Podemos eliminar todos os vértices, exceto um, verificando a existência de arestas, porque podemos eliminar uma possibilidade para cada aresta que verificamos. Em particular, se houver uma aresta passando de x para y , eliminamos x e passamos para y (como outro vértice pode ser alcançado a partir dele); caso contrário, eliminamos y (pois não pode ser alcançado a partir de x ). Quando atingirmos o último vértice, o vértice que não for eliminado deve ser comparado com o outro (verifique se a condição de superestrela é mantida: existe uma aresta de entrada, mas não de saída) até que seja eliminada ou confirmada como superestrela. Algum pseudocódigo:n−1 x y x y y x
Vamos percorrer um exemplo para ilustrar o método. Pegue essa matriz, com o vértice de origem na parte superior e o destino ao lado. 1 indica uma aresta:
Vou esmaecer os vértices que descartamos como possíveis astros. Usarei verde e vermelho para indicar as arestas que estamos vendo quando elas contêm e não contêm a aresta que estamos procurando, e azul para indicar onde já olhamos.
Começamos olhando os vértices 1 e 2.
O número verde mostra que há uma aresta de 2 a 1, portanto, eliminamos 2 e procuramos uma aresta de 3 a 1 :
Como vemos que não existe essa aresta, eliminamos 1 e consideramos 3 como nosso vértice atual. Lembre-se de que já eliminamos 2 e verifique se há uma margem de 4 para 3:
Há uma aresta de 4 a 3, portanto, eliminamos 4. Nesse ponto, eliminamos todos os vértices (3), com exceção de um, então verifique suas arestas e veja se ele se qualifica:
Há uma margem de 1 a 3, mas não o inverso; portanto, 3 ainda é um candidato.
Há também uma margem de 2 a 3, mas não o inverso; portanto, 3 ainda é um candidato.
Há uma margem de 4 para 3, mas não de 3 para 4; que completa nossa verificação das arestas de 3 e descobrimos que é, de fato, uma estrela.
fonte
Não é este o problema das celebridades ?
Só haverá uma estrela (celebridade) se houver uma.
Mantenha uma lista de candidatos atuais, eliminando um por um. Uma lista vinculada deve ser suficiente.
No final, você pode verificar se o seu candidato é realmente uma estrela.
fonte
Esta resposta aborda a versão da pergunta em que era possível qualquer representação gráfica, e não a versão atual da pergunta.
Armazene seu gráfico como um par de lista de adjacência e lista de adjacência inversa, onde cada lista contém além do comprimento da lista, daí o número de fora e de dentro, respectivamente.
fonte
Apenas para referência, esse é um pseudocódigo de uma versão recursiva do que Kevin postou.
fonte