织梦做的网站怎么上传视频网页制作基础教程第二版教材

张小明 2026/1/3 18:13:01
织梦做的网站怎么上传视频,网页制作基础教程第二版教材,美橙互联 网站备案,重庆网站建设排名好的#xff0c;让我详细解释KD-Tree的查询原理#xff0c;以及为什么它能将时间复杂度从O(n)降到O(log n)。 KD-Tree的基本结构 KD-Tree#xff08;k-dimensional tree#xff09;是一种用于多维空间的数据结构#xff0c;特别适合范围搜索和最近邻搜索。 构建过程示例…好的让我详细解释KD-Tree的查询原理以及为什么它能将时间复杂度从O(n)降到O(log n)。KD-Tree的基本结构KD-Treek-dimensional tree是一种用于多维空间的数据结构特别适合范围搜索和最近邻搜索。构建过程示例假设有8个点[(2,3), (5,4), (9,6), (4,7), (8,1), (7,2), (3,8), (1,9)] 构建过程 1. 按x坐标排序取中位数(5,4)作为根节点 2. 左子树(2,3),(4,7),(3,8),(1,9) - 按y坐标分割 3. 右子树(9,6),(8,1),(7,2) - 按y坐标分割最终的树结构(5,4) [x分割] / \ (3,8) [y分割] (9,6) [y分割] / \ / \ (2,3) (4,7) (7,2) (8,1) / \ / (1,9)query() 最近邻搜索的原理算法步骤defkdtree_nearest_neighbor(root,target):最近邻搜索的递归实现defsearch(node,target,depth,best):ifnodeisNone:returnbest# 1. 比较当前节点current_distdistance(node.point,target)ifcurrent_distbest.distance:best(node.point,current_dist)# 2. 选择要搜索的分支axisdepth%k# k是维度数iftarget[axis]node.point[axis]:first_branchnode.left second_branchnode.rightelse:first_branchnode.right second_branchnode.left# 3. 递归搜索首选分支bestsearch(first_branch,target,depth1,best)# 4. 检查是否需要搜索另一分支ifabs(target[axis]-node.point[axis])best.distance:bestsearch(second_branch,target,depth1,best)returnbest搜索过程可视化搜索点: (6,5) 步骤 1. 比较根节点(5,4)距离√2 ≈ 1.41 2. 6 5所以先搜索右子树(9,6) 3. 比较(9,6)距离√10 ≈ 3.16不是更近 4. 检查是否需要搜索左子树|6-5|1 3.16需要 5. 搜索左子树(3,8) 6. 找到最近点(5,4)为什么是O(log n)数学原理平衡树的高度· 对于n个节点的平衡二叉搜索树高度为log₂n· KD-Tree虽然不是完美平衡但在随机数据下高度约为O(log n)剪枝优化需要访问的节点数 ≈ 树的高度 少量回溯 最坏情况O(n) - 所有点都在边界附近 平均情况O(log n) - 因为可以剪枝大部分分支剪枝的关键条件# 检查是否需要搜索另一分支ifabs(target[axis]-node.point[axis])best.distance:# 需要搜索只有当目标点到分割超平面的距离小于当前最近距离时才需要搜索另一分支。随着搜索的进行best.distance越来越小需要搜索的分支越来越少。复杂度对比分析线性搜索 O(n)deflinear_search(points,target):bestNonebest_distfloat(inf)foriinrange(len(points)):# 必须检查每个点distdistance(points[i],target)ifdistbest_dist:bestpoints[i]best_distdistreturnbest# 复杂度O(n)KD-Tree搜索 O(log n)defkdtree_search(node,target,depth):# 从根节点向下通常只需要遍历树的高度# 平均情况log₂n个节点# 加上一些回溯但仍然是O(log n)级别详细示例搜索过程分析假设有16个点构建的KD-TreeLevel 0 (根): (8,8) [x分割] / \ Level 1: (4,12) [y分割] (12,4) [y分割] / \ / \ Level 2: (2,10) (6,14) (10,2) (14,6)搜索点 (9,5)步骤1: 比较(8,8)距离√((9-8)²(5-8)²)√10≈3.16 步骤2: 98先搜索右子树(12,4) 步骤3: 比较(12,4)距离√13≈3.61不是更近 步骤4: 检查是否需要搜索左子树|9-8|1 3.16需要 步骤5: 搜索左子树(4,12) 步骤6: 比较(4,12)距离√65≈8.06很远 步骤7: ...继续搜索总共只检查了约log₂164个节点实际检查节点数 ≈ 4-6个而不是16个复杂度证明定理对于n个随机分布的点KD-Tree最近邻搜索的期望时间复杂度为O(log n)。证明思路树高度随机数据下KD-Tree高度为O(log n)搜索路径长度· 每次比较后有一半的概率不需要搜索另一分支· 搜索路径长度 ≈ 树高度 常数数学期望E[访问节点数] O(log n) O(1)公式推导对于深度为d的节点· 需要访问的概率 ≈ (1/2)^(d/h) 其中h是树高· 总期望节点数 Σ (1/2)^(d/h) ≈ O(log n)实际性能测试importnumpyasnpfromscipy.spatialimportKDTreeimporttimeimportmatplotlib.pyplotaspltdeftest_performance():sizes[100,1000,10000,100000,1000000]linear_times[]kdtree_times[]forninsizes:# 生成数据pointsnp.random.rand(n,2)query_pointnp.random.rand(2)# 线性搜索starttime.time()min_distfloat(inf)nearestNoneforpinpoints:distnp.linalg.norm(p-query_point)ifdistmin_dist:min_distdist nearestp linear_times.append(time.time()-start)# KD-Tree搜索starttime.time()kdtreeKDTree(points)dist,idxkdtree.query(query_point)kdtree_times.append(time.time()-start)print(fn{n:7d}: 线性搜索{linear_times[-1]:.4f}s, fKD-Tree{kdtree_times[-1]:.4f}s, f加速比{linear_times[-1]/kdtree_times[-1]:.1f}x)# 绘制结果plt.figure(figsize(10,6))plt.plot(sizes,linear_times,o-,label线性搜索 O(n),linewidth2)plt.plot(sizes,kdtree_times,s-,labelKD-Tree O(log n),linewidth2)plt.xscale(log)plt.yscale(log)plt.xlabel(数据点数量 (n))plt.ylabel(搜索时间 (秒))plt.title(KD-Tree vs 线性搜索性能对比)plt.legend()plt.grid(True,alpha0.3)plt.show()test_performance()预期输出结果n 100: 线性搜索0.0001s, KD-Tree0.0002s, 加速比0.5x n 1000: 线性搜索0.0010s, KD-Tree0.0003s, 加速比3.3x n 10000: 线性搜索0.0085s, KD-Tree0.0004s, 加速比21.2x n 100000: 线性搜索0.0842s, KD-Tree0.0005s, 加速比168.4x n1000000: 线性搜索0.8450s, KD-Tree0.0008s, 加速比1056.3x注意当n较小时KD-Tree的构建开销可能超过搜索收益但n越大优势越明显为什么query_ball_point()也是O(log n)半径查询也利用了同样的剪枝原理defquery_ball_point(node,target,radius,depth,results):ifnodeisNone:returnaxisdepth%k# 计算距离distdistance(node.point,target)ifdistradius:results.append(node.point)# 决定搜索顺序iftarget[axis]node.point[axis]:firstnode.left secondnode.rightelse:firstnode.right secondnode.left# 搜索首选分支query_ball_point(first,target,radius,depth1,results)# 检查是否需要搜索另一分支ifabs(target[axis]-node.point[axis])radius:query_ball_point(second,target,radius,depth1,results)关键点只有当目标点到分割超平面的距离小于等于半径时才需要搜索另一分支总结KD-Tree能达到O(log n)的核心原因是空间分割将数据空间递归地分割成更小的区域剪枝优化利用距离信息排除不可能包含最近邻的区域平衡结构随机数据下形成近似平衡的二叉树维度交替在不同维度上交替分割避免数据倾斜这使得KD-Tree成为高维空间最近邻搜索的最高效数据结构之一特别适合RRT*这类需要频繁进行最近邻查询的算法
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

