我有一個信息檢索應用程序,它創建了10萬位數量級的位數組。陣列中「置位」位的數量差別很大,從所有清除到所有設置。目前,我正在使用一個簡單的位陣列(java.util.BitSet
),因此我的每個位陣列都需要幾兆字節。什麼是位陣列的一些替代方案?
我的計劃是看第一個位的基數,然後決定剩下的數據結構。顯然有些數據結構對於非常稀疏的位數組更好,而另外一些數據結構對大約一半的位進行設置(當設置了大多數位時,我可以使用否定將其視爲稀疏零集)。
- 什麼結構可能在每個極端都很好?
- 中間有沒有?
這裏有一些約束或提示:
- 的位被設置爲僅一次,並在索引順序。
- 我需要100%的準確性,所以像布盧姆過濾器的東西不夠好。
- 集合建立後,我需要能夠有效地迭代「set」位。
- 這些位是隨機分佈的,所以運行長度爲–的編碼算法不可能比簡單的位索引列表好得多。
- 我試圖優化內存利用率,但速度仍然帶有一些的重量。
對開源Java實現有幫助,但並非絕對必要。我對基本面更感興趣。
美麗的解決方案。它可能甚至會很快,因爲今天的內存負載如此昂貴。 – 2008-10-05 15:16:15