|
|
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
Как выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа. Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 14:44 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
ayvangoсудя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. Бред. Добавь к получению элемента линеаризованного массива вычисление линеаризованного индекса из набора многомерных индексов - и твой профит испарится. Даже скорее оверхед будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 14:47 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
ayvangoИ сильно ли зависит от языка программирования? зависит. В фортране легко накладываются друг на друга массивы различной размерности. AkinaБред. Добавь к получению элемента линеаризованного массива вычисление линеаризованного индекса из набора многомерных индексов - и твой профит испарится. Даже скорее оверхед будет. если нужно произвести операцию над всеми элементами многомерного массива - выйгрыш будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 15:09 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
ayvangoКак выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа. Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования? Есть один железный способ. Уйти от операций индексатора к указателям. И обычно если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно в порядке колонок и строк ты получаешь просто инкремент указателя. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 15:57 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
maytonayvangoКак выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа. Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования? Есть один железный способ. Уйти от операций индексатора к указателям. И обычно если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно в порядке колонок и строк ты получаешь просто инкремент указателя. Код: plaintext 1. насколько я знаю, если, к примеру, в с++ массив был создан динамически Код: plaintext 1. 2. 3. то перейти, допустим, от a[5][9] к a[6][0] простым инкрементом скорее всего не получится (если только две строки не оказались друг за другом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 16:21 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
Изопропилесли нужно произвести операцию над всеми элементами многомерного массива - выйгрыш будет.А это смотря какая операция. Если она использует многомерные индексы - опять-таки будет оверхед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 16:22 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
Яростный Мечmaytonпропущено... Есть один железный способ. Уйти от операций индексатора к указателям. И обычно если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно в порядке колонок и строк ты получаешь просто инкремент указателя. Код: plaintext 1. насколько я знаю, если, к примеру, в с++ массив был создан динамически Код: plaintext 1. 2. 3. то перейти, допустим, от a[5][9] к a[6][0] простым инкрементом скорее всего не получится (если только две строки не оказались друг за другом). Да. Создавать надо 1-мерный вектор. Но работать с ним как гиперкубиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 16:49 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
maytonСоздавать надо 1-мерный вектор. Но работать с ним как гиперкубиком.Это сразу мне напомнило, что когда-то я изучал Форт... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 20:38 |
|
||
|
операция индексирования массива (доступа к элементу)
|
|||
|---|---|---|---|
|
#18+
AndreTM, а не фортран EQUIVALENCE ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2013, 00:21 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38298052&tid=1341775]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 450ms |

| 0 / 0 |
