位圖算法

   
此文轉載

搜索引擎檢索時,常常要將兩個結果進行組合處理,例如查詢“中國北京”,則需要將包含“中國”和“北京”的文檔編號序列進行合併的操作。常用的算法有歸併,先排序後去重等,但這些算法在大數據量的情況下,如對包含“中國”的10萬個文檔編號序列和包含“北京”的8萬個文檔編號序列進行組合時,效率比較低,無法滿足搜索引擎高速的檢索要求。我們引入了基於二進制數組的算法來解決這個問題。

    基於二進制數組的整數序列合併算法是一種高速的多個整數序列組合的算法。它的基本原理是將各整數序列保存在一個二進制的數組當中,然後對這些二進制數組進行並,或的運算。
    下面詳細介紹一下此算法的處理過程。
    1. 將整數序列轉爲二進制數組。
    先申請一個二進制數組,其大小爲有可能出現的最大的整數值,如500萬,。


    假設有5個整數組成的序列{2,3,200,7000,12000},則我們可以將這個序列保存在二進制數組當中,如圖2所示,第n位如果爲1,則表示n存在於這個序列中:



    2. 對兩個序列進行位運算。
    如果需要對兩個整數序列進行並的操作,那麼只需要對它們對應的二進制數組進行“並”的位運算;如果需要對兩個整數序列進行或的操作,那麼只需要對它們對應的二進制數組進行“或”的位運算;如果需要對兩個整數序列進行NOT的操作,那麼只需要對它們對應的二進制數組先進行“並”的位運算,再進行“異或”的位運算。
    計算機進行位運算的速度是最快的。在實際的程序中,我們可以以long類型爲基本的位運算單位,相同位置的long型數據進行兩兩位運算,以提高速度。
    3. 將二進制數組轉爲結果整數序列。
    位運算結束後,需要將這個結果再轉爲整數序列。這個轉換後的整數序列就是我們需要的最終結果。
    下面是一次完整的運算過程,我們需要將{2,3,300}和{2,3,200,7000,12000}這兩個序列進行並的操作。


    整數序列{2,3}即是我們最終所要的結果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章