Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用黑盒findmax子例程进行排序的运行时间_Algorithm_Sorting - Fatal编程技术网

Algorithm 使用黑盒findmax子例程进行排序的运行时间

Algorithm 使用黑盒findmax子例程进行排序的运行时间,algorithm,sorting,Algorithm,Sorting,假设您有一个黑盒子例程,可以从(log n)^a时间中的n个元素数组中提取最大值,其中0我不知道确切的答案,但下面的一些结果提示答案可能是幼稚的: 假设我们将输入分成4部分(4可以用k代替) 对4个片段中的每一个进行排序需要n/4*(log(n/4)^a),组合结果需要(n/2+n/2+n)=2n n/4*(对数(n/4)^a)*4=n(对数^a)-n/4*(对数4)^a 总时间=n(logn^a)-n/4*(log4)^a+2n 但是,如果a=1,rhs=n(对数(n)^a);如果an(对数(

假设您有一个黑盒子例程,可以从
(log n)^a
时间中的n个元素数组中提取最大值,其中
0我不知道确切的答案,但下面的一些结果提示答案可能是幼稚的:

假设我们将输入分成4部分(4可以用k代替)

对4个片段中的每一个进行排序需要n/4*(log(n/4)^a),组合结果需要(n/2+n/2+n)=2n

n/4*(对数(n/4)^a)*4=n(对数^a)-n/4*(对数4)^a

总时间=n(logn^a)-n/4*(log4)^a+2n

但是,如果a=1,rhs=n(对数(n)^a);如果a<1,则rhs>n(对数(n)^a)


因此,即使从现实世界的角度而不是从大Oh的角度考虑,分治方法也只能在aNo的情况下减慢速度。预计,我们需要黑盒中的Ω(n logn)位来对n个项目进行排序。当对大小为k的数组调用时,黑盒将运行(logk)a步,并返回约logk位,速率约为(logk)1-a位/步。这个速率的上限是(logn)1-a,因此明显的算法是渐近最优的。

第一个观察:如果你不使用黑盒max Routine,你不会做得更好。他没有说你有更好的方法来比较项目。似乎如果你只是用它来比较两个元素,然后,您可以使用类似快速排序的方法来最小化必须进行的比较次数。这可能会使它更快,因为logn明显更小,因为n更小。@Yuriy:我越是沿着这些思路思考,我发现n logn^a n就越多。即使你把数组分成相等的部分,比如说sqrt(n)并巧妙地尝试合并结果,你也无法与数学抗衡:O(log^a(sqrt(n))=O(log^a(n))。有趣的是,
a
作为一个参数,因此最终优化算法可能取决于
a
的值。例如,对于
a=0
您的提案在
O(n)
时间内排序(如果必须将
n
值中的每一个放入排序的数组中,这很难击败)而对于
a=1
而言,与众所周知的排序算法相比,似乎没有任何渐近增益,即使完全未排序数组的最大值可以在
O(log(n))
时间和黑盒中找到(与人们期望的
O(n)
相比)…如果你试图使k成为n的函数,它似乎也不起作用。至少k=多项式(n)不起作用。可能是n的其他功能?@Alexsandre是的,但键入一般情况是一项太累的任务:)我突然想到,既然a可能是1,如果找到所需的解决方案,那么如果它与1一起工作,我们将击败CAR Hoare,这是不可能的。情况a=1确实不允许改进,但a<1可以。