阵列最佳匹配

时间:2015-02-10 21:45:46

标签: c++ arrays algorithm

你被要求为婚姻局写一个比赛制作计划。 beaureau的问卷有8个陈述,申请人以1到5的等级表示她或他的同意程度。申请人的回答是通过键盘输入的。每个回复都包含申请人的代码,性别(F或M)和&回答问卷(8个整数)。 您可以假设申请人数不超过50人。你的程序应该匹配每个人与3个最相容的异性人,并且应该打印代码号。申请人和代码号预期申请人。

我想通过c ++实现这一点。这有什么匹配的算法吗?或者有一些简单的方法。如果你写完整个函数,对我来说会很好。

抱歉,如果问题很简单bcs我是学习者。

2 个答案:

答案 0 :(得分:0)

根据我们上面的评论,我会发布一些评论以帮助您入门。但请记住,最好的事情是自己尝试一些事情,然后再获得帮助......

int questionnaire_answers[50][8]; // 2D array holding answers
int sex[50];                      // 1D array holding sex of those who answered

int i, j;
int index = 0;
int best = 999999;
int distance;

// We look for the best match for the first person
for (i = 1; i < 50; i++)
{
    if (sex[0] != sex[i])
    {
       // Calculate the distance from index 0 to index i
       // See note below
       distance = 0;
       for (j=0 ; j < 8; j++)
       {
          distance = distance + abs(questionnaire_answers[0][j]-questionnaire_answers[i][j]);
       }
    }
    else
    {
       distance = 999999;
    }
    if (distance < best)
    {
       best = distance;
       index = i;
    }
}

// Now index holds the index of the best match

我会留给你弄清楚如何找到第二和第三个最佳匹配:)

重要: 我使用了简单的线性距离计算。在现实世界中,你可能会用更复杂的东西做得更好。数学世界有几个不错的选择,例如:至少/最小均方

玩得开心!

答案 1 :(得分:0)

您可以使用Cosine Correlation。首先对50X8矩阵进行归一化,使每列的均值= 0,标准差= 1。现在对于每个记录(行),计算与每个其他记录的余弦相关性。给出最大余弦相关性的记录将与此记录匹配。