KD Tree原理讲解

1.引子

在一张地图上,有600多个单位,每个单位之间都需要独立寻路,检测碰撞和寻找最近的敌方目标。当这一切需要在手机上流畅运行并尽可能快的在服务器进行模拟时,最简单的平方算法O(N^2)已经不能满足需求。


怎样减少计算的复杂度呢?


通过观察,可以发现,在地图左上角的单位根本无需和地图右下角的单位进行碰撞检测,因为它们离的太远了。


所以,通过对战场进行空间划分,可以避免大量的无效计算。


一种简单的划分方法是,将战场沿着横纵坐标划分为N * N的格子,只对在相同格子内的战斗单元做碰撞检测。


这种方法在大部分情况下简单有效,然而有以下几点问题:


1.当格子边长太大时,假设很多单位都聚集于一个或少数几个格子中,其实空间并没有有效划分


2.当格子边长太小时,一个格子内的单位可能太少了,也不能对空间进行有效划分

3.如果不查找附近的几个格子,可能或错过附近格子可能距离更近的单位


4.这种方法的空间复杂度是O(N2),在格子数很多的情况下,内存开销会很高

KD树k — dimensionaltree,也可称之为K维树,可以用更高的效率来对空间进行划分,并且其结构非常适合寻找最近邻居和碰撞检测。

2.KD Tree之前的树

1.四叉树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值