kd树搜索与线性搜索对比

毕业设计中遇到求解最近邻问题,对比了kd树和线性搜索两种方法。线性搜索需计算一万五千个点的距离,而kd树能提高效率。通过代码验证发现,当样本量小如100或1000时,线性搜索可能更快;但随着样本容量增加,kd树的优势逐渐显现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做毕业设计的时候,遇到这样一个需求:

给定一万五千个点,再给定一个目标点,要求离目标点的最近点,说白了就是求“最近邻”问题

传统的方式,就是从第一个点开始算距离,把一万五千个点都算完,再取最小值

但是这样的方式比较慢,所以利用了knn算法中的kd树进行搜索

kd树的原理在李航的《机器学习》书籍中有详细的介绍,包括kd树的构建和kd树的搜索,但是李航的书里面只有kd树搜索最近邻

关于原理性的东西网上有很多资料,在此就不再累赘了

但是我想探究的是,究竟kd树搜索,跟传统线性搜索相比,能够快多少,所以我就写代码验证了

import numpy as np
import time
import random
from sklearn.neighbors import NearestNeighbors
import matplotlib.pyplot as plt

N = 100000
k = 1

method1_time = []
method2_time = []

print("N=", N)
print("k=", k)
for time_i in range(3):
    X = [[np.random.random() * 100 for _ in range(2)] for _ in range(N)]
    target = [[np.random.random() * 100 for _ in range(2)] for _ in range(k)]

    X = np.array(X)
    target = np.array(tar
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值