Чи алгоритм Дейкстри є відповідним рішенням цієї проблеми маршрутизації сигналу?


12

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

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

Приклад графіка

Кольори представляють формати сигналів. Круглі вузли - це або комутатори, джерела або мийки. Квадратні вузли - це відеопроцесори, які виконують перетворення формату.

Звідти я можу використовувати реалізацію алгоритму Dijkstra для визначення шляху, який повинен бути сформований, щоб отримати вхід X до виходу Y. Це повинно дозволяти передавати дані про конфігурацію вводу / виводу всіх комутаторів та процесорів і модуль відповідно адаптується.

Це підходяще рішення чи є альтернативний підхід, який, можливо, варто вивчити?

1 aka "перекладина перемикача", відеороутер з M входом x N виходів, який підтримує з'єднання один на багато. Кожен фізичний пристрій може обробляти декілька форматів сигналів, а може і не може здійснювати перетворення будь-якого формату.

редагувати: Як згадував Петер Тьорек, графік не обов'язково буде деревом, діаграма - простий приклад для ілюстрації ідеї. При реалізації в реальному світі можуть існувати декілька шляхів, які пропонують різний рівень визначення (DVI> VGA> компонент> композит), який я планував представляти із зважуванням краю.

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


Чи маєте намір зважування ребер бути мультиплікаційним?
Пітер Тейлор

Добавка. Ця теорія дозволить визначити його таким чином, що чим вище визначення шляху сигналу, тим меншим буде зважування. Краї, які з'єднують вузли, які виконують перетворення формату, потім отримуватимуть вагу, вищу, ніж присвоєна краям, які з'єднують вузли, що не конвертують. Це дозволить подати сигнал у свій рідний формат, якщо це можливо, включаючи лише перетворення формату (і пов'язану з цим деградацію сигналу та використання обладнання), коли це необхідно.
Кім Берджесс

1
@PeterTaylor: Було б важливо, якби вони були мультиплікативними? Вони мають точно таку саму семантику як добавка (за умови, що вони позитивні), застосовуючи логарифм. Або це щось складніше за цим?
herby

@herby, хороший момент, не думав про це. вішає голова від сорому
Пітер Тейлор

Відповіді:


4

Це дерево, Дійкстра - O ( n ^ 2 ) надмір. Тривіального O ( n ) ширини першого пошуку достатньо.

EDIT: Запустіть BFS у будь-якому вузлі зі ступенем принаймні два.

EDIT2: Оскільки графік не гарантовано є деревом, використовуйте Dijkstra, якщо ви хочете трохи оптимізувати, ви можете спочатку "зняти" з графіка всі вершини ступеня першого (для них шлях тривіальний), включаючи ті які набувають ступінь першого через позбавлення своїх колишніх сусідів, і роблять Dijkstra на решті (що саме є "недеревною" частиною).

Плюс, я б сказав, що ви хочете шляхи від кожного вузла один до одного, чи не так? Алгоритм Дійскри робить лише шляхи від одного до всіх інших. Можливо, зробіть алгоритм Флойда-Варшала на позбавленому відпочинку. Звичайно, якщо топологія дуже динамічна, найкраще робити (стриптиз та) Дійкстра, спеціальні.


2
Я вважаю, що наведений вище графік є спрощеним (іфіфікованим) прикладом, і в реальному житті часто може бути кілька альтернативних шляхів між двома вузлами (форматами), тобто ви не можете розраховувати, що графік завжди є деревом.
Péter Török

Відповідно реалізований алгоритм Дейкстри також був би O ( n ), хоча більш складним і все-таки надмірним.
Пітер Тейлор

@ PéterTörök: У цьому випадку так. Тільки запитувач знає точно. Але коли це дерево, bfs досить (і мертвий простий).
herby

@PeterTaylor: Цікаво. Будь-яке джерело, будь ласка?
herby

@ PéterTörök вірно. Див. Відредаговане запитання.
Кім Берджесс

2

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

Добавка. Ця теорія дозволить визначити його таким чином, що чим вище визначення шляху сигналу, тим меншим буде зважування. Краї, які з'єднують вузли, які виконують перетворення формату, потім отримуватимуть вагу, вищу, ніж присвоєна краям, які з'єднують вузли, що не конвертують. Це дозволить подати сигнал у свій рідний формат, якщо це можливо, включаючи лише перетворення формату (і пов'язану з цим деградацію сигналу та використання обладнання), коли це необхідно

Якщо я правильно це розумію, ви хочете знайти шлях із найнижчою вартістю від початку до мети. Якщо ви забезпечите кожному вузлу фактичну вартість і оцінку (евристичну) до мети (що є і допустимим, і послідовним), тоді A * гарантовано забезпечить оптимальне рішення. Однак це може бути надмірним, залежно від того, наскільки я добре розумію вашу проблему.


+1: Крім того, IIRC, евристика повинна завжди оцінювати вартість, яка є гіршою від фактичної вартості, щоб гарантувати оптимальний шлях. У гіршому випадку, якщо ви не можете отримати евристичне право, просто поверніть 0 з евристичного, і у вас є алгоритм дікстра.
Стівен Еверс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.