【问题标题】:finding median of 5 elements找到 5 个元素的中位数
【发布时间】:2012-07-05 18:37:00
【问题描述】:

在最近的一次微软采访中提出了以下问题

给定一个大小为 5 的未排序数组。 需要多少次最小比较才能找到中位数?然后他将其扩展为 n 大小。

我认为 5 个元素的解决方案是 6 个

1) use 3 comparisons to arrange elements in array such that a[1]<a[2] , a[4]<a[5] and a[1]<a[4]
a) compare a[1] and a[2] and swap if necessary
b) compare a[4] and a[5] and swap if necessary 
c) compare a[1] and a[4].if a[4] is smaller than a[1] , then swap a[1] wid a[4] and a[2] wid a[5]
2)if a[3]>a[2].if a[2]<a[4] median value = min(a[3],a[4]) else median value=min(a[2],a[5]) 
3)if a[3]<a[2].if a[3]>a[4] median value = min(a[3],a[5]) else median value=min(a[2],a[4]) 

这可以扩展到 n 个元素。如果不是,除了快速选择之外,我们如何在 O(n) 中找到 n 个元素中的中位数

【问题讨论】:

标签: arrays algorithm median


【解决方案1】:

Select 算法将列表分为五个元素的组。 (剩下的元素暂时被忽略。)然后,对于每组五个,计算中位数(如果可以将五个值加载到寄存器中并进行比较,这个操作可能会非常快 - 最少 6 次比较)。然后在这个 n/5 个元素的子列表上递归调用 Select 以找到它们的真正中位数。

【讨论】:

  • 我不明白“加载到寄存器”是什么意思,谁能解释一下?
  • “加载到寄存器”意味着数据都存在于 CPU 的内存中。寄存器是 CPU 的 ALU 可以与之交互的特殊存储器。没有什么比寄存器更快的访问了。
猜你喜欢
  • 2011-04-23
  • 2022-06-19
  • 1970-01-01
  • 2015-06-22
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 2016-08-08
相关资源
最近更新 更多