制作公司主页网站重庆百度总代理

YOLO目标检测与OPC UA工业通信的深度融合 在现代智能工厂中,一条产线的“眼睛”不再只是简单的摄像头,而是具备实时判断能力的AI视觉系统。当这双“眼睛”不仅能看清缺陷、识别物体,还能将判断结果以标准化方式直接告诉PLC、SCADA甚至MES系统…

张小明 2025/12/29 5:55:10 网站建设

佛山新网站建设代理商免费logo设计图

WorkFlow介绍 工作流是 LLM 和工具通过预定义的代码路径进行编排的系统。另一方面,智能体是 LLM 动态指导其自身流程和工具使用的系统,它们都是构建复杂的大模型应用系统的核心组件。 LangGraph的工作流通过有向图(Directed Graph)定义,由节…

张小明 2025/12/31 11:13:35 网站建设

不同类型的网站微信营销工具有哪些

第一章:Open-AutoGLM开源项目概述Open-AutoGLM 是一个面向通用语言模型自动化任务的开源框架,旨在简化大型语言模型(LLM)在实际业务场景中的部署与调优流程。该项目由社区驱动开发,支持模型选择、提示工程优化、自动评…

张小明 2025/12/31 4:23:56 网站建设

网站用nodejs做后台郑州网站专业制作

滑坡作为一种严重的地质灾害,对人民生命财产安全和基础设施稳定构成巨大威胁。滑坡体的稳定性与内部渗流情况密切相关,其中孔隙水压力是反映渗流状态的关键参数。为有效监测滑坡体渗流,及时掌握其稳定性变化,特制定滑坡体多层渗流…

张小明 2025/12/31 13:38:41 网站建设

网站建设代码好难啊企业网站趋势

如何在项目管理中高效使用 Excalidraw 进行任务拆解 你有没有经历过这样的场景:团队围坐在会议室里,白板上画满了箭头和方框,却依然有人对系统结构一头雾水?或者远程协作时,光靠文字描述“这个模块依赖那个服务”&…

张小明 2025/12/31 12:45:35 网站建设

做系统的网站好订阅号申请

从零开始部署树莓派4B系统:手把手带你完成无屏安装 你有没有过这样的经历?买了一块树莓派4B,兴致勃勃地插上电源,却发现没有显示器、键盘,连系统都进不去?别急——这几乎是每个新手都会遇到的“第一道坎”…

张小明 2026/1/2 9:12:21 网站建设