首页 > 编程语言 > 详细

研究打车软件是如何搜索最近的人的,自己实现了相关的算法 JavaScript版

时间:2015-11-26 20:51:32      阅读:340      评论:0      收藏:0      [点我收藏+]
//研究打车软件是如何搜索最近的人的,自己实现了相关的算法
//1.首先建立一个数据结构,初始化中,给所有的人,根据坐标排序
//2.根据坐标去搜索最近的人,我用的是二分法,搜索出最近的人
//3.添加指定位置的人和删除最近位置的人
//4.over不缺东西了
//5.扩展:搜索制定范围的人,很容易写了
var PointArr=function(){
    if(this.ctor){
        this.ctor.apply(this, arguments);
    }
}
PointArr.prototype={
    ctor:function(arr){
        this.children=[]
        if(Object.prototype.toString.call(arr)=="[object Array]"){
            this.children=arr.sort(this._sort)
        }
    },
    //按照x和y大小排序
    _sort:function(a,b){
        if(a.x== b.x){
            return a.y> b.y
        }else{
            return a.x> b.x
        }
    },
    //二分法查找坐标最近的一个位置
    indexOf:function(p){
        var l=0,r=this.children.length;
        while(r-l>1){
            var i=(l+r)>>1
            var mid=this.children[i]
            if(this._sort(p,mid)){
                l=i
            }else{
                r=i
            }
        }
        return r
    },
    //查找最近的一个人
    find:function(p){
        var r=this.indexOf(p)
        return this.children[r]
    },

    //插入一个坐标
    push:function(p){
        var l=this.indexOf(p)
        this.children.splice(l,0,p)

    },
    //删除最近坐标
    pop:function(p){
        var r=this.indexOf(p)
        this.children.splice(r,1)
    }
}
//如何给多点坐标排序
var arr=[{
    name:"caoke1",
    x:21,
    y:2
},{
    x:21,
    y:3
},{
    x:22,
    y:3
},{
    x:1,
    y:2
}]

var d=new PointArr(arr)
d.push({
    x:21,y:2,z:2
})
//d.pop({
//    x:21,y:2,z:2
//})
console.log(d.find({x:21,y:2}))
console.log(d)
//[ { x: 1, y: 2 }, { x: 21, y: 2 }, { x: 21, y: 3 } ]

  

研究打车软件是如何搜索最近的人的,自己实现了相关的算法 JavaScript版

原文:http://www.cnblogs.com/caoke/p/4998658.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!