两个有序数组 求中位数

无病呻吟2 2008-04-07 12:41:37
有两个已排好序(从小到大)的数组A和B,长度均为n,把它们合并为一个数组,要求时间代价为O(logn),请给出算法。

下面是我在网上找到的:
Say the two arrays are sorted and increasing, namely A and B.
It is easy to find the median of each array in O(1) time.
Assume the median of array A is m and the median of array B is n.
Then,
1' If m=n, then clearly the median after merging is also m, the algorithm holds.
2' If m<n, then reserve the half of sequence A in which all numbers are greater than
m, also reserve the half of sequence B in which all numbers are smaller than n.
Run the algorithm on the two new arrays.
3' If m>n, then reserve the half of sequence A in which all numbers are smaller than
m, also reserve the half of sequence B in which all numbers are larger than n.
Run the algorithm on the two new arrays.

Time complexity: O(logn)

问题:
1.我不懂,程序什么时候退出?如果m和n永远不相等,怎么办!
2.第二和第三步里保留大于m和n的数字,那两个子数组的中位数都要去掉吗?我觉得两者的大者有可能是整个数组的中位数呀!

...全文
1318 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
JohnsonElizeee 2010-10-28
[Quote=引用 1 楼 oo 的回复:]

1.我不懂,程序什么时候退出?如果m和n永远不相等,怎么办!
这样最后就是两个序列各剩一个数,因为长度都是n,那就是这两个数了(一个序列最大的比另一个序列最小的还小是会出现这种情况)

2.第二和第三步里保留大于m和n的数字,那两个子数组的中位数都要去掉吗?我觉得两者的大者有可能是整个数组的中位数呀!
是应该保留,否则象 1,2,9和1,3,7就不对了
对当前个数是奇数和偶数处理……
[/Quote]

Hello, if length of these two array are different, how to find median in array merged ?
tks advance.
  • 打赏
  • 举报
回复
ggggjatihc 2009-07-17
就是归并操作,
  • 打赏
  • 举报
回复
无病呻吟2 2008-04-07
当是基数时,因为两个数组去掉的数必须个数相同,不能去掉一个而保留另一个。

两个都为基数的时候,应该都保留,而不是都去掉吧?
两个都是偶数的时候,应该去掉小的,保留大的,好像这样才行。
  • 打赏
  • 举报
回复
oo 2008-04-07
我觉得有可能,A剩下只有1个了,而B剩下很多元素,程序退出有哪些情况呀?
因为两个数组一样长,不会一个剩一个,一个剩很多
每次保留数据时,必须是一样多的,否则会有问题。


A,B数组的两个中位数都保留吗?我觉得小的可以不保留吧?
当是偶数时,中间是有两个数的,看你怎么取的了,如果都是取的小的那个,当然两者小的那个可以去掉,
当是基数时,因为两个数组去掉的数必须个数相同,不能去掉一个而保留另一个。
  • 打赏
  • 举报
回复
无病呻吟2 2008-04-07
1.我不懂,程序什么时候退出?如果m和n永远不相等,怎么办!
这样最后就是两个序列各剩一个数,因为长度都是n,那就是这两个数了(一个序列最大的比另一个序列最小的还小是会出现这种情况)

我觉得有可能,A剩下只有1个了,而B剩下很多元素,程序退出有哪些情况呀?

2.第二和第三步里保留大于m和n的数字,那两个子数组的中位数都要去掉吗?我觉得两者的大者有可能是整个数组的中位数呀!
是应该保留,否则象 1,2,9和1,3,7就不对了
对当前个数是奇数和偶数处理会有些不一样,另外如果各剩2个元素时可能需要特别处理。

A,B数组的两个中位数都保留吗?我觉得小的可以不保留吧?
  • 打赏
  • 举报
回复
oo 2008-04-07
1.我不懂,程序什么时候退出?如果m和n永远不相等,怎么办!
这样最后就是两个序列各剩一个数,因为长度都是n,那就是这两个数了(一个序列最大的比另一个序列最小的还小是会出现这种情况)

2.第二和第三步里保留大于m和n的数字,那两个子数组的中位数都要去掉吗?我觉得两者的大者有可能是整个数组的中位数呀!
是应该保留,否则象 1,2,9和1,3,7就不对了
对当前个数是奇数和偶数处理会有些不一样,另外如果各剩2个元素时可能需要特别处理。
  • 打赏
  • 举报
回复
发帖
数据结构与算法

3.2w+

社区成员

数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
帖子事件
创建了帖子
2008-04-07 12:41
社区公告
暂无公告