Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальная по скорости доступа организация данных, для конкретной задачи 
:(
    Опции темы
marcusmae
Дата 30.3.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Здравствуйте.

Для реализации некоторого автоматного алгоритма требуется организация больших объёмов однобитных данных (boolean, если угодно), скорость работы с которыми сильно критична.
Более точно, эти данные можно представить в виде двумерного массива, i-ый столбец которого состоит из (const*i) элементов. Причём играет роль высокая скорость добора до значений элементов, находящихся в соседних столбцах и соседних строках, как показано на рисунке : ( в клетках указаны индексы элементов массива)

user posted image

или, в более сложном случае :

user posted image

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

Понятно, что bool **bArray и дальнейшее выделение памяти операцией new является доступным и популярным решением. Но, может, существуют какие-то специфические приёмы эффективной органиации таких данных по скорости? = какие-то тИповые или программные решения, может быть засовывание однобитных данных в более ёмкие и работа с ними, может быть какое-то внутреннее расслоение, хеш и т.п., а может быть вообще следует отказаться от array-ной топологии и применить что-то другое?? Посоветуйте, пожалуйста, кто компетентен в этой области.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
zhgutov
Дата 30.3.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 14.12.2004

Репутация: 1
Всего: 2



Можно выделить память под весь массив сразу, используя каждый бит, а далее подобно тому, как делается в растровых изображениях. Здесь, я так понял, каждый следующий столбец содержит на const элементов больше, чем предыдущий? Так всегда? Тогда выборка может осуществляться с использованием формул прогрессии.

Чего не хватает в этом интерфейсе?
Код

class X
{
public:
    X (int cols);
    bool get_it (int col, int row) const;
    void set_it (int col, int row, bool value);
    void push_col ();
    int get_cols_count () const;
    int get_rows_count (int col) const;
};


Является ли операция добавления нового столбца критичной к скорости?
--------------------
Приполз. Увидел. Укусил.
PM MAIL   Вверх
marcusmae
Дата 30.3.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Согласен, что следует назначить некоторую начальную размерность массива, и затем увеличивать её.

Цитата

Здесь, я так понял, каждый следующий столбец содержит на const элементов больше, чем предыдущий? Так всегда?


Да, всегда. Для четырёхугольной клетки - на 8 больше предыдущего, для треугольной - на 12 и т.п. Проще, чем прогрессия.

Наверно, я похо задал вопрос: суть не в интерфейсе, а в его реализации, соответствующей означенным характеристикам. Например, с использованием специфического вида матрицы, пытаться вычислить адрес требуемого элемента быстрее, чем это сделает система. Или что-то ещё...

Цитата

Является ли операция добавления нового столбца критичной к скорости?


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



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
_hunter
Дата 31.3.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



причем переход к более емким ( чем bool ) типам -- очень желателен ( в идеале int ) -- такие массивы компъютеру гораздо проще обрабатывать.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.