N个点,求距离最近的两个点---分支策略(2)

news/2024/12/5 2:39:52/

N个点,求距离最近的两个点---分治策略(1)_Happy_Traveller的博客-CSDN博客介绍了N个点,求距离最近的两个点的分治策略的算法,可以将直觉上O(n^2)的复杂度优化到O(nlog^2n),这其实已经是很大的改进了,那么有没有办法进一步改进那?

不难发现,每次递归调用都需要重新进行X、Y的排序,这个需要O(nlogn)的时间,如果能够在循环之外做一次排序,然后在程序内部,通过类似查表的方式,得到X、Y的排序那?答案是肯定的。

查表的方式时间时间复杂度是O(n)

这样整个计算由两部分组成,预处理的时间T_1(n),递归计算的时间T_2(n)

那么有:

T(n) = T_1(n) + T_2(n)

T_1(n) = O(nlogn)

\left\{\begin{matrix} T_2(n) = 2T_2(n) + O(n) & \\ T_2(n) = O(1) , & n \leq 3 \end{matrix}\right.

T_2(n) = O(nlogn)

T(n) = O(nlogn) + O(nlogn) = O(nlogn)


http://www.ppmy.cn/news/9987.html

相关文章

php学习笔记-代码基本语法-day01

php代码基本语法 PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法&…

华为OD机试真题Java_2022-2023-题目0184-获得完美走位

获得完美走位 题目描述 在第一人称射击游戏中,玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位。 假设玩家每按动一次键盘,游戏人物会向某个方向移动一步,如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏…

spring springboot mockito测试的注解

写这个文章只是想帮自己理解&#xff1a; 测试的时候&#xff0c;注解到底怎么写 首先看你的junit版本 如果您使用的是 Junit 版本 < 5&#xff0c; 则必须使用 RunWith(SpringRunner.class)或 RunWith(MockitoJUnitRunner.class)等等。 如果您使用的是 Junit 版本 5&…

Duboo优雅关闭(附源码分析)

Dubbo优雅关闭 1. 关闭有什么问题 当服务提供方要上线的时候&#xff0c;一般是通过部署系统完成实例重启。在这个过程中&#xff0c;服务提供方的团队并不会事先告诉调用方他们需要操作哪些机器&#xff0c;从而让调用方去事先切走流量。而对调用方来说&#xff0c;它也无法…

深入理解Synchronized

Synchronized 底层原理 Synchronized的语义底层是通过一个 Monitor 的对象来完成&#xff0c;其实wait/notify等方法也依赖于 Monitor 对象&#xff0c;这就是为什么只有在同步的块中&#xff0c;拿到锁之后&#xff0c;才能调用wait/notify等方法&#xff0c;否则会抛出java.…

SQL SELECT TOP, LIMIT, ROWNUM 子句

SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; Oracle 可以使用…

【C++高阶数据结构】B树、B+树、B*树

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

【算法】【字符串模块】求字符串中不重复的最长子串

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介绍 …