Является ли алгоритм Дейкстры подходящим решением этой проблемы маршрутизации сигналов?

12

Я нахожусь в процессе разработки модуля управления сигналами и маршрутизации для интегрированной аудиовизуальной системы и проектирую его с целью обеспечения максимальной гибкости в различных сетях распределения сигналов. Целью модуля является обработка маршрутизации через несколько стековых матричных коммутаторов 1 и обработка необходимого преобразования формата.

Лучшее решение, которое я исследовал в этой точке, - это отобразить сеть на графике с дискретными вершинами для каждого типа сигнала, поддерживаемого коммутаторами, и затем соединить через узлы, представляющие видеопроцессоры, которые обрабатывают преобразование формата.

Пример графика

Цвета представляют форматы сигналов. Круглые узлы являются либо переключателями, источниками или приемниками. Квадратные узлы - это видеопроцессоры, которые выполняют преобразование формата.

Оттуда я могу использовать реализацию алгоритма Дейкстры, чтобы определить путь, который должен быть сформирован, чтобы получить вход X для вывода Y. Это должно позволить передавать данные о конфигурации ввода / вывода всех коммутаторов и процессоров в и модуль адаптируется соответственно.

Это подходящее решение или есть альтернативный подход, который стоит изучить?

1 aka 'crossbar switch', видеомаршрутизатор с M входом x N выходов, который поддерживает соединения «один ко многим». Каждое физическое устройство может обрабатывать несколько форматов сигналов и может или не может выполнять любое преобразование формата.

редактировать: как упоминал Петер Török, график не обязательно будет деревом, диаграмма является простым примером, чтобы проиллюстрировать идею. При реализации в «реальном мире» могут существовать несколько путей, которые предлагают различные уровни определения (DVI> VGA> компонент> композитный), которые я планировал представить с использованием граничных весов.

редактировать 2: Вот немного более полный пример с указанием направленности и изображением сети, состоящей из двух типов сигналов. Первоначальный пример был слегка изменен, так что каждый вход и выход на устройстве определяется как отдельный узел, поскольку он будет предоставлять данные, необходимые для управления маршрутизацией матрицы / выбором входа. Пример 2 - два типа сигналов, стекированные коммутаторы

Ким Берджесс
источник
Вы хотите, чтобы весовые коэффициенты ребер были мультипликативными?
Питер Тейлор
Добавка. Теория, которая такова, позволит определить ее таким образом, чтобы чем выше определение пути прохождения сигнала, тем меньше взвешивание. Края, которые соединяют узлы, которые выполняют преобразование формата, будут затем иметь вес, превышающий вес, назначенный ребрам, которые соединяют узлы без преобразования. Это будет направлять сигнал в его собственном формате, если это возможно, только с преобразованием формата (и соответствующим ухудшением сигнала и использованием оборудования), когда это необходимо.
Ким Берджесс
1
@PeterTaylor: имело бы значение, если бы они были мультипликативными? Они имеют точно такую ​​же семантику, что и аддитивные (при условии, что они положительные), применяя логарифм. Или за этим что-то сложнее?
Херби
@ Херби, хорошая мысль, не думал об этом. Стыдится голова от стыда
Питер Тейлор

Ответы:

4

Это дерево, Дейкстра O ( n ^ 2 ) излишним. Тривиальный O ( n ) поиск в ширину достаточно.

РЕДАКТИРОВАТЬ: Запустите BFS в любом узле со степенью не менее двух.

РЕДАКТИРОВАТЬ 2: Поскольку граф не гарантированно является деревом, используйте Dijkstra, если вы хотите немного оптимизировать, вы можете сначала «обрезать» граф все вершины степени один (для них путь тривиален), в том числе которые получают первую степень из-за того, что лишают своих бывших соседей, и делают Дейкстру на остальной части (которая является частью «не-дерева»).

Кроме того, я бы сказал, что вам нужны пути от каждого узла к другому, не так ли? Алгоритм Dijsktra делает только пути от одного до всех других. Может быть, сделать алгоритм Флойда-Варшалла на раздетом отдыхе. Конечно, если топология очень динамична, лучше всего сделать (раздевание и) Dijkstra, ad hoc.

Херби
источник
2
Я полагаю, что приведенный выше график является упрощенным (ified) примером, и в реальной жизни часто может быть несколько альтернативных путей между двумя узлами (форматами), т.е. вы не можете рассчитывать на то, что график всегда является деревом.
Петер Тёрёк
При правильной реализации алгоритм Дейкстры тоже будет O ( n ), хотя и более сложным и все же излишним.
Питер Тейлор
@ PéterTörök: В таком случае, да. Только спрашивающий знает наверняка. Но когда это дерево, bfs достаточно (и очень просто).
herby
@PeterTaylor: Интересно. Любой источник, пожалуйста?
Херби
@ PéterTörök правильно. Смотрите отредактированный вопрос.
Ким Берджесс
2

Возможно, вы сможете использовать A * (более общую форму алгоритма Дейкстры) для поиска рассматриваемого графа. Вы упоминаете стоимость взвешивания в своем комментарии:

Добавка. Теория, которая такова, позволит определить ее таким образом, чтобы чем выше определение пути прохождения сигнала, тем меньше взвешивание. Края, которые соединяют узлы, которые выполняют преобразование формата, будут затем иметь вес, превышающий вес, назначенный ребрам, которые соединяют узлы без преобразования. Это будет направлять сигнал в его собственном формате, если это возможно, только с преобразованием формата (и соответствующим ухудшением сигнала и использованием оборудования), когда это необходимо

Если я правильно понимаю, вы хотите найти путь с наименьшей стоимостью пути от начала до цели. Если вы предоставите каждому узлу как фактическую стоимость, так и оценку (эвристическую) для цели (которая является допустимой и последовательной), то A * гарантированно предоставит оптимальное решение. Это может быть излишним, в зависимости от того, насколько хорошо я понимаю вашу проблему.

jdt141
источник
+1: также, IIRC, эвристик должен всегда оценивать стоимость, которая хуже, чем фактическая стоимость, чтобы гарантировать оптимальный путь. В худшем случае, если вы не можете понять эвристику правильно, просто верните 0 из эвристики, и вы получите алгоритм Дейкстры.
Стивен Эверс