本計畫的演算法包含兩個部分(1)對景點建立 R-tree,(2)利用熱門的多條件查 詢演算法 —天際線查詢推薦適合使用者的節點及其包含的景點給使用者參考
5.1 建立 R-tree
5.1.1 R-tree 的架構
R-tree,是一種高度平衡的樹,用來做特殊空間搜尋動態索引的結構。其中 心概念為將所有距離相近的節點聚在一起並且在父節點端紀錄其相聚節點所形 成之最小矩形,可以用樹狀圖表示之,如圖 5.1。子節點上的每一個都代表是一 堆矩形所聚合而成的矩形,在最底層才是一個個的資料點,由下而上代表著越來 越大的矩形,由此可以推論出越上層的矩形與欲查詢的目標相似度越低。
R-tree 在每一層都有可儲存之容量上限,當超過上限就會分割成兩個最小矩 形,進而保證此 MBR 內的每個點是更高度的相關。在查詢的過程中,與欲查詢 的資料點的矩形沒有相交的查詢一定與資料點也都不相交,因此 R-tree 能夠大大 的減少搜尋速度。
圖 5.1 R-tree 二維概念圖
圖 5.2 R-tree 樹狀架構圖 rectangle,在從此 rectangle 所屬的 node 重複做此動作,直到 leaf node 為止,然 後將此點加入找到的 rectangle 裡,若此 rectangle 滿了,就必須 spilt。
5.1.5 分割的演算法
當 rectangle 滿的時候,就會將此 node 裡的 rectangle(或資料點)平均分割,
造出兩個最小的 rectangle,同時我們也要檢查看看 parent node 的 rectangle 的數 量是否超過上限,若超過時,就必須重複此動作,直到數量都在規定的範圍裡。
如圖 5.4 所示。
圖 5.4 分割 R-tree 範例 5.1.6 利用 R-tree 對地點資料建立索引
利用 R-tree 對各個景點做建立多維度的索引,包含類型評分,有人文、宗教、
自然、休閒,還有地理位置,讓具有相關性的景點全都儲存在同一個矩形內,當 使用者(團體)資料(興趣、想前往的地理位置)與某一節點高度相關時,即可保證 此節點內的所有景點串成的行程將會讓使用者滿意。
5.2 利用天際線演算法搜尋
5.2.1 Branch and Bound Skyline algorithm (BBS)
BBS 演算法是目前最具效率的天際線搜尋方法之一,此方法是透過對資料建 立索引來增加天際線的搜尋速度。BBS 演算法是基於利用 R-tree 的 Minimum Bounding Rectangle (MBR)將鄰近的資料點利用 MBR 包圍起來。如圖 5.5,只有 與天際線有交集的 MBR 會被取出使用,而其他 MBR 裡的資料點都不會被檢查 到,藉由此方法可以加快天際線的查詢速度。
圖 5.5 利用 MBR 的 BBS 查詢 5.2.2 天際線演算法查詢
為了有效的使用天際線查詢,額外新增一條 Heap 所實作的為 S 之串列,我 們將一開始 R-tree 的根結點放進 Heap 內,接著將 Heap 取出根節點所代表的最 外一層矩形分解開來,意即將子節點一一放入 Heap 內,接著將 S 串列的內容與 Heap 所取出之資料點一一比較,看看有無被支配,如果被支配即將 S 串列內該 資料點刪除,沒有被支配即將該資料點加入 S 串列,持續循環直到沒有任何點存 在於 Heap 中。