O zero é permitido como o peso de uma aresta, em um gráfico ponderado?


60

Estou tentando escrever um script que gera gráficos aleatórios e preciso saber se uma aresta em um gráfico ponderado pode ter o valor 0.

na verdade, faz sentido que 0 possa ser usado como um peso de ponta, mas tenho trabalhado com gráficos nos últimos dias e nunca vi um exemplo disso.

insira a descrição da imagem aqui


28
Se valores negativos são "permitidos", por que não um zero? :)
Derek #

5
Apenas como um exemplo rápido, se pesos positivos representam o consumo líquido de combustível ao viajar de um nó para outro, então pesos negativos podem representar reabastecimento líquido. Uma borda com peso zero é onde o combustível consumido é exatamente compensado pelo reabastecimento.
JW

11
@ DavidRicherby Eu acredito que a verdadeira questão aqui é, por exemplo, "o algoritmo X está correto na presença de arestas de peso zero"? Caso contrário, qual é o contexto? A resposta pode ser sim ou não, dependendo dos detalhes. Uma pergunta como "uma matriz pode conter zeros" é igualmente significativa.
Juho

11
@ Juho: Oh, está claro tudo bem. É como perguntar se um número pode ser negativo. Para você, parece óbvio que depende do contexto, mas com certeza não era óbvio para as pessoas até que números negativos aparecessem. Mesmo zero não era óbvio.
Mehrdad 29/07

11
Dependendo do que você deseja fazer, seus pesos podem até não ser números reais. Por exemplo, se seu gráfico representa um circuito CA, seus pesos podem ser fasores e esses são números complexos.
user2357112

Respostas:


165

Permitido por quem ? Não existe uma Administração Central de Gráficos que decida o que você pode ou não fazer. Você pode definir objetos da maneira que for mais conveniente para você, desde que seja claro sobre qual é a definição. Se arestas com peso zero forem úteis para você, use-as; apenas verifique se seus leitores sabem o que você está fazendo.

O motivo pelo qual você normalmente não vê arestas com peso zero é que, na maioria dos contextos, uma aresta com peso zero é exatamente equivalente à ausência de uma aresta. Por exemplo, se seu gráfico representar países e a quantidade de transações realizadas entre eles, uma margem de peso zero significaria nenhuma negociação, o que é o mesmo que não ter nenhuma margem. Se o seu gráfico representar distâncias, uma borda com peso zero corresponderia a dois lugares à distância zero um do outro, o que significaria que eles realmente seriam o mesmo local, portanto, ambos deveriam ser representados pelo mesmo vértice. No entanto, em outros contextos, bordas com peso zero podem fazer sentido. Por exemplo, se o seu gráfico representa uma rede de estradas e os pesos das margens representam a quantidade de tráfego, há uma grande diferença entre uma estrada que ninguém usa (margem com peso zero) e nenhuma estrada (sem margem).


11
Vale a pena notar que muitos algoritmos de gráfico especificam explicitamente se funcionam em gráficos com pesos negativos ou não. Eu acho que isso esclarece que mesmo pesos negativos são permitidos, dependendo dos contextos.
Mooing Duck

6
@MooingDuck Acho que o objetivo da pergunta é que, embora os algoritmos realmente digam se funcionam ou não com pesos negativos, raramente são mencionados pesos zero. Os pesos negativos são muito menos incomuns que zero, portanto, neste contexto específico, não tenho certeza de que eles precisam ser mencionados.
David Richerby

13

Depende do contexto. Em geral, sim, bordas com peso zero e até negativo podem ser permitidas. Em alguns casos específicos, pode ser necessário que os pesos das arestas não sejam negativos ou estritamente positivos (por exemplo, o algoritmo de Dijkstra exige que os pesos sejam não negativos).


Existe um tipo específico de gráfico que proíbe zero? e permite valores negativos ou positivos?
Taxellool

9
"Gráfico ponderado pela borda diferente de zero".
Tom van der Zanden

10
@Taxellool Os objetos matemáticos não são gravados em pedra. Não há uma lista fixa de objetos matemáticos com nomes fixos que são os únicos que você pode usar.
David Richerby

Depende de qual algoritmo você usa. Bellman-Ford aceita zeros, enquanto em Dijkstra eles são evitados
Manuel Azar 13/11

5

Como as outras respostas observam, você é perfeitamente livre para considerar (ou excluir da consideração) gráficos ponderados com arestas de peso zero.

Dito isto, na minha experiência, a convenção usual na maioria das aplicações de gráficos ponderados é não fazer distinção entre uma borda com peso zero e a ausência de uma borda. Uma razão para isso é que, normalmente, os gráficos ponderados aparecem como generalizações de multigráficos , que por sua vez são generalizações de gráficos simples.

