0 0

请牛人指点,如何以最优的算法,对两点间的距离进行排序。20

业务要求:根据APP当前位置,取得距离最近的10条记录,再次刷新时,取得后10条最近的数据。。。


我考虑的思路:
■思路1:
查询出数据库中所有的数据,根据两点的经度和纬度计算得到距离。再按照距离排序。缺点是,如果数据库有100万条数据,每次取出来,效率会很慢。

■思路2:
SQL查询语句中,取得两点间,经度和纬度差值的绝对值,以从小到大排序,取得前10条即可。这样查出来的数据量就比较小了。

正确的思路到底是什么呢,不知道别人的APP距离排序怎么个算法。

★Java
算法是什么呢??

★APP客户端传递的参数
1:当前位置所在地址
2:当前位置的经度
3:当前位置的纬度

★数据库中表字段。
1:城市名
2:地址
3:经度
4:纬度
2014年3月30日 23:06

2个答案 按时间排序 按投票排序

0 0

采纳的答案

1. 一看你的描述就知道是暴力的做法, 没有任何搜索方面的经验吧.

2. 想要快速, 预先存数据的时候, 就做好预处理, 之后取数据的能过滤掉无关的数据.

例如你查询杭州市滨江区星光大道附近的临近的位置, 有必要将北京地区的数据也取出来计算么?

目前地理位置搜索, 已经有现成的标准的做法了. 我就不用具体说明了, 你自己google一下.

给你提供一个博客的参考:
http://blog.csdn.net/a221133/article/details/14525197

2014年3月31日 13:00
0 0

不知道你用的什么数据库,如果数据库支持geometry类型字段(比如SqlServer),那么它会自带一系列的相关空间索引的建立,以及空间运算函数的支持。
虽然不能直接解决你的问题,但是可以用如下思路进行:
1,根据APP所在点的坐标,计算以它为中心的一个类似圆形的多边形(边的个数根据你的精确度要求改变,最简单是正方形),认为这个多边形范围内的数据是我们需要查询的对象。
2,使用geometry的空间函数,查询时候作为where条件代入。
具体说的话,就是对象形状的空间坐标落在你计算出的多边形范围内即可。
这属于点和面的空间计算,一般的空间函数都是支持的。
范围内的数据应该很少了,然后自己计算距离取前10件即可。

如果数据库不支持,那么就要你自己动动脑子建立相关的索引用来减少计算次数了。
一个思路是,自己定义一套匹配规则,根据已知的坐标信息,可以把所有数据2分一下。
然后再次二分。。。。直到分配到一个自己可以接受的数据量范围再行遍历。

具体说的话,你可以给每条数据做一个列用来存储这个索引信息。
比如你把整体地图先切分成若干个格子(比如1000个),每个格子对应相应的经纬度范围,数据插入的时候可以更新这列的信息。那么将来检索的时候,根据这列就可以过滤出来相当小量的数据,那么再遍历就没有那么慢了。
可以把这个思路多层次展开,过滤多次,每次限定更小的范围。。。就看速度要求了。

2014年3月31日 13:03

