Эволюционные алгоритмы поиска эйлерова цикла в графе — различия между версиями
| Строка 12: | Строка 12: | ||
Лучших результатов можно достичь, если использовать только операции вида <tex>jump(i, 1)</tex>. Тогда время работы будет <tex>O(m^5)</tex>. | Лучших результатов можно достичь, если использовать только операции вида <tex>jump(i, 1)</tex>. Тогда время работы будет <tex>O(m^5)</tex>. | ||
=== Алгоритм === | === Алгоритм === | ||
| + | ====Идея==== | ||
| + | Основная мысль — изменить структуру хранения графа. Ниже будет показан алгоритм, работающий за <tex>O(m logm)</tex> (ранее лучшим считался результат <tex>O(m^2 logm)</tex> ) | ||
==== Представление графа ==== | ==== Представление графа ==== | ||
==== Фитнес функция ==== | ==== Фитнес функция ==== | ||
Версия 21:07, 17 июня 2012
Содержание
Постановка задачи
| Определение: |
| Эйлеров цикл в графе — это путь, проходящий по всем рёбрам графа ровно по одному разу. Задача — для заданного графа найти такой путь. |
Предыдущие результаты
Перестановка ребер
Пусть для графа задан набор всех его ребер . На каждом шаге два случайно выбранных ребра меняются местами. Фитнес-функция — длина максимального пути в множестве ребер. Алгорим работает за экспоненциальное от количества ребер время.
Jump-оператор
Jump-оператор работает следующим образом. Для набора ребер оператор передвигает -й элемент на позицию и циклически сдвигает ребра между позициями и влево (если то вправо) . Таким образом набор превратиться в . Работает за , где — количество ребер в графе.
Улучшенный jump-оператор
Лучших результатов можно достичь, если использовать только операции вида . Тогда время работы будет .
Алгоритм
Идея
Основная мысль — изменить структуру хранения графа. Ниже будет показан алгоритм, работающий за (ранее лучшим считался результат )