Преобразование трех циклов в один
Запись от _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
Комментарии
|
|
|
Ужасный вариант. Как с точки зрения понимания, так и с точки зрения производительности, медленнее обычного почти в 10 раз за счет постоянных перерасчетов.
|
|
|
|
Согласен с тобой, просто цимис в том, что укладывается из трех в один. Когда, что-то хочется упростить или улучшить, приходится пренебрегать чем-то.
![]() |
|
|
var array3D:Array = []; var i:int, j:int, k:int; for (i; i < 125; i++, j = (i / 5) % 5, k = (i / 25) % 5) { if (!array3D[k]) array3D[k] = []; if (!array3D[k][j]) array3D[k][j] = []; array3D[k][j].push(i); } trace(array3D[0][0]); trace(array3D[0][1]); trace(array3D[1][1]); ![]() |
|
|
Обновил(-а) 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)















