Насколько эффективны операции по каждому рекурсивному шагу алгоритмов обратного отслеживания с точки зрения эффективности этого конкретного алгоритма?Важность порядка работы в алгоритмах обратного отслеживания
Для примера.
В Задаче Рыцарского тура.
Рыцарь находится на первом блоке пустой доски и, двигаясь в соответствии с правилами игры в шахматы, должен посетить каждый квадратный ровно один раз.
На каждом шаге имеется 8 возможных (в общем) способов перемещения.
int xMove[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int yMove[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
Если изменить этот порядок, как ...
int xmove[8] = { -2, -2, 2, 2, -1, -1, 1, 1};
int ymove[8] = { -1, 1,-1, 1, -2, 2, -2, 2};
Теперь для * п платы ДО п = 6 и порядок работы не влияет никаких видимых изменений в исполнении время,
Но если п> = 7
Первая операция (движение) время исполнения заказа составляет намного меньше чем более поздний. В таких случаях невозможно выполнить весь порядок операций O (m!) И протестировать алгоритм. Итак, как я могу определить производительность таких алгоритмов в определенном порядке движения, а точнее, как можно достичь одного (или набора) порядков операций, чтобы алгоритм был более эффективным с точки зрения времени выполнения.
звучит так, будто у вас есть выбор и наследование, теперь вам просто нужны мутации и кроссовер, чтобы иметь генетический алгоритм. Как вы намекали, эти типы алгоритмов имеют тенденцию находить локальные максимумы. – thebjorn