我们说我有两组数字,我想在其中构建所有对的值。例如:
A = {1, 2}
B = {3, 4}
Out = {(1,3), (1,4), (2,3), (2,4)}
我的设置在O(1)中有一个查找时间。应该可以在O(| A | + | B |)中计算我的输出,如果这些集不具有相同的大小但是我找不到任何解决方案[简单的解决方案将是两个foor循环但是这在O(n ^ 2)]。你能否告诉我如何以给定的复杂度计算出来?
答案 0 :(得分:2)
不,你不能比两个for循环更好。想一想这个。对于A中的每个元素,您必须输出B元素。所以你的运行时间总是A * B的一些倍数。
让我们修改上面的例子,让A有3个元素
A = {1, 2, 3}
B = {3, 4}
Out = {(1,3), (1,4), (2,3), (2,4), {3,3}, {3,4}}
所以你有6个输出元素和初始集| A | = 3和| B | = 2.您声称您的输出应为| A | + | B |因此,你最初的假设是不正确的。
您最好的优化是确保您可以在每个元素的O(1)时间内枚举集合的元素。