寻找匹配元素的算法

时间:2015-10-18 16:31:36

标签: c++ algorithm

我们得到table_1:6 3 2 5 2,table_2:7 4 1 6 8,table_3:15,14,5,4,9。 table_1中的元素数等于table_2中的元素数。 如果在table_1,table_2中存在这样的元素,如果在table_3中有特定元素,则如何找到FAST:table_3 [i] = table_1 [k] + table_2 [p]。

示例:9 = table_3 [4] = table_1 [1] + table_2 [3];

我尝试了排序和binary_search算法,因此解决了这个问题:/但它仍然提供了太慢的解决方案。

1 个答案:

答案 0 :(得分:2)

你说O(nlogn)太慢了。你的意思是你的某些O(nlogn)解决方案的特定实现太慢或者O(nlogn)的任何增长都会太慢吗?如果是后者就是这种情况,那么就像我儿子所说的那样,你是骨头。

让我们从数据结构和算法分析的角度来看待这一点。如果您允许table_1和table_2保持无序,那么您将需要进行n ^ 2成对比较。因此,必须将table_1和table_2提交给某种订购流程。

由于每个元素至少需要进行一次访问,因此您无法在不到线性时间内对这两个表进行排序。有一些排序方法的最佳时间复杂度是线性的,但我认为你需要一个通用的解决方案,这意味着你在开始之前不能保证数据的状态。我认为排序是一个失败者的赌注,因为你只需要支付O(nlogn)排序成本就可以找到你需要的平均n / 2平均情况比较来检查成对总结。

现在,您可以在线性时间内创建minheaps,但table_3的大小为O(n),table_1和table_2也是如此。您仍然会输,因为您仍然需要进行n * n / 2次平均比较,以检查table_3的值与table_1和table_2中的对的组合。

此解决方案的时间限制是什么? 1毫秒,1秒?是否有一些关于数据的结构或预先知识可以允许利用数据的解决方案?如果没有,我看不到解决方案。