Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Киньте в меня алгоритмами выбора оптимального пути из А в Б.   Найти похожие ветки 

 
Карелин Артем ©   (2005-09-29 13:51) [0]

Задача такая: есть нехилая карта города, надо разработать алгоритм поиска пути из одного места в другое по улицам города с учетом степени сложности дорог между точками.


 
stone ©   (2005-09-29 13:52) [1]

Графы?


 
XGarik ©   (2005-09-29 14:00) [2]

Тут смотрел:
http://algolist.manual.ru/


 
alpet ©   (2005-09-29 14:01) [3]

Аналоговый способ: карта выполняется из стекла, все дороги представляют собой каналы заполненные к примеру аргоном. В точках A и B прикладывается напряжение. По идее короткий путь должен высветится.


 
Карелин Артем ©   (2005-09-29 14:35) [4]


> alpet ©   (29.09.05 14:01) [3]

Хех. Это сколько же будет стоить карта города из стекла? И как сложность учитывать? :))

> stone ©   (29.09.05 13:52) [1]

А конкретнее можно название этой предметной области в целях самостоятельных раскопок информации? А то у меня образования академического в программировании нет. Даже как правильно этот раздел теории назвать не знаю.


 
stone ©   (2005-09-29 14:38) [5]


> Карелин Артем ©   (29.09.05 14:35) [4]

А так и называется, в базу заносятся все участки дорог, а потом, используя теорию графов, можно получить наиболее короткий (оптимальный) маршрут


 
TUser ©   (2005-09-29 15:01) [6]

Выбираем начальную точку. Добавляем ее в множество Reached. Далее последовательно делаем следующее
1. Найти самое дешевое ребро, исходящее из Reached (т.е. самое дешевое из всех тех ребер, одна из вершин которых уже есть в Reached, а второй там нет. Пусть это вершины А и Б). Цена ребра при этом равна цене пути из начала в А + метка, которая приписана этому ребру.
2. Добавить эту вторую вершину в Reached. Кратчайший путь в Б есть "Кратчайший путь в А" + "добавленное ребро". Если она - конечная вершина, то заканчиваем работу.

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

Ассимптотика алгоритма - квадратичная, так как на каждом шаге мы добавляем одну вершину, и должны просматривать число ребер, линейно зависящее от размера графа. Выгодно храниться все ребра исходящие из reached в виде бинарного дерева, - тогда легко можно найти самое дешевое.

В случае если требуется найти все кратчайшие пути для каждой пары вершин можно применить алгоритм Флойда.  Это выгоднее n-кратного применения алгоритма Дейкстры (для каждого возможного начала), если граф хранится в виде матрицы смежности.


 
TUser ©   (2005-09-29 15:02) [7]

> Аналоговый способ: карта выполняется из стекла, все дороги представляют собой каналы заполненные к примеру аргоном.  В точках A и B прикладывается напряжение. По идее короткий путь должен высветится.

Это метод Форда-Фалкертона. Из пушки по воробьям.


 
Некто ©   (2005-09-29 15:21) [8]

жаль что я забыл это за практической невостребованностью таких знаний, а то бы подсказал =(


 
Sandman29   (2005-09-29 15:48) [9]

Двунаправленный поиск в ширину.


 
Внук ©   (2005-09-29 15:51) [10]

Это называется "Нахождение кратчайшего пути на графе". Изучается в дисциплинах "Методы оптимизации" и "Исследование операций".


 
nk ©   (2005-09-29 16:04) [11]

... "задача комивояжера" ? ))


 
Desdechado ©   (2005-09-29 17:22) [12]

nk
Нет, это принципиально разные задачи. Комивояжер должен вернуться в исходную, побывав во всех вершинах не более одногораза.

автору
Внук верно сказал. В любом учебнике по теме есть несколько точных методов и много приближенных.


 
oldman ©   (2005-09-29 17:27) [13]

Яндекс по "алгоритм поиска оптимального пути" нашел 7094 ссылки...
Почитай все и будет тебе счастье!


 
vrem   (2005-09-29 18:30) [14]

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


 
Jeer ©   (2005-09-29 18:33) [15]

Бред все это.
Или физика стала математикой ?


 
Igorek ©   (2005-09-29 19:44) [16]


>  с учетом степени сложности дорог между точками

расстояние умножаешь на коефициет сложности


 
Ученик чародея ©   (2005-09-29 20:02) [17]

Волновой алгоритм поиска пути
Достоинствa - простотa, нaдёжность, 100% сaмый короткий путь (для клaссического методa). Hедостaтки - большой объём требуемой пaмяти и не сaмaя высокaя скорость нaхождения пути. В "HЛО-2", при перечисленных выше условиях, нaхождение пути может достигaть по времени до 1/10 секунды. Это, конечно, приемлимо для пошаговых стрaтегий и логических игрушек, но с трудом подойдёт для динaмических игр. A про попытку реaлизaции нa Бейсике я вообще молчу (рaзве в кaчестве примерa).

http://cs.mipt.ru/docs/comp/rus/programming/algorithms/tree_station/vpoisk.htm



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.048 c
14-1128424599
Андрей Жук
2005-10-04 15:16
2005.10.23
Покритикуйте


1-1128075590
Mishenka
2005-09-30 14:19
2005.10.23
Как в StatusBar сделать hint у определённой панели?


2-1128078215
SergProger
2005-09-30 15:03
2005.10.23
Несколько файлов в одном Exe


1-1128086320
nikolas
2005-09-30 17:18
2005.10.23
Модуль не доступен для отладки


14-1128167471
vrem
2005-10-01 15:51
2005.10.23
Увеличение информативности постов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский