優先查詢樹(priority search tree)適於解決動態的已知區間集合的區間查詢問題。此問題
間接地借助以下1.5維查詢問題來解:已給平面土的點集5,對給定的x1,x2和y列舉出s中所有包
含在矩形r = [x1,x2]×[0,y] 中的點,如圖所示。此處s是動態的,要求增刪方便,這要求對不
同的查詢矩形r反覆多次查詢。
優先查詢樹的地規定以具體如下:
(i)跟結點對應於y 座標最小的點(x0,y0) 作一垂直線x = x' ,
將水平線y = y0以上部分分成兩個子域,使左右於域中點數之差不超過1,x』值稱為分界值(discriminator)。將點(x0,y0)和x』值標在根結點上。
(2)左右於樹分別為水平線y=y0以上左右子域的優先查詢樹。
圖(b)為圖(a)所示點集的優先查詢樹,為了對應起見,此處將樹畫成根結點在下其他結點陸
續向上的形式,樹的各個結點除了標明所對應的結定點以外、括號中數字為
相應的分界值。來說,樹中任一結點的值不大於其子結點的值,這種結構稱為乙個堆(heap),因此從根結點起
向上的每一條路徑相當於乙個優先佇列;對於分界值來說,此樹相當於乙個平衡二又樹.
如果點分界值為x』,則其左於樹各結點的值均小於x』,右子樹各結點的值均大於x』,且
左右於樹高度之差不超過l,顯然,n個結點的優先查詢樹高度為o(log(n)),故插人刪
除運算的時間複雜性為0〔log(n)).其占用空間為0(n)。
列舉點集s中所有包含在查詢矩形r = [x1,x2]×[0,y]中的點,是利用優先查詢樹從根結點起向上進行深度優先搜尋(depth-first-search).由每結點相應的分界值和
其對應點的x,y座標,判斷該結點相應的子域中是否有包含於r中的點,當確信無r中的
點時.則回溯(backtracking)搜尋其他分枝。圖(b)的例子中,標以星號*的
為列舉的點.此搜尋過程的時間複雜件為0(logn+k),其中k為列舉出的r中的點數。
關於廣度優先查詢和深度優先查詢
由於最近在做的專案中設計到了虛擬dom的設計,那自然就避免不了需要對虛擬dom中的節點進行遍歷 查詢了,一般來說查詢節點無非就兩種方法 廣度優先查詢和深度優先查詢,這跟我們在資料結構中學習到的樹的遍歷其實是一樣的。ok,廢話不多說,講一下我對這兩種查詢方法的理解吧。首先廣度優先查詢,bfs,它的乙個...
演算法筆記 020 深度優先查詢(Java)
目錄1 問題描述2 解決方案2.1 蠻力法 深度優先查詢 depth first search,dfs 可以從任意頂點開始訪問圖的頂點,然後把該頂點標記為已訪問。在每次迭代的時候,該演算法緊接著處理與當前頂點鄰接的未訪問頂點。這個過程一直持續,直到遇到乙個終點 該頂點的所有鄰接頂點都已被訪問過。在該...
廣度優先搜尋介紹
這道題的原址 bfs是一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。bfs並不使用經驗法則演算法。搜尋其實算一種暴力列舉的演算法,不過這種暴力列舉是一種有條理性的暴力列舉,更容易控制以及實現。它在求最短路以及...