You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无序数组查找多秩目标元素的最优时间复杂度问题

无序数组查找指定秩集合的最优时间复杂度

问题描述

给定包含n个互异元素的无序数组,其中n为2的幂,需要查找的目标元素共log₂n个,对应数组升序排序后位置为1,2,4,8,16,…,n/2的元素(排序后位置1为全局最小值,位置n为全局最大值),求查找所有目标元素的最优时间复杂度。

原有推导思路

  • 基于中位数的中位数(median of medians)算法,可以在O(n)时间复杂度下从无序数组中找到任意指定秩的元素
  • 未按1、2、4、8…n/2的顺序逐个查找,而是首先选取待查找目标集合的中间秩k(对应位置为√n),以该元素为划分基准将原数组拆分为两个子数组,再分别对两个子数组递归处理剩余待查找元素
  • 按该思路计算:递归共log₂log₂n层,每层总处理工作量为O(n),因此推导总时间复杂度为O(n log log n)
  • 存在疑问:对应题目给出的选项中没有该结果,推导是否存在问题

最优解法与正确结论

原有推导的思路不是最优方案,问题出在划分基准的选择上,最优时间复杂度实际为O(n),推导逻辑如下:

  • 观察目标位置的规律:所有待查找元素的秩最大为n/2,其余待查找元素的秩1,2,4…n/4均小于n/2
  • 第一步先找秩为n/2的中位数,使用中位数的中位数算法耗时O(n),完成划分后,所有小于该中位数的元素构成大小为n/2的左子数组,其余所有待查找目标全部落在这个左子数组中,右半部分所有元素可以直接丢弃,不需要参与后续计算
  • 第二步在大小为n/2的左子数组中,找秩为n/4的元素(对应原数组秩为n/4的目标),耗时O(n/2),划分后同样将所有小于该元素的元素构成大小为n/4的左子数组,剩余待查找目标全部在这个更小的子数组中,丢弃其余部分
  • 以此类推,每一步都处理当前子数组中秩为当前子数组大小一半的目标元素,划分后仅保留左半段继续递归
  • 总耗时为等比数列求和:O(n) + O(n/2) + O(n/4) + ... + O(2) = O(2n) = O(n)

注:原有思路选择待查集合的中间秩作为划分点,会导致左右两个子数组都需要递归处理,虽然每层总工作量为O(n),但多了loglogn层递归,得到的O(n log log n)是可行解但不是最优解。

内容的提问来源于stack exchange,提问作者user3699192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:54:28