Проблема прокладки пути / дороги - PullRequest
12 голосов
/ 25 ноября 2010

Сегодня мы получили задание выполнить в лаборатории (через два часа).Вопрос звучал так:

  • Вам дана матрица m * n.
  • В матрице есть «h» жилые залы и «b» входы в главное здание.* Расположение этих залов 'h' и входов 'b' известно (в терминах (x, y) координат).
  • Вам необходимо проложить пути так, чтобы в каждом жилом зале был хотя бы один путь кдостичь одного из входов 'b'.
  • Таких отключенных путей может быть не более 'b'.
  • Длина пути должна быть минимальной.
  • Вы можетедвигаться только вверх, вниз, влево или вправо.
  • Решение не должно быть попыткой грубой силы.

Задание окончено.Но я все еще думаю, как это можно решить.Есть ли стандартный термин для таких проблем?Что я должен прочитать?

Люди используют такие алгоритмы и для прокладки дорог в городах?

Ответы [ 5 ]

3 голосов
/ 29 ноября 2010

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

  • Рассчитать расстояние между каждой парой узлов (разница координат X + разница координат Y).Теперь у вас есть полный график.
  • Найдите MST для этого полного графика
  • Каждый наклонный край MST (не вертикальный или горизонтальный) можно разбить на две части - горизонтальнуюи по вертикали.
  • Каждое разбиение может быть выполнено двумя способами - сначала по горизонтали, а затем по вертикали или наоборот.
  • Пройдите каждую такую ​​перестановку и рассчитайте путь с наименьшей длиной.Это ответ.
2 голосов
/ 26 ноября 2010

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

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

На другом конце у вас есть имитационные модели конкретных районов города, поселка, перекрестка,и т.д. Это числовые модели, которые рассматривают каждый автомобиль как автономного агента с такими факторами, как агрессия, знание дороги и так далее.Это очень простой подход, но это единственный способ предоставить полезную статистику о фактическом поведении трафика в сложной сети с такими функциями, как светофоры, шины и т. Д. Разработчик моделей трафика может, например, подключить его кфактические данные управления трафиком, запустите модель в течение определенного периода для конкретных проектных решений и настройте ее на запуск 6 или 7 раз.Полученные данные дают вам очень хорошую оценку производительности одного решения по сравнению с другим (или статус-кво).

Надеюсь, что это обеспечивает некоторый полезный контекст.

1 голос
/ 29 ноября 2010

Это проблема поиска. Вы должны были сделать это через 2 часа, верно? Я бы DFS и чернослив . Вы можете использовать эвристика , чтобы быстрее найти лучшие решения. Но имейте в виду, эвристика не может гарантировать оптимальные решения, поэтому вам придется попробовать все возможности . Кажется, NP-хард.

1 голос
/ 26 ноября 2010

Я думаю, что проблема проще, а не дерево Штейнера или даже не минимальное связующее дерево.

  1. Представим матрицу M в виде графа G с V = {Mij | i <= m, j <= n}, E = {(Mi1j1, Mi2j2): i1, i2 <= m, j1, j2 <= n, | i1-i2 | = 1-эксклюзивный ИЛИ | j1-j2 | = 2} </p>

  2. Взять набор B входов, набор H залов

  3. H '= H / B, B' = B / H (отметьте залы, которые являются входами, они достигнуты на глубине 0, удалите все эти входы, как те, что являются залами)

  4. Выполнить обход в ширину. На каждой глубине отметьте залы, до которых можно добраться от B до всех залов. Выберите соответствующие пути.

1 голос
/ 26 ноября 2010

Есть аспект описания проблемы, который мне не ясен:

  • Когда вы говорите: «Вам нужно проложить путь», означает ли это « только один связанный путь?» Или может быть несколько отключенных путей? (например, путь из зала H1 до входа в здание B1 и отдельный путь из зала H2 до входа в здание B2)

Но как бы вы ни ответили на мой вопрос, это чрезвычайно сложная проблема: она NP-сложная, поскольку включает в себя задачу прямолинейное дерево Штейнера в качестве особого случая (когда есть только один вход в главное здание). 1011 *

Так что никто не знает, как эффективно решить ее в общем случае!

...