Especificamente, um multigráfico é um gráfico que (diferente de um gráfico simples ) permite várias arestas entre o mesmo par de nós. Considerando que, em um gráfico simples, qualquer par de nós sempre é conectado por 0 ou 1 arestas, um par de nós em um multigráfico pode ser conectado por 0, 1, 2, 3 ou mais (mas sempre um número inteiro não negativo de ) arestas.

A generalização de um multigráfico para permitir um número fracionário de arestas entre um par de nós leva naturalmente a considerar gráficos ponderados, e muitos algoritmos que funcionam em multigráficos arbitrários também podem funcionar nesses gráficos ponderados. Mas para tais algoritmos, o "peso" de uma aresta realmente denota sua multiplicidade . Assim, dada essa interpretação, não pode haver distinção significativa entre "sem arestas" e "0 arestas" entre um par de nós: ambos significam exatamente a mesma coisa.

Obviamente, um "gráfico ponderado" por definição é realmente apenas um gráfico com um número associado a cada aresta, e é perfeitamente possível interpretar o peso como algo diferente de multiplicidade, caso em que uma distinção entre nenhuma aresta e um peso zero de fato pode ser significativo. Mas é improvável que tentar aplicar algoritmos multigráficos padrão a esses "gráficos estranhamente ponderados" produza resultados que fariam sentido em termos da interpretação alternativa (não-multiplicidade) dos pesos das arestas.


6
Como os gráficos ponderados são exibidos "normalmente" depende muito do seu campo. Quando eu modelo uma rede de estradas como um gráfico para encontrar caminhos mais curtos, os pesos representam distâncias, não começo com várias estradas entre cruzamentos e depois introduzo estradas fracionárias.
Adriann

3
@adrianN Embora em um gráfico como esse, a ausência de uma aresta corresponda a um valor associado infinito e não a zero.
CodesInChaos

0

Pense em um gráfico do sistema rodoviário em Cambridge, no Reino Unido, as notas são compartilhadas entre ciclistas e motoristas, assim como a maioria das arestas. Fazer isso diminui bastante o custo de manutenção dos dados.

Agora, se definirmos o peso da borda como sendo o tempo de viagem em segundos, cada borda terá dois pesos, um para os carros e para as bicicletas. Alguns pesos serão infinitos, pois os carros não são permitidos em ciclovias.

Agora considere dois cruzamentos muito próximos um do outro, tão próximos que só são serrilhados por alguns postes que impedem os motoristas. (Por exemplo, uma encruzilhada, onde os carros só podem virar à esquerda, mas os ciclistas podem seguir em qualquer direção.) Em seguida, obtemos algumas arestas com peso infinito dos motoristas e 0 peso para os ciclistas.

(Claramente, o gráfico poderia ser pré-processado para criar um gráfico mais simples para o roteamento de ciclistas, antes de elaborar os melhores roteadores.)


Não vejo como isso resolve a questão. A pergunta é sobre arestas com peso zero. No seu exemplo (que, a propósito, pode não fazer todo o sentido para pessoas não familiarizadas com Cambridge), cada borda já tem dois pesos. Agora, na medida em que você pode definir gráficos ponderados da maneira que desejar, tudo bem, mas isso não parece estar respondendo à pergunta. Além disso, as arestas que você descreve parecem ter pelo menos um peso muito pequeno para os ciclistas: mesmo se mover uma curta distância requer uma quantidade de tempo diferente de zero.
David Richerby

@DavidRicherby, assuma que tempos de menos de 1 segundo não são registrados.
31816 Ian Ringrose

0

Parece que você está usando o peso para tentar representar dois aspectos distintos do gráfico. A primeira é se o gráfico realmente possui uma borda representável (desenhada) e a segunda é o peso real.

Como você notou, você entra em uma situação confusa se tiver usado 'diferente de zero' como um indicador de que uma aresta está presente (e precisaria ser desenhada ou listada), enquanto, ao mesmo tempo, agora encontrou uma situação onde o peso zero é classificado como válido.

Essencialmente, você precisará de outra maneira de representar a presença da borda (supondo que você realmente precise disso e não possa simplesmente criar uma matriz N ^ 2 de pesos, mas então cairá na armadilha de precisar decidir o que fazer com o loop bordas traseiras ...)


Não tenho certeza se isso realmente responde à pergunta. A questão é se os gráficos podem ter bordas com peso zero; sua resposta é principalmente sobre como implementar uma estrutura de dados para gráficos com arestas de peso zero.
David Richerby

@DavidRicherby, Close; (Minha resposta) foi mais sobre o porquê e como a pergunta surgiu (ou pode ter surgido) - uma questão do XYProplem. Muitas vezes, ser capaz de racionalizar sobre por que era um problema em primeiro lugar pode ajudar muito a ver como a solução é a resposta certa e não apenas alguns 'fudge'. #
407 Philip
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.