KD-Tree和希尔伯特曲线在哪些具体领域有显著应用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5406个文字,预计阅读时间需要22分钟。
引用+我们可能需要这样的需求,比如在车载软件中呼唤附近的车辆来接自己,或者在QQ中查看附近的人。我们都需要知道距离自己一定范围内的其他目标的集合。
引言我们可能会有这样的一种需求,像是打车软件中呼叫附近的车来接送自己,或者是在qq中查看附近的人。我们都需要知道距离自己一定范围内的其它目标的集合。如果将上面举例的功能抽象出来,就是要实现以某个点为中心,以一定的距离为半径,在空间中查找其它点所构成的集合。诚然,当空间中点的数目较少时,我们可以采用遍历所有点的方式来计算出当前点与其它点之间的距离的方式来得到对应的结果集,但是空间中的点数目较多(假如达到千万级别),且存在多个点要计算出距离当前点一定范围内的点所构成的集合时,这个计算的时间复杂度便达到了O(\(mn\))级别,为此,我们需要改进该实现方式。
如何实现我们先不考虑多维空间中的点,先考虑一维平面上的数,假如为1,92,8,11,18,91,7,47这几个数。如果我们想得到某个数一定距离范围内的那几个数,如数字11,想得到距离不超过为7的数(<=7)。那么我们可以将这些数按照从小到大的顺序进行排序,使其有序,然后找到对应的数字,以该数为中心,分别往左和往右遍历对应的点并计算距离,如果是在符合要求的范围内,则将其纳入结果集中。以上面例子为例,将数字进行排序,得到 1,7,8,11,18,47,91,92的数字序列。然后找到数11,分别往左计算各点的距离,得到符合条件的数7,8(11-1=10>7不符合条件)。往右计算各点的距离,得到符合条件的数18(47-11=36>7不符合条件)。为此,可以得到符合条件的结果集7,8,18。
除了将数进行排序这种方式,我们也可以采用二叉树这一数据结构,通过直接定位到节点7然后搜索查找以节点7为根的子树来缩小需要进行查找的数据范围。
本文共计5406个文字,预计阅读时间需要22分钟。
引用+我们可能需要这样的需求,比如在车载软件中呼唤附近的车辆来接自己,或者在QQ中查看附近的人。我们都需要知道距离自己一定范围内的其他目标的集合。
引言我们可能会有这样的一种需求,像是打车软件中呼叫附近的车来接送自己,或者是在qq中查看附近的人。我们都需要知道距离自己一定范围内的其它目标的集合。如果将上面举例的功能抽象出来,就是要实现以某个点为中心,以一定的距离为半径,在空间中查找其它点所构成的集合。诚然,当空间中点的数目较少时,我们可以采用遍历所有点的方式来计算出当前点与其它点之间的距离的方式来得到对应的结果集,但是空间中的点数目较多(假如达到千万级别),且存在多个点要计算出距离当前点一定范围内的点所构成的集合时,这个计算的时间复杂度便达到了O(\(mn\))级别,为此,我们需要改进该实现方式。
如何实现我们先不考虑多维空间中的点,先考虑一维平面上的数,假如为1,92,8,11,18,91,7,47这几个数。如果我们想得到某个数一定距离范围内的那几个数,如数字11,想得到距离不超过为7的数(<=7)。那么我们可以将这些数按照从小到大的顺序进行排序,使其有序,然后找到对应的数字,以该数为中心,分别往左和往右遍历对应的点并计算距离,如果是在符合要求的范围内,则将其纳入结果集中。以上面例子为例,将数字进行排序,得到 1,7,8,11,18,47,91,92的数字序列。然后找到数11,分别往左计算各点的距离,得到符合条件的数7,8(11-1=10>7不符合条件)。往右计算各点的距离,得到符合条件的数18(47-11=36>7不符合条件)。为此,可以得到符合条件的结果集7,8,18。
除了将数进行排序这种方式,我们也可以采用二叉树这一数据结构,通过直接定位到节点7然后搜索查找以节点7为根的子树来缩小需要进行查找的数据范围。

