2011-08-11 47 views
0

我正在構建一個遺傳算法,我想知道什麼是用於編碼染色體(基本上是0和1的長序列)的好數據結構。非常大的二進制數據的數據結構

我的目標是在染色體內隨機改變位並在染色體之間進行交換的效率。本質上是複製和更改位或位的子序列。

到目前爲止,我只是堅持一個普通的布爾數組,但我覺得應該有一個更好的數據結構來處理大量的二進制數據。

有什麼建議嗎?

+0

BitSet?本質上是一個int數組訪問各個位的包裝 –

+0

我的問題不是真正的空間分配tho,更多的是關於操作的效率。本質上不是一個更有效處理空間的數組? – Erik

+0

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

回答

1

切換到使用int原語來表示組的二進制值,並使用按位操作和掩碼來更改二進制值組可能會使您獲得大幅度的速度增加,具體取決於您如何操作數據。您可以使用隨機生成的蒙版一次隨機突變基因塊。

如果您正在掃描整個事物或提前知道索引,則陣列很難擊敗。但是,將數組的部分複製到其他部分可能具有挑戰性,但其效率仍然相當高。

如果你更關心交換固定大小的基因組,建立一個具有n個分支的2級樹,每個葉子上的基因組可以讓你快速交換基因組。這些組可能不需要是相同的大小。如果你需要將基因進一步分解爲染色體,你可以在樹上添加一箇中間級別。

+0

是啊,這是我讀到目前爲止從我的研究。我在C#中工作,可以使用BitArray,但這僅僅是爲了節省空間,我猜,布爾數組已經非常快了。 – Erik

+0

把這些基因分成幾組並建立一個樹形結構,可以讓你很快地交換樹的樹枝或樹葉。這可能更接近你想要的。它需要更多的內存來存儲和其他操作會受到影響(取決於你如何構建樹),但它應該優化你正在做的事情。 – Josh