Эволюционные алгоритмы поиска эйлерова цикла в графе — различия между версиями
(→Предыдущие результаты) |
(→Улучшенный jump-оператор) |
||
Строка 10: | Строка 10: | ||
Jump-оператор работает следующим образом. Для набора ребер <tex>(e_1, e_2, \dots e_m)</tex> оператор <tex>jump(i,j)</tex> передвигает <tex>i</tex>-й элемент на позицию <tex>j</tex> и циклически сдвигает ребра между позициями <tex>i</tex> и <tex>j</tex> влево (если <tex>i > j</tex> то вправо) . Таким образом набор <tex>(e_1, e_2, \dots e_m)</tex> превратиться в <tex>(e_1, e_2, \dots e_{i-1}, e_{i+1}, \dots e_j, e_i, e_{j+1}, \dots e_m)</tex>. Работает за <tex>O(m^5)</tex> | Jump-оператор работает следующим образом. Для набора ребер <tex>(e_1, e_2, \dots e_m)</tex> оператор <tex>jump(i,j)</tex> передвигает <tex>i</tex>-й элемент на позицию <tex>j</tex> и циклически сдвигает ребра между позициями <tex>i</tex> и <tex>j</tex> влево (если <tex>i > j</tex> то вправо) . Таким образом набор <tex>(e_1, e_2, \dots e_m)</tex> превратиться в <tex>(e_1, e_2, \dots e_{i-1}, e_{i+1}, \dots e_j, e_i, e_{j+1}, \dots e_m)</tex>. Работает за <tex>O(m^5)</tex> | ||
====Улучшенный jump-оператор==== | ====Улучшенный jump-оператор==== | ||
− | Лучших результатов можно достичь, если использовать | + | Лучших результатов можно достичь, если использовать только операции вида <tex>jump(i, 1)</tex>. Тогда время работы будет <tex>O(m^5)</tex>. |
=== Алгоритм === | === Алгоритм === |
Версия 20:10, 17 июня 2012
Содержание
Постановка задачи
Определение: |
Эйлеров цикл в графе — это путь, проходящий по всем рёбрам графа ровно по одному разу. Задача — для заданного графа найти такой путь. |
Предыдущие результаты
Перестановка ребер
Пусть для графа
задан набор всех его ребер . На каждом шаге два случайно выбранных ребра меняются местами. Фитнес-функция — длина максимального пути в множестве ребер. Алгорим работает за экспоненциальное время.Jump-оператор
Jump-оператор работает следующим образом. Для набора ребер
оператор передвигает -й элемент на позицию и циклически сдвигает ребра между позициями и влево (если то вправо) . Таким образом набор превратиться в . Работает заУлучшенный jump-оператор
Лучших результатов можно достичь, если использовать только операции вида
. Тогда время работы будет .