Шаг 121.
Задачи ComputerScience на Python.
Другие задачи. Задача коммивояжера. Переходим на следующий уровень

    На этом шаге мы подведем некоторые итоги.

    У задачи коммивояжера нет простого решения. По мере увеличения количества городов наивный подход быстро становится нереальным. Количество генерируемых перестановок равно факториалу от n (n!), где n - количество городов в задаче. Если бы мы добавили еще один город и их стало бы не пять, а шесть, то число оцененных маршрутов увеличилось бы в шесть раз. А при добавлении еще одного города решить задачу стало бы в семь раз сложнее. Этот подход не масштабируется!

    В реальном мире наивный подход к задаче коммивояжера используется крайне редко. Большинство алгоритмов для различных вариаций этой задачи с большим количеством городов являются приближенными. Они пытаются получить решение, близкое к оптимальному. Оно может находиться в пределах небольшой заранее известной полосы, к которой принадлежит идеальное решение (например, возможно, такие решения будут менее чем на 5 % менее эффективными, чем идеальное).

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

    На следующем шаге мы рассмотрим мнемонику для телефонных номеров.




Предыдущий шаг Содержание Следующий шаг