專利名稱:一種在空間網(wǎng)絡(luò)數(shù)據(jù)庫中查找最近k個(gè)點(diǎn)對(duì)的廣度優(yōu)先方法
技術(shù)領(lǐng)域:
本發(fā)明屬于空間數(shù)據(jù)庫技術(shù)領(lǐng)域,具體涉及一種在空間網(wǎng)絡(luò)數(shù)據(jù)庫中查找最近k個(gè)點(diǎn)對(duì)的廣度優(yōu)先方法。
背景技術(shù):
近年來,隨著無線通訊技術(shù)、地理信息系統(tǒng)特別是定位技術(shù)的發(fā)展,以及計(jì)算機(jī)信 息處理能力的提高,空間數(shù)據(jù)庫在現(xiàn)實(shí)中得到了很好的應(yīng)用,成為了當(dāng)今的研究熱點(diǎn)之一, 其發(fā)展前景被廣泛看好。在空間數(shù)據(jù)庫中,數(shù)據(jù)的存儲(chǔ)是基于存儲(chǔ)對(duì)象的空間地理位置信息而進(jìn)行組織 的,所進(jìn)行的查詢也是與查詢對(duì)象的空間地理位置信息有關(guān)的空間查詢。作為空間數(shù)據(jù)庫 中最常見的空間查詢之一,最近k個(gè)點(diǎn)對(duì)查詢是,對(duì)輸入兩個(gè)數(shù)據(jù)集合S和T,S的每個(gè)元素 與T的每個(gè)元素構(gòu)成點(diǎn)對(duì),計(jì)算這些點(diǎn)對(duì)的距離,選取最小的k個(gè)返回。在現(xiàn)有的最近k個(gè)點(diǎn)對(duì)的查詢方法中,大多數(shù)方法都是針對(duì)歐氏幾何空間環(huán)境下 的空間數(shù)據(jù)庫而提出的。在歐氏幾何空間環(huán)境下,點(diǎn)與點(diǎn)之間的距離是直線距離,而在空間 網(wǎng)絡(luò)環(huán)境下,點(diǎn)與點(diǎn)之間的距離是由兩點(diǎn)在網(wǎng)絡(luò)中的最短路徑距離決定的,因此針對(duì)歐氏 幾何空間環(huán)境下的查詢方法無法直接應(yīng)用到空間網(wǎng)絡(luò)環(huán)境下。在空間網(wǎng)絡(luò)環(huán)境下,現(xiàn)有的 最近k個(gè)點(diǎn)對(duì)查找方法是以深度優(yōu)先方法進(jìn)行查找的,由于該方法在查找過程中會(huì)找出很 多冗余的點(diǎn)對(duì),因此對(duì)空間網(wǎng)絡(luò)的頂點(diǎn)和邊的訪問量很大,導(dǎo)致查找速度很慢。因此亟需要 對(duì)此方法進(jìn)行改進(jìn),以提高查找速度。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)空間網(wǎng)絡(luò)數(shù)據(jù)庫中最近k個(gè)點(diǎn)對(duì)的問題,提出一種廣度優(yōu)先 的方法,以提高查找速度。本發(fā)明提出的查找方法,通過以廣度優(yōu)先的查找順序,既保證了最終查找的點(diǎn)對(duì) 是最近的k個(gè),又減少了查找過程中對(duì)空間網(wǎng)絡(luò)的頂點(diǎn)和邊的訪問次數(shù),加快了查找速度。首先對(duì)一些基本概念進(jìn)行定義定義1.網(wǎng)絡(luò)(G)表示頂點(diǎn)(vertex)之間鄰接關(guān)系的拓?fù)浣Y(jié)構(gòu),由頂點(diǎn)集合(V) 以及頂點(diǎn)之間的邊的集合(E)構(gòu)成。定義2.兩點(diǎn)間距離(distance)兩點(diǎn)之間最短路徑的長(zhǎng)度。定義3.最近鄰居(NN)對(duì)輸入的查詢點(diǎn)(或中心點(diǎn))q和查詢目標(biāo)集合S= {Si, S2,…,Sn},在S中找出與q之間距離最小的頂點(diǎn)Si,Si即為q的最近鄰居(q. NN)。 定義4.點(diǎn)對(duì)及點(diǎn)對(duì)距離對(duì)頂點(diǎn)集合S和T,S中的頂點(diǎn)Si與T中的頂點(diǎn)Tj構(gòu)成 點(diǎn)對(duì)(Si,Tj),Si與Tj之間的距離為點(diǎn)對(duì)(Si,Tj)的距離。 定義5.最近k個(gè)點(diǎn)對(duì)對(duì)頂點(diǎn)集合S和T,在所有點(diǎn)對(duì)中取距離最小的k個(gè),稱這 k個(gè)點(diǎn)對(duì)為S和T的最近k個(gè)點(diǎn)對(duì)。
定義6.集合大小|S| 集合S所包含元素的個(gè)數(shù)。根據(jù)以上定義,對(duì)于輸入的頂點(diǎn)集合S和T,S = {Sl,S2,-,Sm},T = {T1,T2,…, Τη},本發(fā)明提出的最近k個(gè)點(diǎn)對(duì)查找方法是基于以下性質(zhì)的(1)以T為查詢目標(biāo)集合,假設(shè)已經(jīng)找到了 S中的每個(gè)頂點(diǎn)Si的第一個(gè)最近鄰居 Si. 1NN,這m個(gè)由中心點(diǎn)Si和Si. INN構(gòu)成點(diǎn)對(duì)(Si, Si. 1NN),i = 1,2,…,m,在這m個(gè) 點(diǎn)對(duì)中,設(shè)距離最小的點(diǎn)對(duì)為(Sj,Sj. 1NN),則(Sj,Sj.lNN) 一定是S和T的第一個(gè)最近點(diǎn)對(duì)。(2)假設(shè)當(dāng)前已找出第i個(gè)最近點(diǎn)對(duì)(Sx,Sx. tNN),其中,i = 2、3、…、k_l,Sx. tNN 表示Sx的第t個(gè)最近鄰居,則查找Sx的第t+Ι個(gè)最近鄰居,構(gòu)成新的點(diǎn)對(duì),那么找出的所 有點(diǎn)對(duì)中距離第i+Ι小的點(diǎn)對(duì)一定是S和T的第i+Ι個(gè)最近點(diǎn)對(duì)。基于以上性質(zhì),本發(fā)明方法以廣度優(yōu)先的順序查找兩個(gè)集合的最近k個(gè)點(diǎn)對(duì),具 體步驟是(1)對(duì)于輸入的頂點(diǎn)集合 S 和 T,設(shè)m= |S ,η = | T |,S = {Si,S2,…,Sm},T ={Τ1,Τ2,…,Τη},不失一般性,假設(shè)m< η。(2)以T為查詢目標(biāo)集合,查找S中的每個(gè)頂點(diǎn)Si的第1個(gè)最近鄰居Si. 1ΝΝ,這 m個(gè)由中心點(diǎn)Si和Si. INN構(gòu)成點(diǎn)對(duì)(Si,Si. 1NN),i = 1,2,…,m,在這m個(gè)點(diǎn)對(duì)中取距 離最小的點(diǎn)對(duì),設(shè)為(pl,ql),Pl e S,ql e T,則(pl,ql)為S和T的第一個(gè)最近點(diǎn)對(duì)。(3)對(duì)(2)中求出的第1個(gè)最近點(diǎn)對(duì)的中心點(diǎn)pl,查找Pl的第2個(gè)最近鄰居 pl. 2NN, pl與pl. 2NN構(gòu)成第m+1個(gè)點(diǎn)對(duì)(Sj,Sj. 2NN),在(2)、(3)中求出的m+1個(gè)點(diǎn)對(duì)中 取距離第2小的,設(shè)為(p2,q2),則(p2,q2)是S和T的第二個(gè)最近點(diǎn)對(duì)。(4)對(duì)已求出的S和T的第t (0 < t < k)個(gè)最近點(diǎn),對(duì)重復(fù)步驟(3),計(jì)算下一個(gè) 最近點(diǎn)對(duì),直至t = k為止。根據(jù)以上步驟進(jìn)行的查找方法,共進(jìn)行了 I S I +k次最近鄰居查找,找出S和T的最 近k個(gè)點(diǎn)對(duì)。這樣的查找方法既能很快的查找出最近k個(gè)點(diǎn)對(duì),又保證了最終得出的結(jié)果 是正確的。附圖2為本發(fā)明方法與背景技術(shù)比較的實(shí)驗(yàn)結(jié)果,通過附圖可以很清楚地驗(yàn)證 本發(fā)明方法與背景技術(shù)相比在查找速度上的提高。
圖1所示為一個(gè)由17個(gè)頂點(diǎn)和20條邊組成的空間網(wǎng)絡(luò),其中圓點(diǎn)nl,n2,…,nl7 表示17個(gè)頂點(diǎn),連接圓點(diǎn)的直線表示連接兩個(gè)頂點(diǎn)的邊,直線上的整數(shù)表示該邊的權(quán)值。 紅色圓點(diǎn)為集合 S = {n6,n9,nl4},藍(lán)色圓點(diǎn)為集合 T = {nl,n3,n5,nlO,nl2,nl3,nl5}。圖2所示為本發(fā)明方法與背景技術(shù)比較的實(shí)驗(yàn)結(jié)果,其中,集合S包含13個(gè)頂點(diǎn), 集合T包含47個(gè)頂點(diǎn),k取5、6、7、8、9、10。
具體實(shí)施例方式下面以一個(gè)實(shí)例來說明本發(fā)明的具體實(shí)施方式
。在由附圖1表示的一個(gè)空間網(wǎng)絡(luò)中,用戶輸入集合S和T以及正整數(shù)k,查詢最近k 個(gè)點(diǎn)對(duì),S = {n6,n9,nl4},T = {nl,n3,n5,nlO,η12,η13,η15},k = 4,那么按照以下步 驟進(jìn)行查找
(1)選取S為中心點(diǎn)集合,T為查詢目標(biāo)集合,查找n6、n9、nl4的第1個(gè)最近鄰居, 分別為 n5、nlO、nl5,得到 3 個(gè)點(diǎn)對(duì)(n6,n5,5)、(n9,nlO,2)、(nl4,nl5,3),括號(hào)內(nèi)第 3 個(gè)
數(shù)表示該點(diǎn)對(duì)的距離; (2)找出(1)中3個(gè)點(diǎn)對(duì)中距離最小的點(diǎn)對(duì),為(n9,nl0,2),則(n9, nlO)為S和 T的第1個(gè)最近點(diǎn)對(duì);(3)對(duì)(2)中求出的第1個(gè)最近點(diǎn)對(duì)(n9,nlO)的中心點(diǎn)n9,查找η9的第2個(gè)最 近鄰居,為η3,得到第4個(gè)點(diǎn)對(duì)(η9,η3,9);(4)找出(2)和(3)求出的 4 個(gè)點(diǎn)對(duì)(η6,η5,5)、(n9,nlO,2)、(nl4,nl5,3)、(n9, n3,9)中距離第2小的點(diǎn)對(duì),為(nl4,nl5,3),則(nl4, nl5)為S和T的第2個(gè)最近點(diǎn)對(duì);(5)對(duì)(4)求出的第2個(gè)最近點(diǎn)對(duì)(nl4,nl5)的中心點(diǎn)nl4,查找nl4的第2個(gè)最 近鄰居,為nl2,得到第5個(gè)點(diǎn)對(duì)(nl4,nl2,4);(6)找出(2)、(3)、(5)求出的 5 個(gè)點(diǎn)對(duì)(n6,n5,5)、(n9,nlO,2)、(nl4,nl5,3)、 (n9,n3,9)、(nl4,nl2,4)中距離第 3 小的點(diǎn)對(duì),為(nl4,nl2,4),則(nl4,nl2)為 S 和 T 的 第3個(gè)最近點(diǎn)對(duì);(7)對(duì)(6)求出的第3個(gè)最近點(diǎn)對(duì)(nl4,nl2)的中心點(diǎn)nl4,查找nl4的第3個(gè)最 近鄰居,為nl3,得到第6個(gè)點(diǎn)對(duì)(nl4,nl3,9);(8)找出(2)、(3)、(5)、(7)求出的 6 個(gè)點(diǎn)對(duì)(n6,n5,5)、(n9,nlO,2)、(nl4,nl5, 3)、(n9,n3,9)、(nl4,nl2,4)、(nl4,nl3,9)中距離第 4 小的點(diǎn)對(duì),為(n6,n5,5),則(n6, n5)為S和T的第4個(gè)最近點(diǎn)對(duì);(9)將(2)、(4)、(6)、(8)找到的 4 個(gè)最近點(diǎn)對(duì)(n9,nl0)、(nl4,nl5)、(nl4,nl2)、 (n6,n5)返回給用戶。從以上例子可以看出,對(duì)用戶輸入的集合S、T和正整數(shù)k,本發(fā)明方法按照廣度優(yōu) 先的查找順序,通過7次最近鄰居查找,找到了 S和T的最近4個(gè)點(diǎn)對(duì)。這4個(gè)點(diǎn)對(duì)是所有 點(diǎn)對(duì)中距離最小的4個(gè),而且查找過程中所進(jìn)行的最近鄰居查找次數(shù)為7,與理論值I S I +k相等。
權(quán)利要求
一種空間網(wǎng)絡(luò)數(shù)據(jù)庫中查找最近k個(gè)點(diǎn)對(duì)的廣度優(yōu)先方法,其特征在于具體步驟如下1)對(duì)于查詢用戶輸入的兩個(gè)頂點(diǎn)集合S和T以及正整數(shù)k進(jìn)行預(yù)處理計(jì)算S和T各自包含的頂點(diǎn)個(gè)數(shù),用m和n表示,選取頂點(diǎn)個(gè)數(shù)較小的集合作為中心點(diǎn)集合,另外一個(gè)為查詢目標(biāo)頂點(diǎn)集合;2)查找第1個(gè)最近點(diǎn)對(duì)根據(jù)步驟(1)選定的中心點(diǎn)集合查詢目標(biāo)定點(diǎn)集合,假設(shè)中心點(diǎn)集合中心點(diǎn)Si(i=1,2,…,m),計(jì)算每個(gè)Si的第1個(gè)最近鄰居,在這些中心點(diǎn)與最近鄰居構(gòu)成的點(diǎn)對(duì)集合中,選出第1個(gè)最近點(diǎn)對(duì);3)查找第2個(gè)最近點(diǎn)對(duì)根據(jù)步驟(2)找出的第一個(gè)最近點(diǎn)對(duì),計(jì)算其中心點(diǎn)的下一個(gè)最近鄰居,構(gòu)成新的點(diǎn)對(duì),添加到步驟(2)求出的點(diǎn)對(duì)集合,從中選出第2個(gè)最近點(diǎn)對(duì);4)查找第3、4、…、k個(gè)最近點(diǎn)對(duì)根據(jù)之前選出的第i個(gè)最近點(diǎn)對(duì),i=2、3、…、k-1,重復(fù)步驟(3),計(jì)算出下一個(gè)最近點(diǎn)對(duì),直到求出第k個(gè)最近點(diǎn)對(duì)為止。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于步驟(2)中所述查找第1個(gè)最近點(diǎn)對(duì)的步 驟如下a)對(duì)集合S中的每個(gè)中心點(diǎn)Si(i = 1,2,…,m),查找Si的第1個(gè)最近鄰居Si. 1NN, 每個(gè)Si與Si. INN構(gòu)成點(diǎn)對(duì)(Si,Si. 1NN);b)將m個(gè)點(diǎn)對(duì)(Si,Si.INN) (i = 1,2,…,m)按點(diǎn)對(duì)的距離進(jìn)行排序,存放在集合A中;c)選取集合A中距離最小的點(diǎn)對(duì)(Sj,Sj.INN)作為第1個(gè)最近點(diǎn)對(duì);d)將點(diǎn)對(duì)(Sj,Sj. 1NN)從集合A中刪除。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于步驟(3)中所述查找第2個(gè)最近點(diǎn)對(duì)的步 驟如下a)對(duì)步驟(2)求出的第1個(gè)最近點(diǎn)對(duì)(Sj,Sj.1NN),查找Sj的第2個(gè)最近鄰居Sj. 2NN, Sj與Sj. 2NN構(gòu)成新的點(diǎn)對(duì)(Sj,Sj. 2NN),將新點(diǎn)對(duì)添加到集合A中;b)選取集合A中距離最小的點(diǎn)對(duì)作為第2個(gè)最近點(diǎn)對(duì);c)將第2個(gè)最近點(diǎn)對(duì)從集合A中刪除。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于步驟(4)中所述查找第3、4、…、k個(gè)最近 點(diǎn)對(duì)的步驟如下a)假設(shè)當(dāng)前已找出第i個(gè)最近點(diǎn)對(duì)(Sx,Sx.tNN),其中,i = 2、3、".、k-l,Sx. tNN表 示Sx的第t個(gè)最近鄰居,則查找Sx的第t+Ι個(gè)最近鄰居,構(gòu)成新的點(diǎn)對(duì),添加到集合A中;b)選取集合A中距離最小的點(diǎn)對(duì)作為第i+Ι個(gè)最近點(diǎn)對(duì)。
全文摘要
本發(fā)明屬于空間數(shù)據(jù)庫技術(shù)領(lǐng)域,具體是一種在空間網(wǎng)絡(luò)數(shù)據(jù)庫中查找最近k個(gè)點(diǎn)對(duì)的廣度優(yōu)先方法。在該方法中,輸入兩個(gè)頂點(diǎn)集合S和T以及正整數(shù)k,以集合S中每個(gè)頂點(diǎn)Si作為中心點(diǎn),以集合T為查詢目標(biāo)頂點(diǎn)集合,計(jì)算每個(gè)Si的第一個(gè)最近鄰居,比較這些最近鄰居與其中心點(diǎn)的距離,選取距離最小的最近鄰居及其中心點(diǎn)作為第一個(gè)最近點(diǎn)對(duì);然后查找第一個(gè)最近點(diǎn)對(duì)的中心點(diǎn)的第二個(gè)最近鄰居,選取距離第二小的作為第二個(gè)最近點(diǎn)對(duì);重復(fù)以上過程直到找到第k個(gè)最近點(diǎn)對(duì)。通過上述的廣度優(yōu)先查找順序,既能找到距離最小的k個(gè)點(diǎn)對(duì),又大大減少了查找過程中最近鄰居的查找次數(shù),從而降低了在查找過程中對(duì)空間網(wǎng)絡(luò)的頂點(diǎn)和邊的訪問次數(shù),加快了查找速度。
文檔編號(hào)G06F17/30GK101840434SQ20101017515
公開日2010年9月22日 申請(qǐng)日期2010年5月13日 優(yōu)先權(quán)日2010年5月13日
發(fā)明者何震瀛, 劉未末, 孫未未, 荊一楠, 陳楚南 申請(qǐng)人:復(fù)旦大學(xué)