2013-11-24 89 views
-1

我有以下的載體。 V = {1,2,3,4} 我想找到的所有元素對。在總我得K(K-1)/ 2雙元件。找到對元素的矢量


pairs = {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; 
} 

回答

2

下面是關於如何做到這一點的總體思路:

  • N候選人對的第一構件
  • 當構件k被選擇爲所述一對的第一個成員,有N-k候選使用兩個嵌套循環
  • 所述對的第二構件
  • 可以生成所有對
  • 可以證明總數對是N*(N-1)/2使用formula for the sum of an arithmetic progression1步驟。

這裏是你如何可以用兩個迴路做到這一點:

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 

注:上述代碼使用數學符號的時間段,其中方括號表示在區間包含相應的結束,以及圓括號表示排除相應的結尾。

+0

讓我看看。每次將數據[j]分配給** pair.second **之後,我都會將pair添加到對的向量中? –

+1

@ ring0是的,你是對的 - 我編輯了第一個循環來使用'i'。 'first!= second'的檢查是不必要的,因爲'j'從'i + 1'開始(我用間隔的數學表示法)。 – dasblinkenlight

+1

@HaniGoc是的,一旦你分配'pair.second',這一對就完成了並且可以使用。您可以將其添加到矢量中,將其打印出來,或者做任何其他您希望用這對工具執行的操作。 – dasblinkenlight