Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 23.05.2012, 04:14   #1
foldel
Оператор ЭВМ
 
Аватар для foldel
 
Регистрация: 18.11.2010
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
трансформация 1D массива в nD массив

Подскажите, как можно одномерный массив использовать в качестве многомерного?
Например есть массив int[] a = {1,2,3,4,5,6,7,8,9}. Надо реализовать функцию, которая даст мне индекс массива, в зависимости от измерения.
Припустим если представить этот массив в 1D, то getIndex(new int[]{2}) должно видать "3", а в 2D getIndex(new int[]{1,1}) "5" .

P.S. массив в аргументе функции:
длина - количество измерений(Dimension) массива,
елементы - индексы каждого измерения.
(Offline)
 
Ответить с цитированием
Старый 23.05.2012, 05:34   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: трансформация 1D массива в nD массив

если 2д индекс, то y*width+x
3д индекс соответственно
z*width*height + y*width+x
(Offline)
 
Ответить с цитированием
Старый 23.05.2012, 13:36   #3
foldel
Оператор ЭВМ
 
Аватар для foldel
 
Регистрация: 18.11.2010
Сообщений: 23
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: трансформация 1D массива в nD массив

Это я знаю... Но мне надо для n-мерного массива...
(Offline)
 
Ответить с цитированием
Старый 23.05.2012, 14:31   #4
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: трансформация 1D массива в nD массив

входные данные:
int[] size - массив в котором размерности. Он известен заранее.
int[] val - массив в котором координаты нужного элемента.
Последний элемент size[size.Lenght-1] хоть в алгоритме и не используется, но он нужен будит для проверки, что val[i] < size[i].
public int GetIndex(int[] val)
{
int q=1;
int p=val[0];

for(int i=0;i<val.lenght-1;i++)
{
    q*=size[i];
    p+=q*val[i+1];
}
return Massiv[p-1];
}
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:41.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com