Перебор двумерного массива. Вопрос на засыпку.



Автор Илья Павлов задал вопрос в разделе Другие языки и технологии

Перебор двумерного массива. Вопрос на засыпку. и получил лучший ответ

Ответ от Евгений[гуру]
Дело как раз-таки в ОЗУ.
Писать много не буду, найдите книгу
"Техника оптимизации программ" К. Касперски.
Там все подробно про это написано.
add:
Впрочем, дело не только в RAM, а в процессоре, точнее, в кеше
и конвеере.

Ответ от Александр[гуру]
перебор всего массива включает циклы И по строкам И по столбцам.
что именно вы имели сказать?
что значит "на порядок"?
скорости работы программ по времени сравнивать не совсем правильно. сравнивают порядки (уровни сложности) кода. Для двойного вложенного цикла (где каждый из циклов бежит от 1 до N) порядок составляет N^2 и это не зависит от порядка вложенности циклов.
если же вам время работы сравнить надо, то разберитесь - в каком порядке массив хранится в памяти.. . Если хранится строка за строкой, то никакого перескакивания туда-сюда по ОЗУ не будет - всё будет работать от начала до конца постоянно в одном направлении.. .
в любом случае, это всё условно и относится лишь к одно-процессорным системам выполняющим операции последовательно...

Ответ от Ўрий Предбанников[активный]
да насчёт строк и столбцов, еси после каждого перехода в цикле строк писать слово "перешли" а после перехода цикла по столбцам писать "+", то мы получим из массива a[2][2] получим нечто подобное:
перешли+++першли+++перешли+++
следовательно считаем сколько раз за примерно одно и тоже время отработал каждый из массивов, первый тоесть его вообщето называют строки 🙂 отработал всего три раза, а второй на удивление аш девять раз 🙂 , однаку шустрый масив столбцов некажется ли?
Если рассматривать жизненный цикл программы с аппаратной части, то после входа в первый цикл мы выйдем из него только тагда когда уловие станет ложным тоесть for(init;question;даже хоть ничего непоставьте) -сёравно условие будет проверяться всегда впоследнюю очередь и только потом произойдёт выход

Ответ от Пользователь удален[гуру]
for i:=1 to 10 do
for j:=1 to 10 do
write(n[i,j]);
естественно, цикл о (внутренний) будет выполняться гораздо быстрее цикла i (внешнего) .

 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*