码迷,mamicode.com
首页 > 其他好文 > 详细

四叉树搜索附近的人

时间:2016-05-09 20:18:17      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

现在很多的APP都有"附近的人"功能。

粗略的思考一下,用户在登录的时候会将自己的位置信息告诉服务器,服务器会记录一份用户的位置信息列表。

假设服务器里只有10个人,那么要找附近的人就很简单,只需写一个算距离的函数,然后依次遍历长度是10的位置信息列表,距离从近到远排序,返回排序后的列表即可。

那么如果服务器里有1千万人呢,或者几亿人呢,比如微信。这时再从头到尾遍历(复杂度O(n))就不适合了。

通常情况下会使用“四叉树”来构建这些大量的位置信息。

1.四叉树

顾名思义,四叉树是叶子节点最多为4的树结构。

技术分享

2.地理位置和四叉树

把全球的位置定义为一个矩形,用经度和纬度的二维数据来定位全球范围内的点。

经度范围[-90,90],纬度范围[-180,180]。

当登录服务器的人数越来越多时,超过一个约定的值,就将这个矩形分割成4个更小的矩形,将这些位置信息分发到更小的矩形里(比如分成太平洋,大西洋等)

更小的矩形存储的信息又要超过约定的值了,就再分割。

技术分享

3.查找附近的点

假设我在广州天河的华农的图书馆,想要找到附近的十个人的位置。

那么首先需要从根节点(全球)遍历到天河区的节点,搜寻这个节点的列表里有没有十个人。

如果不够十个人,则向上一层的广州节点请求,可能会在海珠区找到剩余的人。

四叉树搜索附近的人

标签:

原文地址:http://www.cnblogs.com/yao2yaoblog/p/5475231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!