怎麼查你附近的餐廳

2021-10-09 01:38:31 字數 1904 閱讀 4878

書中給了乙個例子:餐廳搜尋**可能有乙個資料庫,其中包含每個餐廳的精度和維度。當使用者在地圖上檢視餐廳時,**需要搜尋使用者檢視的矩形地圖區域內的所有餐廳。這就需要乙個二維的查詢,如下:

select * from restaurants where latitude > 51.4946 and latitude < 51.5079

and longitude > -0.1162 and longitude < -0.1004;

我們常用的索引結構,比如b樹、b+樹、lsm樹,對於這種查詢不是很高效:它只能返回乙個經度範圍內的所有餐廳,或者乙個維度範圍內的所有餐廳,但是不能同時滿足。比較普遍的做法,採用一種特殊化的空間索引,書中給出了r樹的概念。

r樹是一棵平衡樹,可以理解為b樹在k維空間上的擴充套件。利用空間物件的mbr(minimal bounding rectangle,最小邊界矩形)的方法,來構建r樹。r樹的核心思想是聚合距離相近的節點並在樹結構的上一層將其表示為這些節點的最小外接矩形,這個最小外接矩形就成為上一層的乙個節點。因為所有節點肯定在外置矩形內部,所以如果和某個矩形不相交的查詢一定跟這個矩形的所有節點都不相交。利用這個原理,可以過濾大範圍不符合條件的資料,只需要查詢相交矩陣,縮小了查詢範圍。

r樹中葉子結點儲存了實際的資料,非葉子節點表示其所有孩子節點矩形的最小外接矩形。所以越靠近根節點,表示的矩形越大,代表的範圍越廣。

我們先從二維空間舉例,比較容易想象。比如我們我們所有的資料都是二維空間下的座標,那我們把相鄰的座標連線到一起,形成乙個不規則形狀,然後我們用最小外接矩形框住這個不規則形狀,就形成了r樹的葉子結點。如圖中,我們就形成了r8-r19,共12個最小外接矩形,每個外接矩形內都是若干的資料節點。

接著我們再把這12個外接矩形中相鄰的聚集到一起,比如r8、r9、r10離得比較近,我們把他們三個聚集到一起,再用乙個更高層次的最小外接矩形框住,形成了r3,r3就作為了r8、r9、r10的父節點,儲存到了r樹中的更高一層。以此類推,一直到根節點,根節點是兩個矩形,包含了咱們左右的低層次的矩形。這就形成了一棵r樹。

比如我們前面中說的餐廳例子,我們就可以把相鄰的餐廳聚集到一起,形成外接矩形。再把這些矩形聚集到一起,形成更大的外接矩形。直到剩下兩個矩形為止,就構建成了乙個可以範圍查詢餐廳的r樹。

同理,可以擴充套件到n維空間,比如天氣查詢,有時間、濕度、溫度三個維度,這個外接矩形就演變為了三維空間的外接矩形。

r樹的搜尋過程是什麼樣的呢?

如上圖,比如我們搜尋的條件矩形為黑色矩形所示,我們從根節點開始,判斷是否和搜尋矩形相交。如果相交則遍歷其子節點。如果子節點為葉子結點,則遍歷葉子節點中資料是否滿足條件。

插入和刪除過程不再重複說了,百科中有非常詳細的介紹了。如果理解了r樹的原理,把每個矩形可以看成普通b樹中的乙個節點,對於r樹的插入、刪除過程與b樹類似,但是r樹較為關鍵的在於如何**矩形和如何合併矩形。

r樹搜尋我們會發現乙個問題,即矩形之間會有重疊,會導致搜尋時,會產生多路搜尋才能找到符合條件的資料,極端情況下會退化為線性搜尋,覆蓋重疊的程度,極大地影響了搜尋效率。所以又產生了r+樹,每個矩形之間是不覆蓋重疊的,這樣搜尋的效率會大大提高,但是也同樣會帶來問題,當進行合併、**時,需要重新構建矩陣,防止覆蓋,也就是插入和刪除效率會較低。

以上是簡單記錄一下r樹的概念,原諒我孤陋寡聞,對於多維度索引還有這種結構。並且關於r樹的介紹文章都翻譯於r樹**,配圖、錯字都完全一樣,抄過來也沒有什麼意義,所以感興趣的可以隨便搜一篇看看,不過關於刪除操作還是沒有理解,準備看一下原**是怎麼寫的,感覺可能是第乙個翻譯的作者自身也沒有理解,導致後面抄過來的更讓人沒法理解了,就像是考試,能把數學填空題13抄成了b一樣。

附近wifi都是你的

今天給大家介紹deauth攻擊。最終效果 附近你指定的任何wifi,別人都無法連線,即便連線上的也會斷掉。由於我在 世界雖大,但沒有破不了的wifi 這篇文章中寫的很詳細,所以我在這裡就步詳細的寫了,看不懂的可以去那篇文章看。1.輸入命令 airodump ng wlan0mon 檢視附近wifi的...

餐廳投影儀怎麼選購?一般餐廳的投影機放在哪?

投影儀現在可以說已經走進千家萬戶了,甚至連一些餐廳老闆也打起了投影儀的主意,在自家餐館裡架上了投影儀。今天我們就一起來看一下,餐廳中適合哪些投影儀使用。首先餐廳的www.cppcns.com布局跟我們家裡可太不一樣了,我們www.cppcns.com家裡最多就是臥室和客廳使用投影儀,場景相對比較固定...

你在怎麼折騰你的專案?

不可否認,只要存在過程改進的地方,專案就會被折騰來折騰去。那麼,你的專案怎麼樣了?是越折騰越精神了還是被折騰的奄奄一息了?最近自己一直在想,到底該怎麼做,才能真正的幫到專案組 幫到組織?到底有沒有這樣的方法存在?下面是總結的幾種現在常見的過程改進的方法。型別一 生搬硬套某某標準 這個是最常見的過程改...