Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / операция индексирования массива (доступа к элементу) / 10 сообщений из 10, страница 1 из 1
14.06.2013, 14:44
    #38297877
ayvango
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
Как выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа.
Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования?
...
Рейтинг: 0 / 0
14.06.2013, 14:47
    #38297884
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
ayvangoсудя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных.
Бред. Добавь к получению элемента линеаризованного массива вычисление линеаризованного индекса из набора многомерных индексов - и твой профит испарится. Даже скорее оверхед будет.
...
Рейтинг: 0 / 0
14.06.2013, 15:09
    #38297945
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
ayvangoИ сильно ли зависит от языка программирования?
зависит. В фортране легко накладываются друг на друга массивы различной размерности.
AkinaБред. Добавь к получению элемента линеаризованного массива вычисление линеаризованного индекса из набора многомерных индексов - и твой профит испарится. Даже скорее оверхед будет.
если нужно произвести операцию над всеми элементами многомерного массива - выйгрыш будет.
...
Рейтинг: 0 / 0
14.06.2013, 15:57
    #38298013
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
ayvangoКак выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа.
Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования?
Есть один железный способ. Уйти от операций индексатора к указателям. И обычно
если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно
в порядке колонок и строк ты получаешь просто инкремент указателя.

Код: plaintext
1.
a[10][10],a[10][11]... трансформится в ptr = &a[10][10]; ptr++, ptr++ e.t.c.
...
Рейтинг: 0 / 0
14.06.2013, 16:21
    #38298052
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
maytonayvangoКак выяснилось, взятие элемента массива тоже увеличивает время работы программы, причём чем большей размерности массив -- тем дольше работает программа.
Например, судя по опыту, a[10][10] мы получаем медленнее, чем b[100]. Очевидный путь -- перейти к одномерным массивам вместо 2-мерных. А есть ли какие-то более хитрые способы для того, чтобы извлечение элементов из массива занимало не так много времени? И сильно ли зависит от языка программирования?
Есть один железный способ. Уйти от операций индексатора к указателям. И обычно
если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно
в порядке колонок и строк ты получаешь просто инкремент указателя.

Код: plaintext
1.
a[10][10],a[10][11]... трансформится в ptr = &a[10][10]; ptr++, ptr++ e.t.c.

насколько я знаю, если, к примеру, в с++ массив был создан динамически
Код: plaintext
1.
2.
3.
int **a = new int*[10];
for (int i ...)
    a[i] = new int[10]


то перейти, допустим, от a[5][9] к a[6][0] простым инкрементом скорее всего не получится (если только две строки не оказались друг за другом).
...
Рейтинг: 0 / 0
14.06.2013, 16:22
    #38298053
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
Изопропилесли нужно произвести операцию над всеми элементами многомерного массива - выйгрыш будет.А это смотря какая операция. Если она использует многомерные индексы - опять-таки будет оверхед.
...
Рейтинг: 0 / 0
14.06.2013, 16:49
    #38298109
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
Яростный Мечmaytonпропущено...

Есть один железный способ. Уйти от операций индексатора к указателям. И обычно
если работаешь итеративно с матрицей или гиперкубом то обходя ее последовательно
в порядке колонок и строк ты получаешь просто инкремент указателя.

Код: plaintext
1.
a[10][10],a[10][11]... трансформится в ptr = &a[10][10]; ptr++, ptr++ e.t.c.

насколько я знаю, если, к примеру, в с++ массив был создан динамически
Код: plaintext
1.
2.
3.
int **a = new int*[10];
for (int i ...)
    a[i] = new int[10]


то перейти, допустим, от a[5][9] к a[6][0] простым инкрементом скорее всего не получится (если только две строки не оказались друг за другом).
Да. Создавать надо 1-мерный вектор. Но работать с ним как гиперкубиком.
...
Рейтинг: 0 / 0
14.06.2013, 20:38
    #38298329
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
maytonСоздавать надо 1-мерный вектор. Но работать с ним как гиперкубиком.Это сразу мне напомнило, что когда-то я изучал Форт...
...
Рейтинг: 0 / 0
15.06.2013, 00:21
    #38298440
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
AndreTM,

а не фортран EQUIVALENCE ?
...
Рейтинг: 0 / 0
15.06.2013, 01:58
    #38298492
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
операция индексирования массива (доступа к элементу)
Изопропилне фортран EQUIVALENCE ?Не-а. Вот это и это ...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / операция индексирования массива (доступа к элементу) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]