需要提示设计了一个高效的算法,它采用以下输入并吐出以下输出。有效排序的2个整数排序笛卡尔乘积
输入:整数A和B的两个排序阵列,每个长度为n的
输出:一个排序后的数组,其由阵列A的笛卡尔乘积和B的
For Example:
Input:
A is 1, 3, 5
B is 4, 8, 10
here n is 3.
Output:
4, 8, 10, 12, 20, 24, 30, 40, 50
这里是我尝试在解决这个问题。 1)假设输出是n^2,Efficient算法不能做比O(n^2)更好的时间复杂度。
2)首先,我尝试了一种简单但低效的方法。生成A和B的Cartesian乘积。它可以在O(n^2)时间复杂度下完成。我们需要存储,所以我们可以对它进行排序。因此O(n^2)空间复杂度也是如此。现在我们对n^2个元素进行排序,而不是对输入进行任何假设,这比O(n^2logn)要好得多。
最后我有O(n^2logn)时间和O(n^2)空间复杂度算法。
必须有一个更好的算法,因为我没有利用排序输入数组的性质。
感谢您提供链接。它肯定了这个问题不能比O(n^2logn)时间复杂度更好地解决的事实。它的有用技巧能够告诉(可能证明)给定问题的更紧密的下界。很明显,我们可以轻松地将我的问题缩减为您的链接所指向的问题,但我们可以在空间方面做些事情。可能是我可以通过少量或没有时间交易而不使用空间而逃脱。 – Srikanth 2010-11-28 22:53:32
如果您可以随时生成矩阵,而不是将其存储起来,那么您只使用O(* n *)空间(不计算输出空间)。 – 2010-11-28 22:56:35