Структура данных для очень больших двоичных данных - PullRequest
0 голосов
/ 11 августа 2011

Я строю Генетический Алгоритм, и мне было интересно, какую хорошую структуру данных использовать для кодирования хромосом (по существу, это длинная последовательность из 0 и 1).

Я стремлюсь к эффективности случайного изменения битов в хромосомах и выполнения кроссоверов между хромосомами.По сути много копирования и замены битов или подпоследовательностей битов.

Пока что я просто застрял с простым логическим массивом, но я чувствую, что должна быть лучшая структура данных для эффективной обработки очень больших объемов двоичных данных.

Есть предложения?

1 Ответ

1 голос
/ 11 августа 2011

Переключение на использование примитивов int для представления групп двоичных значений и использование побитовых операций и масок для изменения групп двоичных значений может привести к значительному увеличению скорости в зависимости от того, как вы манипулируете данными.Вы можете случайным образом мутировать блоки генов одновременно, используя случайно сгенерированные маски.

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

Если вас больше интересует замена групп генов фиксированного размера, построение двухуровневого дерева с n ветками с группамигенов на каждом листе позволит вам очень быстро поменять местами группы генов.Возможно, группы не должны быть одинакового размера.Если вам необходимо разбить гены на хромосомы, вы можете добавить промежуточный уровень к дереву.

...