Сокращение перестановок многих вложенных циклов - PullRequest
0 голосов
/ 17 июня 2010

Я решил сделать изображение, чтобы объяснить это лучше, я просто хочу убедиться, что мое мышление в порядке, и что я могу уменьшить общие перестановки на 75%:

альтернативный текст http://www.freeimagehosting.net/uploads/45e5c6b05e.gif

1 Ответ

1 голос
/ 17 июня 2010

вы уменьшаете количество перестановок, но не на 75%, так как все возможные позиции маленького квадрата заполняют квадрат 6x6, а ваша "четверть" заполняет квадрат 4x4.

Поскольку«перекрываются» с вашими кварталами, вы на самом деле добавляете немного перестановок.Поскольку ваш квартал равен 4х4, у вас есть 4 квадрата, перекрывающихся в среднем столбце, и еще четыре в среднем ряду.

Тем не менее, это меньше, чем на самом деле вычисление для каждого маленького квадрата.

также, вы можете еще больше увеличить производительность с 2 квадратами, выполнив это:

скажем, у вас есть 2 квадрата, 1 и 2. если ваш квадрат:

11110000

11110000

00000000

02000000

Это будет эквивалентно:

00001111

00001111

00000000

00000020

и

00000020

00000000

00001111

00001111

Таким образом, вы можете перебрать все перестановки 1 в первой четверти сетки против всех перестановок 2 в ПЕРВОЙ ПОЛОВИНЕ (слева)сетка.сделайте это для кварталов 1 и 2 (где четверть 1 находится в верхнем левом углу, а четверть 2 - в верхнем правом).

...