|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.05.2012, 15:14 | #1 |
Пользователь
Регистрация: 30.09.2011
Сообщений: 27
|
Зачем нужны многомерные массивы?
Думаю справедливый вопрос, поскольку, для примера, простое суммирование элементов одномерного массива в цикле иммитирующем цикл, необходимый для перебора элементов многомерного массива, оказывается быстрее.
Чем такая ссылка M[J*k+I*j+i] сложнее вот такой M[i,j,k]? (I - длина первой меры, J - длина второй меры) |
12.05.2012, 15:16 | #2 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
Sёker
простое суммирование элементов одномерного массива в цикле иммитирующем цикл, необходимый для перебора элементов многомерного массива, оказывается быстрее. быстрее оно может быть только в этой эротической пародии на компилятор, а в нормальных - монопениссуально.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
12.05.2012, 15:37 | #3 |
Пользователь
Регистрация: 30.09.2011
Сообщений: 27
|
|
12.05.2012, 15:50 | #4 | |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
Цитата:
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
|
12.05.2012, 15:55 | #5 |
Пользователь
Регистрация: 30.09.2011
Сообщений: 27
|
|
12.05.2012, 16:14 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Все зависит от компилятора, оптимизатора и аллокатора памяти.
Нормальные компиляторы из M[i,j,k] давно делают M[J*k+I*j+i], просто потому что так удобнее работать процу... По теме: Зачем нужны? Для удобства себя любимого человека, чтоб не городить M[J*k+I*j+i], а просто писать M[i,j,k] и все остальное оставить компилятору. |
12.05.2012, 18:12 | #7 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Правильно так: M[k + MaxK*j + MaxK*MaxJ*i] для M[i, j, k] может, из-за этого и скорость отличается, т.к. делаете разную работу. Кстати, полезно знать, что скорость обработки массива существенным образом зависит от порядка перебора индексов. И эта разница может составлять более 10 раз. Ну и, самое главное, MaxK*j + MaxK*MaxJ*i любой вменяемый как программист, так и оптимизатор вынесет за пределы цикла. Ну а вообще, многомерные массивы - это элемент удобства. И размерность должна отражать структуру данных. Например, если мы рассматриваем плоскость, разбитую на квадраты, удобно пользоваться двумерным массивом, объем на кубы - трехмерным и т.п. Последний раз редактировалось s-andriano; 12.05.2012 в 18:16. |
|
12.05.2012, 20:43 | #8 | |
Пользователь
Регистрация: 30.09.2011
Сообщений: 27
|
Цитата:
Вообще всем ответившим спасибо. И пардонте, я как скромный любитель, борзеть больше не буду. Буду разбираться, что с компилятором. |
|
12.05.2012, 21:25 | #9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Посмотрел Ваш код - он действительно перебирает индексы в разном порядке - отсюда и разница в скорости. |
|
13.05.2012, 07:24 | #10 | |
Пользователь
Регистрация: 30.09.2011
Сообщений: 27
|
Цитата:
j:=0, i:=0,1,...,H-1, j:=1, i:=0,1,...,H-1, ... j:=L-1, i:=0,1,...,L-1. Как тогда правильно? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зачем нужны классы | Sylar9 | Общие вопросы C/C++ | 5 | 15.03.2012 11:38 |
Многомерные массивы! | GoogleDOt | PHP | 6 | 15.09.2011 09:33 |
Зачем нужны блок-схемы? | fs444 | Общие вопросы по программированию, компьютерный форум | 31 | 27.01.2010 04:11 |
Зачем нужны операторы << и >> | fs444 | Общие вопросы C/C++ | 3 | 23.12.2009 08:07 |
Многомерные массивы | DDP | Помощь студентам | 1 | 19.12.2009 19:37 |