在Vector中查找元素对

时间:2013-11-24 16:58:15

标签: c++ algorithm

我有以下矢量。 V = {1,2,3,4} 我想找到所有元素对。总的来说,我会有 K(K-1)/ 2 元素。


对= {1,2},{1,3},{1,4},{2,3},{2,4},{3,4}。

Formula: K(K-1)/2 = 4(4-1)/2 = 6 pairs

该算法的伪代码应该是什么。


感谢dasblinkenlight的帮助。我编写了代码,它可能有助于未来:

伪代码:dasblinkenlight

for i in [0..N)
    pair.first = data[i]      // Set the first element
    for j in (i..N)
        pair.second = data[j] // Set the second element

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    typedef pair<int,int> pairs;
    pairs p;
    vector<pairs> pVec;
    for(size_t i = 0; i < v.size();i++)
    {
        p.first = v[i]; // Set the first element
        for(size_t j = i+1; j < v.size();j++)
        {
            p.second = v[j];// Set the second element
            pVec.push_back(p); // Add p to vector
        }
    }

    // Print pairs 
    for(size_t i = 0; i < pVec.size();i++)
    {
        cout <<"{"<< pVec[i].first <<"  "<<pVec[i].second <<"}" <<", ";
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

以下是关于如何操作的一般想法:

  • 该对的第一个成员有N个候选人
  • 当成员k被选为该对中的第一个成员时,该对的第二个成员有N-k个候选人
  • 您可以使用两个嵌套循环
  • 生成所有对
  • 您可以N*(N-1)/2使用1步骤for i in [0..N) pair.first = data[i] // Set the first element for j in (i..N) pair.second = data[j] // Set the second element 来证明对的总数为{{1}}。

以下是使用两个循环的方法:

{{1}}

注意:上面的代码使用数学符号表示区间,其中方括号表示在区间中包含相应的结尾,圆括号表示排除相应的结尾。