14、算法分析与数据可视化:从理论到实践

算法分析与数据可视化:从理论到实践

1. 运行时间分析

假设给定平面上的 $n$ 个点。在步骤 1 中,使用随机分治算法可以在 $O(n)$ 时间内找到将集合划分为两个等大小子集的中位数点。创建子集 $L$ 和 $R$ 也是一个 $O(n)$ 时间的操作。解决两个大小为 $\frac{n}{2}$ 的子问题后,算法在 $O(n)$ 时间内选择属于中间条带的点。之后,对这些过滤后的点进行排序需要 $O(n \log n)$ 时间。最后,在这个条带内计算距离需要 $O(n)$ 时间(对于每个点执行固定量的工作)。

对于任何函数 $f = kn$,$k \in \mathbb{N}$,都有 $f = O(n)$,即它由某个线性函数界定。因此,无论连续执行 $O(n)$ 操作多少次,或者执行 $3n$、$5n$ 或 $7n$ 次操作,它们的总效果都算作 $O(n)$。总体而言,运行时间由递归公式 $T(n) = 2T(\frac{n}{2}) + O(n \log n)$ 定义。虽然不能直接应用主定理,但可以借鉴其思想来分析这个表达式。

如果绘制递归树,在任意级别 $k$ 上,树的贡献为 $t_k = 2^k \cdot \frac{n}{2^k} \log \frac{n}{2^k}$。树的深度为 $\log n$,通过对每一级的贡献求和,最终得到 $O(n \log^2 n)$。

在步骤 3 中,反复按 $y$ 坐标对节点进行排序,这导致了额外的 $\log n$ 乘数。如果能避免这种排序,只在开始时进行一次,那么运行时间将降低到 $O(n \log n)$。从新的递归关系 $T(n) = 2T(\frac{n}{2}) + O(n)$ 可以明显看出这一点,因为可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值