![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Здравствуйте.
Для реализации некоторого автоматного алгоритма требуется организация больших объёмов однобитных данных (boolean, если угодно), скорость работы с которыми сильно критична. Более точно, эти данные можно представить в виде двумерного массива, i-ый столбец которого состоит из (const*i) элементов. Причём играет роль высокая скорость добора до значений элементов, находящихся в соседних столбцах и соседних строках, как показано на рисунке : ( в клетках указаны индексы элементов массива) ![]() или, в более сложном случае : ![]() Дополнительное условие состоит в том, что этот массив данных должен быть динамическим в плане добавления новых столбцов и содержаться в некотором классе. Понятно, что bool **bArray и дальнейшее выделение памяти операцией new является доступным и популярным решением. Но, может, существуют какие-то специфические приёмы эффективной органиации таких данных по скорости? = какие-то тИповые или программные решения, может быть засовывание однобитных данных в более ёмкие и работа с ними, может быть какое-то внутреннее расслоение, хеш и т.п., а может быть вообще следует отказаться от array-ной топологии и применить что-то другое?? Посоветуйте, пожалуйста, кто компетентен в этой области. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| zhgutov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 14.12.2004 Репутация: 1 Всего: 2 |
Можно выделить память под весь массив сразу, используя каждый бит, а далее подобно тому, как делается в растровых изображениях. Здесь, я так понял, каждый следующий столбец содержит на const элементов больше, чем предыдущий? Так всегда? Тогда выборка может осуществляться с использованием формул прогрессии.
Чего не хватает в этом интерфейсе?
Является ли операция добавления нового столбца критичной к скорости? --------------------
Приполз. Увидел. Укусил. |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Согласен, что следует назначить некоторую начальную размерность массива, и затем увеличивать её.
Да, всегда. Для четырёхугольной клетки - на 8 больше предыдущего, для треугольной - на 12 и т.п. Проще, чем прогрессия. Наверно, я похо задал вопрос: суть не в интерфейсе, а в его реализации, соответствующей означенным характеристикам. Например, с использованием специфического вида матрицы, пытаться вычислить адрес требуемого элемента быстрее, чем это сделает система. Или что-то ещё...
В принципе, не является. Но добавленные элементы не должны сильно проигрывать в скорости добора элементам априорно заданной матрицы. -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
причем переход к более емким ( чем bool ) типам -- очень желателен ( в идеале int ) -- такие массивы компъютеру гораздо проще обрабатывать.
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |