2011-08-11 50 views
0

我正在构建一个遗传算法,我想知道什么是用于编码染色体(基本上是0和1的长序列)的好数据结构。非常大的二进制数据的数据结构

我的目标是在染色体内随机改变位并在染色体之间进行交换的效率。本质上是复制和更改位或位的子序列。

到目前为止,我只是坚持一个普通的布尔数组,但我觉得应该有一个更好的数据结构来处理大量的二进制数据。

有什么建议吗?

+0

BitSet?本质上是一个int数组访问各个位的包装 –

+0

我的问题不是真正的空间分配tho,更多的是关于操作的效率。本质上不是一个更有效处理空间的数组? – Erik

+0

是。但它不一定表现不佳。位掩码操作速度很快。 –

回答

1

切换到使用int原语来表示组的二进制值,并使用按位操作和掩码来更改二进制值组可能会使您获得大幅度的速度增加,具体取决于您如何操作数据。您可以使用随机生成的蒙版一次随机突变基因块。

如果您正在扫描整个事物或提前知道索引,则阵列很难击败。但是,将数组的部分复制到其他部分可能具有挑战性,但其效率仍然相当高。

如果你更关心交换固定大小的基因组,建立一个具有n个分支的2级树,每个叶子上的基因组可以让你快速交换基因组。这些组可能不需要是相同的大小。如果你需要将基因进一步分解为染色体,你可以在树上添加一个中间级别。

+0

是啊,这是我读到目前为止从我的研究。我在C#中工作,可以使用BitArray,但这仅仅是为了节省空间,我猜,布尔数组已经非常快了。 – Erik

+0

把这些基因分成几组并建立一个树形结构,可以让你很快地交换树的树枝或树叶。这可能更接近你想要的。它需要更多的内存来存储和其他操作会受到影响(取决于你如何构建树),但它应该优化你正在做的事情。 – Josh