Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 23:42   #1
loh
 
Регистрация: 21.12.2011
Сообщений: 5
По умолчанию Как Быстро Обработать Массив?

как максимально быстро обработать (двухмерный)массив данных если: с каждым элементом надо провести ряд одинаковых математических операций или если каждый элемент надо преобразовать в новый тип данных по определенному алгоритму и получить новую шматрицу? :О
loh вне форума Ответить с цитированием
Старый 22.12.2011, 23:49   #2
VaspERR
Новичок
Джуниор
 
Регистрация: 22.12.2011
Сообщений: 2
По умолчанию

быстрее,чем
for(...)
{
for(...)
{}
}
вред ли получится
VaspERR вне форума Ответить с цитированием
Старый 23.12.2011, 00:21   #3
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Код:
	char buffer[10][10];
	char *addrBuffer = buffer[0];//Указатель на начало данных
	char *endBuffer = addrBuffer + (10 * 10);

	for (; addrBuffer <= endBuffer; addrBuffer++)
	{
		*addrBuffer = 'x';//Осуществляем операции с addrBuffer
	}

	return 0;

Последний раз редактировалось zotox; 23.12.2011 в 00:41.
zotox вне форума Ответить с цитированием
Старый 23.12.2011, 01:03   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Вообще-то, оптимизация - это серьёзное занятие... Весьма познавательно - как росли результаты для простейшей, вроде бы, задачи (и, главное, какими методами этот рост достигался), да и просто разница между первым и восьмым местом эффектно выглядит...
Vago вне форума Ответить с цитированием
Старый 23.12.2011, 22:13   #5
loh
 
Регистрация: 21.12.2011
Сообщений: 5
По умолчанию

понятно а то что с каждым элементом надо провести одинаковые процедуры (ну скажем каждый элемент умножить разделить и сложить с какой нибудь константой (переменной)) не может как то упростить стандартным способом задачу?

ну например не перебирая каждый элемент а как то разом применить ко всем элементам (ну а перебор чтобы автоматически на более низком уровне чем с++ происходил)? :О
loh вне форума Ответить с цитированием
Старый 23.12.2011, 22:17   #6
loh
 
Регистрация: 21.12.2011
Сообщений: 5
По умолчанию

вообще это мне надо для заполнения матрицы для отображения на экране - входная матрица - двухбайтные числа, выходная - цвета точек :О
loh вне форума Ответить с цитированием
Старый 23.12.2011, 23:05   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от loh Посмотреть сообщение
вообще это мне надо для заполнения матрицы для отображения на экране - входная матрица - двухбайтные числа, выходная - цвета точек :О
двухбайтное число - это тип данных short
В беззнаковом варианте: От 0 до 65 535 значений.

О чем это говорит?
Это говорит о том, что какие бы элементы в твоём массиве не лежали, их значения находятся в рамках этого диапазона (если они без знаковые)


Можно составить таблицу готовых расчетов:

0 ---- результат0
....
65535 ---- результат65535

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

Хотя конечно... памяти сожрёт...
------------------------------------
Нет, это тупой вариант.

Вариант лучше: Прогоняешь массив данных через утилиту, которая на выходе даёт массив с уже готовыми расчетами. А боевая программа уже работает с готовыми расчетами, а не сырыми данными.

Последний раз редактировалось _Bers; 23.12.2011 в 23:14.
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 01:10   #8
loh
 
Регистрация: 21.12.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
двухбайтное число - это тип данных short
В беззнаковом варианте: От 0 до 65 535 значений.

О чем это говорит?
Это говорит о том, что какие бы элементы в твоём массиве не лежали, их значения находятся в рамках этого диапазона (если они без знаковые)


Можно составить таблицу готовых расчетов:

0 ---- результат0
....
65535 ---- результат65535

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

Хотя конечно... памяти сожрёт...
------------------------------------
Нет, это тупой вариант.

Вариант лучше: Прогоняешь массив данных через утилиту, которая на выходе даёт массив с уже готовыми расчетами. А боевая программа уже работает с готовыми расчетами, а не сырыми данными.
а точно! отличная идея про готовую таблицу с расчетами! вот я туплю)

и кстати значений можно 4096 использовать в моей задаче, да и 65к не критично памяти съест, спасибо попробую!
loh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обработать не выбранный ListBox sergey113 Помощь студентам 1 26.05.2011 12:40
Две лабы: файл - обработать слова; массив - найти три наибольших элемента за один проход ( Delphi ) Emma_Imp Помощь студентам 5 26.12.2010 21:13
Помогите с решением, нужно обработать массив stare1983 Microsoft Office Excel 2 25.02.2009 21:06
Как обработать ошибку XAOC-forever Работа с сетью в Delphi 11 24.09.2008 20:13
Как обработать исключение? XPAiN БД в Delphi 9 16.05.2008 15:09