Я пытаюсь найти множество различных алгоритмов для поиска оптимальных решений Проблема с продавцом, и одним из методов является подход грубой силы - проверяя все возможные пути между русскими городами и просто возвращая лучший. Это алгоритм O (n!), Поэтому для большого количества городов требуется очень много времени.
Я хочу повысить эффективность моей реализации грубой силы, и одна из вещей, которую я заметил, - это то, что вам не нужно проверять каждую перестановку городов. Например, если у вас есть города 1, 2, 3 и 4, путь (1-2-3-4) будет такой же длины, как и путь (2-3-4-1). То же самое касается путей (3-4-1-2) и (4-1-2-3). Используя этот факт, мы должны иметь возможность уменьшить сложность алгоритма грубой силы от O (n!) До O ((n-1)!) Или даже O ((n-1)!/2), если мы что все пути могут быть отменены, не затрагивая их длины.
В принципе, я ищу алгоритм, способный генерировать круговые перестановки из набора различных целых чисел. Было бы также здорово, если бы алгоритм обрабатывал "зеркальные" перестановки как эквивалентные (например, 1-2-3 и 3-2-1 одинаковы, поэтому нужен только один из них). Кто-нибудь знает, как это сделать? Реализация Java была бы замечательной, но я возьму что-нибудь!