C++ 求两个大小不同的排序数组的中值
我正在解决这个问题 在这里,我基本上有三个疑问:C++ 求两个大小不同的排序数组的中值,c++,arrays,algorithm,C++,Arrays,Algorithm,我正在解决这个问题 在这里,我基本上有三个疑问: 对于N==1且M为奇数的情况 难道我们不能直接找到MO4(A[0],B[M/2],B[M/2-1],B[M/2+1]) 为什么我们要通过idxA来缩短数组A和B 这个算法的时间复杂度是多少 //C++程序 //求两个大小不等的排序数组的中值 #包括 使用名称空间std; //求两个整数中值的效用函数 浮动MO2(内部a、内部b) {return(a+b)/2.0;} //求三个整数中值的效用函数 浮动MO3(内部a、内部b、内部c) { 返回a
N==1且M为奇数的情况
难道我们不能直接找到
MO4(A[0],B[M/2],B[M/2-1],B[M/2+1])
idxA
来缩短数组A
和B
B[M/2]
是B
的精确中位数(即使用B[M/2-1]表示未注释的代码,这两个表达式是等效的-通常是一个糟糕的举动。(您甚至似乎已经手动删除了注释。)我更希望使用此问题演示文稿返回值的定义。您删除了假设N小于或等于M
。请编辑您的问题,并明确询问您遗漏了什么:两个/所有数组/范围都可能被仅在一个数组中找到的值缩短?缩短所有范围不会使问题出在哪里?@greybeard我在编辑方面有问题。你能检查一下吗?无法回答,因为问题还在等待中:1.MO4(A[0],B[M/2],B[M/2-1],B[M/2+1])
等于MO2(B[M/2],MO3(A[0],B[M/2-1],B[M/2+1])
知道B[M/2]
是B
的精确中位数,它将始终被选为MO4
中的一个平均项。2.这遵循分而治之的范例:将问题划分为子问题。在这里,你将两个数组按中位数相等的数量缩短。你不能将两个数组减半,因为它们的大小不同(因此,中位数不再在该范围的中间,即使算法返回错误的值)。我投票赞成重新打开,因为这是一个有效的算法问题,在一个质量良好的状态。(虽然我认为这是错误的原因)(因此给出一个无用的参考链接)。,请访问,并尽可能提出最好的问题。(正如我没有对这个问题发表评论一样,在@
后面提到他的名字是不可能的
using a:=A[0], b:=B[M/2], bm:=B[M/2-1], bp:=B[M/2+1]
MO4(a, b, bm, bp)
= 0.5 * (a + b + bm + bp - min(a, b, bm, bp) - max(a, b, bm, bp))
= 0.5 * (b + (a + bm + bp - min(a, bm, bp) - max(a, bm, bp))
= MO2(b, MO3(a, bm, bp))
T(N, M) :=
| (N < 2 && M < 2) O(1)
| (N < 2 && M >= 2) T(M) = O(log M)
| (N == 2) T(M) = O(log M)
| (otherwise) 1 + T(N - N/2, M - N/2)