Блог пользователя Tigutor

Автор Tigutor, история, 7 лет назад, По-русски

Недавно передо мной встала задача — найти цикл минимального веса в взвешенном графе на 20 вершин и 100 ребер. Используя обычный dfs-подход(смотрим исходящие рёбра из текущей вершины, рекурсивно запускаемся от детей), и оптимизацию, что если текущий путь больше минимального найденного, то продолжать нет смысла, я получил TL Прошу вашего совета — какие ещё оптимизации тут можно применить?

  • Проголосовать: нравится
  • -8
  • Проголосовать: не нравится

»
7 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Добавить к перебору меморизацию

»
7 лет назад, скрыть # |
 
Проголосовать: нравится +18 Проголосовать: не нравится

Советую почитать про ДП по подмножествам. Задачи, где n примерно равно 20, часто именно так и решаются. Например, здесь.

  • »
    »
    7 лет назад, скрыть # ^ |
     
    Проголосовать: нравится -31 Проголосовать: не нравится

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

»
7 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

Вроде бы цикл минимального веса решается за O(M^2 log M) путем перебора удаляемого ребра и запуска Дейкстры