vc ++中组合两个向量的最佳方式
||
我发现结合2个向量的更好的逻辑。
vector_A[id][mark1];
vector_B[id][mark2];
vector_A: id = [300 , 502, 401 , 900 , 800 ,700 , 250 , 001]
mark1 = [55 , 50 , 30 , 28 , 25 , 11 , 04 , 03]
vector_B: id = [800 , 005 , 502 , 925 ,025 ,300 , 52]
mark2 = [75, 60 , 50 ,35 , 30 , 25 , 04]
组合规则是:如果在两个向量中找到相同的id,则将mark1和mark2相加。如果不只是显示。
vector_combined: id = [800 , 300 , 502 , 005 , 925 , 401]
mark_combine = [100, 80 , 100 , 60 , 35 ,30]
请为我提供最佳解决方案。
没有找到相关结果
已邀请:
2 个回复
墩瓣茅械
中特定元素的匹配项,您需要扫描
中的每个元素。因此,如果在
中有m个元素,在
中有n个元素,这将花费O(mn)时间来找到所有匹配项-相当慢。 假设我们对这两个向量进行排序,并分别对
和
进行重新排序。现在您注意到的是,当在
中查找特定元素时,一旦到达太大的元素就可以立即停止-因为您知道以后所有元素都必须更大。这样可以节省一些时间。 实际上,您可以更进一步,只看
和
的第一个元素。让我们分别称这些为
和
。现在只有3种情况之一可以发生:
。在这种情况下,我们可以得出结论:
不可能出现在ѭ3anywhere的任何地方,因为后面的所有元素将至少与
一样大,后者已经太大了。
。同样,我们可以得出结论:
不可能出现在ѭ2anywhere的任何地方,因为后面的所有元素都将至少与
一样大,后者已经太大了。
。在这种情况下,很明显,这个数字出现在两个向量中! 请记住,排序仅需要O(nlog n)时间,这应该为您提供一个更快算法的重要提示。如果您需要更多帮助,请发表评论。
襄挟款籍