LINUX.ORG.RU

[теория графов] Алгоритм поиска маршрута.


0

1

В общем имеем конечную структуру на основе звезд, конец одной звезды есть центр другой иле на последнем уровне свободный... (структура типа конечного фрактала, звезды следующего уровеня в котором «пирцеплены» к вершине предыдущего), (ну в общем конечная сеть ethernet, без колец, в класическом виде)..

В такой структуре между двумя любыми вершинами звёзд существует только один единственный путь.

Мне надо только сам алгоритм поиска этого пути если все связи заданы таблицей:

Связь | switch1 | port1 | switch2 | port2
1     | 1       | 25    | 2       | 26
...............
...............
...............

Входные данные:

начальный (коммутатор, входной порт)
конечный (коммутатор, выходной порт)

Результат - маршрут:

начальный (коммутатор, входной порт, выходной порт) -> ...  -> промежуточный (коммутатор N, входной порт, выходной порт) -> ... -> конечный (коммутатор, входной порт, выходной порт)

Читать теорию или выводить алгоритм самому не хочу. Дайте ссылку на алгоритм в идеале блоксхему, можно код на любом языке, в идеале python...


К кодовой базе graphviz посылать не надо, там много букв... Мне надо простенькое чтобы я за час прогу навалял...

sdh
() автор топика

> Читать теорию или выводить алгоритм самому не хочу.

Почему-то тут мне стало очень смешно. Я проиграл =(

anonymous
()
Ответ на: комментарий от sdh

Если представление связей в такой таблице неудобно, можно описать другую таблицу... Мне без разницы, солью линки в другую таблицу..

sdh
() автор топика
Ответ на: комментарий от AlexKiriukha

graphviz

Я забил на теорию, пишу тупым перебором всех свичей и их линков пока не попаду на нужный свич, начиная с соседей как в алгоритме «поиск в ширину»...

Кто знает чтото лучше пишите... )

sdh
() автор топика
Ответ на: комментарий от AlexKiriukha

> Всё же прошу ссылку для желающих почитать теорию.

Что конкретно интересует? Просто в общем случае есть два алгоритма обхода: в ширину и в глубину. На их основе и создаются алгоритмы поиска циклов, маршрутов, компонент связности и т.д. Они оба элементарны(той же википедии хватит, чтобы суть понять).

Всю эту базу можно найти скажем в книге: http://lib.mexmat.ru/books/520

Всё доступно расписано + даны алгоритмы в псевдокоде. Хотя что под C++(Boost Graph Library), что под C#(скажем QuickGraph) есть готовые реализации, думаю и под многие другие языки это тоже есть готовое.

Norgat ★★★★★
()
Ответ на: комментарий от sdh

>в такой структуре между двумя любыми вершинами звёзд существует только один единственный путь.

Имхо в этом случае алгоритм Дейкстры будет оверкиллом. Юзай тупой поиск в глубину/ширину

yoghurt ★★★★★
()
Ответ на: комментарий от roof

В глубену наверно предпочтительнее? Так есть больше вероятности быстрее попасть на конечный свич? Или мне так кажется?

sdh
() автор топика
Ответ на: комментарий от sdh

Это зависит от топологии сети и начальной вершины, я бы взял метод в ширину, если исходить из твоих объяснений в первом посте.

Norgat ★★★★★
()
Ответ на: комментарий от sdh

Так смотри, что у тебя больше, глубина или ширина =) Если глубина большая, а ширина маленькая (разница на порядки) то лучше в ширину. А если ширина маленькая, а глубина большая, то в ширину =) Если величины одного порядка, то или без разницы, или можно рандомом выбирать алгоритм (но так я только в учебных проектах делал) =)

roof ★★
()
Ответ на: комментарий от yoghurt

Дейкстра тут не оверкилл. Он просто здесь не причем. Пойму что весов нет. Более того тут и поиск в ширину в чистом виде не нужен. Надо использовать волновой алгоритм.

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

anonymous
()
Ответ на: комментарий от anonymous

Ха, почитал про этот волновой алгоритм. Это именно то, что я имел в виду, говоря «поиск в ширину» в контексте поиска пути в дереве (то есть в связном графе без циклов). А про поиск в глубину ты зря так. При малой глубине дерева он гораздо менее полный перебор, чем поиск в ширину.

roof ★★
()
Ответ на: комментарий от Norgat

Много чего интересует, решил подтянуть знания. Эта книга есть, но никак не доходит до неё очередь хода. Спасибо, +1 повод чтобы следующей начать её.

AlexKiriukha ★★★★
()
Ответ на: комментарий от MKuznetsov

У меня древо сильно часто меняется.

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

sdh
() автор топика
Ответ на: комментарий от sdh

при добавлении, удалении, переносе узлов дерева - их перенумерация ну очень простая операция.

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

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

Анон, ты пишешь ерунду =(

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Ну да, спросоня чушь написал. Насчет поиска в глубину

anonymous
()
Ответ на: комментарий от anonymous

>проиграл

Вали обратно на тиреч^Wсосач.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.