Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [REQUEST] Алгоритмы для поиска длиннейшего пути 
:(
    Опции темы
Нурик Сакура
  Дата 9.7.2012, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Доброго времени суток, уважаемые Винградовцы =^_^=

Возникла у меня небольшая проблема. Пытаюсь решить задачку поиска длиннейшего пути, но что-то пока не преуспел. Точнее, если пойти тупым перебором, то оно, конечно, решится. В теории. Но как-то я не очень люблю такие методы. Потому решил обратиться к вам, авось кто-то натолкнет на здравые мысли или хотя бы укажет направление, в котором нужно копать. Итак...

Цитата
Дана матрица N x M, представляющая собой карту проходимости: ячейки со значением 0 заблокированы, ячейки со значением 1 - свободны. Необходимо из некой заданной свободной точки (x, y) найти максимально длинный (проходящий через максимальное количество ячеек) и максимально дешевый (см.дальше) односторонний (каждую ячейку можно посетить лишь один раз) путь. Передвигаться можно двумя способами. "Прямо" - вверх, вниз, влево или вправо, каждое такое движение стоит 1 очко действия. "Диагонально" - вверх-влево, вверх-вправо, вниз-влево, вниз-вправо, каждое такое движение стоит 2 очка действия. Чем меньше суммарно затрачено очков действия, тем лучше - это и есть та самая "дешевизна".


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

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

P.S.: я не прошу решить задачу за меня, мне нужна подсказка, куда двигать мысли. Но буду признателен (и дам плюс в репу) за любой рабочий код по теме smile 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
mrgloom
Дата 10.7.2012, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



PM MAIL   Вверх
baldina
Дата 10.7.2012, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Нурик Сакура, Вы ищете точное решение, или подойдет приближенное?
PM MAIL   Вверх
Нурик Сакура
Дата 10.7.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Хм, интересно, а в чем может быть приближение?

Задача, как мне кажется, предельно проста - есть точка А, есть карта всех точек, куда можно/нельзя идти. Найти путь, проходящий через максимальное количество точек, с минимальными суммарными затратами. Обычный перебор будет решать долго, но, в конечном итоге, выдаст одно или несколько решений. Точных решений. Так в чем "приближение"?
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
baldina
Дата 10.7.2012, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(Нурик Сакура @  10.7.2012,  16:39 Найти цитируемый пост)
Хм, интересно, а в чем может быть приближение?

поиск приближенное решения - один из традиционных подходов к решению NP-сложных задач. иначе - полный перебор.
если Вы удовлетворитесь приближением, можно было рекомендовать алгоритм Дейкстры, в котором в качестве критерия выступает не минимальный путь, а максимальный путь+вес хода. Кстати, баланс между длиной пути и весами переходов у вас не определен.
PM MAIL   Вверх
Нурик Сакура
Дата 10.7.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Цитата(baldina @  10.7.2012,  17:18 Найти цитируемый пост)
если Вы удовлетворитесь приближением, можно было рекомендовать алгоритм Дейкстры, в котором в качестве критерия выступает не минимальный путь, а максимальный путь+вес хода
Спасибо за идею, посмотрю.


Цитата(baldina @  10.7.2012,  17:18 Найти цитируемый пост)
Кстати, баланс между длиной пути и весами переходов у вас не определен
Немного не понял, как именно он должен быть определен? Я вроде указал, что: 
Цитата(Нурик Сакура @  9.7.2012,  15:49 Найти цитируемый пост)
Чем меньше суммарно затрачено очков действия, тем лучше - это и есть та самая "дешевизна".


Таким образом, из двух путей одинаковой длины необходимо выбрать тот, у которого суммарные затраты на переходы меньше. Например:

Путь 1:
F(1;1) -> T(1;2) -> 1 AP;
F(1;2) -> T(1;3) -> 1 AP;
F(1;3) -> T(2;3) -> 1 AP;
F(2;3) -> T(3;4) -> 2 AP;

Путь 2:
F(1;1) -> T(2;1) -> 1 AP;
F(2;1) -> T(3;2) -> 2 AP;
F(3;2) -> T(2;3) -> 2 AP;
F(2;3) -> T(3;4) -> 2 AP;

Оба пути одинаковой длины. Но второй "дороже" первого.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
baldina
Дата 10.7.2012, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(Нурик Сакура @  10.7.2012,  18:18 Найти цитируемый пост)
двух путей одинаковой длины необходимо выбрать тот, у которого суммарные затраты на переходы меньше

т.е. затраты на переходы работают только при равенстве путей? тогда ясно
PM MAIL   Вверх
Нурик Сакура
Дата 10.7.2012, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Хм... А вы меня на одну мысль натолкнули. Если найдется путь, который будет, например, сплошь по диагонали и он будет самым длинным, но при этом и очень "дорогим". В то же время, может существовать путь на несколько точек короче, но максимально дешевый. В идеале, "сыграть" должен он. Тогда, получается, в задаче смещается приоритет с "самый длинный" на "самый дешевый длинный".

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

Это сообщение отредактировал(а) Нурик Сакура - 10.7.2012, 19:20
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.