Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在vc++;_Algorithm_Visual C++_Vector_Logic - Fatal编程技术网

Algorithm 在vc++;

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

我正在寻找一个更好的逻辑来组合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]

请帮助我找到最佳解决方案。

我不确定是否正确理解了您的问题。。。但是,你是不是碰巧在找


该算法要求对范围进行排序。因此,对它们进行排序,并将它们发送到这里的
集合交叉点

,这样我们很乐意为人们提供关于家庭作业问题的提示,前提是他们已经提前将问题确认为家庭作业——就像你一样:)

现在的情况是,要在
向量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
    中相应元素的总和