Преобразование трех циклов в один
Запись от _Smirnoff размещена 11.01.2009 в 11:07
На флешстаре нашел статью по преобразование трех циклов в один. Очень заинтересовал алгоритм, но никак нет времени посмотреть, чтобы ссылку не сохранять выложу статью тут, мож потом гляну какнить.
1) Тут мы видим классическую реализацию обхода трёхмерном массива.
//1 for(var i:int=0; i < 5; i++) for(var j:int=0; j < 5; j++) for(var ij:int=0; ij < 5; ij++) { trace(i+" "+j+" "+ij); }
Создаём один цикл, пока параметр К у нас меньше произведения длинны, высоты, глубины, мы определяем координаты ячейки в трёхмерном массиве:
а) В данном случае параметр i у нас будет равен К делить на произведение высоты, глубины. Т.к. знаем что длинна у нас не превышает заданной величины. Поэтому мы уменьшаем К в (j*ij) раз.
б) В данном случае параметр j у нас будет равен целочисленному остатку после деления произведения К и глубины массива на высоту.
в) В данном случае параметр ij у нас будет равен целочисленному остатку из выражения K/ij.
//2
//сюда можно подставлять любые значения
И не забудьте создать переменную, которая хранит значение i*j*ij. Т.к. при обходе цикда плеер заново считает i*j*ij, а это не сеть гуд.
Всего комментариев 3
Комментарии
11.01.2009 13:29 | |
Ужасный вариант. Как с точки зрения понимания, так и с точки зрения производительности, медленнее обычного почти в 10 раз за счет постоянных перерасчетов.
|
11.01.2009 13:46 | |
Согласен с тобой, просто цимис в том, что укладывается из трех в один. Когда, что-то хочется упростить или улучшить, приходится пренебрегать чем-то.
|
04.04.2009 05:05 | |
Для любителей извращенных способов
|
|
Обновил(-а) wvxvw 04.04.2009 в 05:08
|
Последние записи от _Smirnoff
- Память, утечки, профилирование, Garbage Collector (12.01.2010)
- Асинхронный wordWrap (06.03.2009)
- Преобразование трех циклов в один (11.01.2009)
- Совершенный код (15.12.2008)
- Math.floor vs int (15.11.2008)