Algorithm 在vc++;
我正在寻找一个更好的逻辑来组合2个向量Algorithm 在vc++;,algorithm,visual-c++,vector,logic,Algorithm,Visual C++,Vector,Logic,我正在寻找一个更好的逻辑来组合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] m
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]
请帮助我找到最佳解决方案。我不确定是否正确理解了您的问题。。。但是,你是不是碰巧在找
该算法要求对范围进行排序。因此,对它们进行排序,并将它们发送到这里的
集合交叉点,这样我们很乐意为人们提供关于家庭作业问题的提示,前提是他们已经提前将问题确认为家庭作业——就像你一样:)
现在的情况是,要在向量a
中找到特定元素的匹配项,需要扫描向量B
的每个元素。因此,如果vector_A
中有m个元素,而vector_B
中有n个元素,那么查找所有匹配项将花费O(mn)时间——相当慢
假设我们对这两个向量进行排序,并相应地对mark1
和mark2
重新排序。您现在注意到的是,在vector_B
中查找特定元素时,您可以在找到过大的元素时立即停止,因为您知道后面的所有元素都必须更大。那将节省一些时间
事实上,您可以更进一步,只看向量A
和向量B
的第一个元素。让我们分别称之为a
和b
。现在,三种情况中只有一种可能发生:
a
。在这种情况下,我们可以得出结论,a
不能出现在vector_B
中的任何位置,因为所有后面的元素至少与B
一样大,后者已经太大了
a>b
。类似地,我们可以得出结论,b
不能出现在向量A
中的任何位置,因为所有后面的元素至少与A
一样大,后者已经太大了
a=b
。在这种情况下,显然这个数字出现在两个向量中李>
记住排序只需要O(nlogn)时间,这应该给您一个更快算法的提示。如果您需要更多的帮助来理解,请留下评论。当您说“更好的逻辑”时,意味着您已经有了将它们结合起来的方法。你能展示一下吗?这样我们就可以知道是否可以做得更好?这不是几小时前的一个副本吗?它获得了惊人的15张反对票?Jean:是的,这是一个精确的副本,但看起来原来的副本现在已经关闭,并且在-15,几乎没有机会得到答案。是的,问题描述很糟糕,但考虑到他/她事先就将其标记为家庭作业
,我倾向于对此表示怀疑。你的问题陈述得非常不准确——例如,“显示”一词没有任何意义。对于母语不是英语的人来说,拼写/语法错误是可以的,但是你需要理解意思,而这不是你在这里做的。幸运的是,可以从您的代码片段中推断出您真正想知道的内容。我问这个问题的方式是:“给定以下4个向量:”(后跟第一个代码片段)“我想创建以下2个向量:”(后跟第二个代码片段)也就是说,如果一个数字同时出现在向量a
和向量B
中,那么它应该出现在向量C
中,并且标记组合的相应元素应该是标记1
和标记2
中相应元素的总和