Я пытаюсь написать скрипт, который генерирует случайные графы, и мне нужно знать, может ли ребро в взвешенном графе иметь значение 0.
на самом деле имеет смысл, что 0 можно использовать как вес ребра, но я работал с графиками в последние несколько дней, и я никогда не видел пример этого.
algorithms
graph-theory
graphs
weighted-graphs
Taxellool
источник
источник
Ответы:
Разрешено кем ? Там нет Центрального Администрации Графа, который решает, что вы можете и не можете делать. Вы можете определять объекты любым удобным для вас способом, если вам ясно, что это за определение. Если ребра с нулевым весом полезны для вас, используйте их; просто убедитесь, что ваши читатели знают, что вы делаете.
Причина, по которой вы обычно не видите ребер с нулевым весом, состоит в том, что в большинстве случаев ребро с нулевым весом точно эквивалентно отсутствию ребра. Например, если ваш график представляет страны и объем торговли между ними, преимущество нулевого веса будет означать отсутствие торговли, что равносильно отсутствию какого-либо преимущества. Если ваш график представляет расстояния, ребро с нулевым весом будет соответствовать двум местам на нулевом расстоянии друг от друга, что будет означать, что они фактически будут одним и тем же местом, поэтому оба должны быть представлены одной и той же вершиной. Однако в других контекстах ребра с нулевым весом могут иметь смысл. Например, если ваш график представляет дорожную сеть, а веса ребер - количество трафика, существует большая разница между дорогой, которой никто не пользуется (край с нулевым весом), и дорогой вообще (без края).
источник
Это зависит от контекста. В общем, да, ребра с нулевым и даже отрицательным весом могут быть разрешены. В некоторых конкретных случаях может потребоваться, чтобы веса ребер были неотрицательными или строго положительными (например, алгоритм Дейкстры требует, чтобы веса были неотрицательными).
источник
Как отмечают другие ответы, вы совершенно свободно можете рассматривать (или исключать из рассмотрения) взвешенные графы с ребрами с нулевым весом.
Тем не менее, по моему опыту, обычное соглашение в большинстве применений взвешенных графов - не проводить различий между ребром с нулевым весом и отсутствием ребра. Одна из причин этого заключается в том, что, как правило, взвешенные графы отображаются как обобщения мультиграфов , которые, в свою очередь, являются обобщениями простых графов.
В частности, мультиграф - это граф, который (в отличие от простого графа ) допускает несколько ребер между одной и той же парой узлов. В то время как в простом графе любая пара узлов всегда соединена ребрами 0 или 1, пара узлов в мультиграфе может быть соединена 0, 1, 2, 3 или более (но всегда неотрицательным целым числом ) края.
Обобщение мультиграфа, чтобы учесть дробное число ребер между парой узлов, естественным образом приводит к рассмотрению взвешенных графов, и многие алгоритмы, работающие с произвольными мультиграфами, также могут работать на таких взвешенных графах. Но для таких алгоритмов «вес» ребра действительно означает его кратность . Таким образом, учитывая эту интерпретацию, не может быть значимого различия между «без ребра» и «0 ребрами» между парой узлов: оба означают одно и то же.
Конечно, «взвешенный граф» по определению на самом деле является просто графом с числом, связанным с каждым ребром, и вполне возможно интерпретировать вес как нечто иное, чем кратность, в этом случае различие между отсутствием ребра и нулевым весом край действительно может быть значимым. Но попытка применить стандартные мультиграфные алгоритмы к таким «странно взвешенным графам» вряд ли даст результаты, которые имели бы смысл с точки зрения альтернативной (не кратной) интерпретации весов ребер.
источник
Подумайте о графике дорожной системы в Кембридже, Великобритания, заметки разделены между велосипедистами и водителями автомобилей, так что большинство из них. Это значительно снижает стоимость обслуживания данных.
Теперь, если мы определим вес края как время в пути в секундах, то чисто у каждого края будет два веса, один для автомобилей, пыльников для велосипедов. Некоторые веса будут бесконечными, так как машины не допускаются на велосипедных дорожках.
Теперь рассмотрим два дорожных развязки, которые расположены очень близко друг к другу и настолько близко, что их зазубривают лишь несколько постов, которые останавливают водителей. (Например, перекресток, где автомобильные приводы могут поворачивать только налево, но велосипедисты могут двигаться в любом направлении.) Затем мы получаем некоторые ребра с бесконечным весом от водителей автомобилей и 0 весов для велосипедистов.
(Очевидно, что граф можно предварительно обработать, чтобы создать более простой график для маршрутизации велосипедистов, прежде чем разрабатывать лучшие маршруты.)
источник
Похоже, вы используете вес, чтобы попытаться представить два совершенно разных аспекта графика. Во-первых, имеет ли граф фактически представимое (нарисованное) ребро, а во-вторых, его фактический вес.
Как вы заметили, вы попадаете в сбивающую с толку ситуацию, если вы использовали «ненулевой» в качестве индикатора того, что грань присутствует (и ее нужно будет нарисовать или перечислить), в то время как в то же время нашли ситуацию где нулевой вес классифицируется как действительный.
По сути, вам понадобится другой способ представления наличия ребра (при условии, что вам это действительно нужно, и вы не можете просто создать массив весов N ^ 2, но тогда вы попадаете в ловушку необходимости решать, что делать с циклом задние края ...)
источник