chcę mieć flagę przekazany do funkcji, która działa algorytm albo przez Col-row-skanowania lub skanowania:Struktura najpierw uruchomić x vs y najpierw na 2d tablicy
if run-on-x
for 1..x
for 1..y
do something with ary[x][y]
else
for 1..y
for 1..x
do something with ary[x][y]
ale nie chcesz powielić wszystkie pętle i logikę.
mam wymyślić to:
let numPx = width * height;
for (let px = 0; px < numPx; px++) {
let [x, y] = yAxis ? [px % width, 0 | px/width] : [0 | px/height, px % height];
Ale myślę, że cała matematyka jest dość ciężki, zwłaszcza gdy biegnę go na dość duże tablice.
Czy jest lepszy sposób to zrobić?
Jeśli jest to Java, a następnie, co chce zrobić, to prawdopodobnie strata czasu. kompilacja typu "just-in-time" będzie starała się dalej optymalizować kod bajtowy za każdym razem, gdy jest oceniany (wykonywany). Co więcej, jest dynamiczny: zmieni implementację, jeśli zostanie podjęta inna gałąź. Oznacza to, że może zamieniać pętle w czasie wykonywania, jeśli wydaje się być bardziej optymalnym (i nie łamie żadnych zależności). Próba przechytrzenia kompilatora prawdopodobnie spowoduje "wolniejszy" kod, ponieważ optymalizator zobaczy więcej potencjalnych zależności do zerwania. – StarShine
@StarShine - Dlaczego przyjmujesz założenie, że to java? –
Brak założenia. Tylko komentarz w przypadku, gdy pracujesz w Javie. W pewnym stopniu ten komentarz działa również w JavaScript. We wcześniejszych przeglądarkach wszystkie kompilowały javascript JIT, ale od tego czasu zaczęły generować kod natywny. Jednak możliwe jest, że przyszłe wersje kompilatorów javascript będą miały pewne aspekty jit, takie jak optymalizacja pętli i optymalizacja predykcji gałęzi, ponownie wprowadzane podczas generowania natywnego kodu bajtowego. Zobacz także http: // creativejs.com/2013/06/the-race-for-speed-part-1-the-javascript-engine-family-tree/ – StarShine