【发布时间】:2017-10-04 14:14:40
【问题描述】:
我的算法教科书中有一个练习,但我不太确定解决方案。我需要解释为什么这个解决方案:
function array_merge_sorted(array $foo, array $bar)
{
$baz = array_merge($foo, $bar);
$baz = array_unique($baz);
sort($baz);
return $baz;
}
合并两个数组并对它们进行排序并不是最有效的,我需要提供一种最优化的解决方案,并证明无法做出更好的解决方案。
我的想法是使用 O(n log n) 的合并排序算法来合并和排序作为参数传递的两个数组。但我如何证明这是有史以来最好的解决方案?
【问题讨论】:
-
你首先需要证明合并和排序的下界。您可以通过在网上搜索找到解决方案和解释,这是一个非常理论化的论点,争论需要进行多少比较才能找到排序。之后,您需要找到具有这种复杂性的算法。就像一个问题一样,对这两个数组有什么了解吗?例如,如果它们已经排序?然后,理想的算法使用 类似拉链的 方法,同时处理两个数组,始终插入两个列表的较低元素,依此类推
O(n)。 -
两个数组参数排序
-
Mergesort 在
O(n log n)中工作,这将是排序的最佳解决方案之一,因为基于比较的排序算法的下限在Omega(n log n)(see also) 中。但是,我不知道您对 合并 两个数组 并对其进行排序 的附加要求如何发挥作用。 -
合并和排序两个有序数组的最佳优化解决方案是什么?