相关推荐

    c语言算法经典,超强牛人经典

    《C语言算法经典》是编程领域的一本重量级著作,由超强牛人撰写,它深入浅出地介绍了各种常见的算法,并且用C语言这一高效、灵活的编程工具进行了详尽的解析。这本书对于想要提升算法理解和应用能力的程序员来说,...

    信息学各类算法+牛人的超强分析

    《信息学各类算法+牛人的超强分析》是一个涵盖了信息学竞赛中常见算法的资源集合,对准备参加NOIP(全国青少年信息学奥林匹克联赛)的学生来说是极有价值的参考资料。这个压缩包包含了九个PPT文件,分别对应不同的...

    怎样学好C++《牛人指点》

    7. **深入学习标准库**:C++标准库提供了大量工具和功能,熟悉并学会使用STL(标准模板库)中的容器、算法和迭代器,可以显著提高编程效率。 8. **阅读他人代码**:通过阅读高质量的C++代码,你可以学习到优秀编程...

    牛人的DES算法C、C++实现

    DES算法基于Feistel结构,使用56位密钥对64位的数据块进行加密,通过16轮的迭代过程,每轮包括一个子密钥应用、数据异或和一系列非线性转换。 **DES算法原理:** 1. **初始置换(IP)**:将64位明文按照特定规则...

    CSDN 牛人 项目代码 大全

    【标题】"CSDN 牛人 项目代码 大全"所涵盖的知识点非常广泛,这是一份集合了CSDN社区内高手们分享的项目源代码合集,旨在帮助新手快速学习和提升编程技能。这个压缩包可能包含各种类型的项目,涉及到不同的编程语言...

    转载牛人文章学习

    【标题】:“转载牛人文章学习” 这篇标题表明我们即将探讨的是某位业内专家或博主的文章,关于IT行业的某个主题,特别是与Android相关的技术。在IT领域,"牛人"通常指的是那些在某一技术领域有深厚造诣的人,他们...

    牛人的软件

    标题“牛人的软件”暗示了我们正在探讨的是一款或一系列被技术高手广泛使用或高度推荐的软件工具。这些软件可能因为其高效性、创新性或者在特定领域的专业性而受到“牛人”的青睐。通常,技术牛人会选择那些能够提升...

    国外牛人js例子

    这个"国外牛人js例子"的压缩包很可能是包含了一些由国际知名开发者编写的JavaScript代码示例。这些示例通常用来展示JavaScript的独特特性和强大功能,帮助学习者理解和掌握这门语言。下面我们将深入探讨一些可能涵盖...

    搜索百度李彦宏 牛人牛人 百度发展史

    介绍百度老总李彦宏的故事 搜索百度李彦宏 牛人牛人 百度发展史

    FPGA牛人的经验谈

    FPGA牛人分享的经验中,特别强调了在IC设计过程中需要明确目标,扎实学习基础知识,不断积累经验,谨慎小心地进行设计工作,注意规范和风格的遵循,以及在设计中合理选择和利用IP资源。这些经验对于IC设计新手来说,...

    华为牛人在华为工作十年的感悟

    华为牛人 在华为 工作十年的感悟

    牛人写的Javascript

    "牛人写的Javascript"这一主题,暗示我们将探讨的是由业界高手编写的JavaScript代码示例,这些代码可能包含创新的设计思路、高效算法或者独特的编程技巧。 描述中的“JS游戏”指的是使用JavaScript编写的交互式游戏...

    计算机牛人之编程牛人的生活.pdf

    【描述】:“计算机牛人之编程牛人的生活.pdf”描绘了作者从中学到大学再到工作的十年间,如何从零开始,凭借对计算机的热爱和执着,逐步深入学习,最终成功应聘华为的故事。 【标签】:“技术”表明该文件主要讨论...

    牛人软件1.0

    "牛人软件1.0"是一款专为初学者设计的强大插件软件,它以其易用性和实用性赢得了用户的赞誉。这款软件旨在帮助那些想在IT领域学习新知识的菜鸟,提供了一个友好的平台,使得复杂的操作变得简单易懂。 首先,我们要...

    一位牛人网址收藏夹..

    这样的程序可能还包括了一些自定义功能,比如书签管理、快捷方式创建或者根据用户喜好进行排序。 综上所述,这份“一位牛人网址收藏夹”很可能是一个集成了众多IT相关优质网站的资源库,覆盖了从基础知识到高级技术...

    sift 特征提取 matlab 牛人写的代码

    5. **描述符匹配**:最后,两个图像的关键点描述符可以通过距离度量(如欧氏距离或汉明距离)进行匹配,从而实现图像间的对应。 在MATLAB中实现SIFT,可以使用MATLAB自带的`vision.SIFTFeatureDetector`和`vision....

Global site tag (gtag.js) - Google Analytics