首页 > 其他 > 详细

四叉树搜索附近的人

时间:2016-05-09 20:17:00      阅读:138      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!