对候选人进行排名的最好、最有效的方法是什么?

what is the best, efficient approach to rank the candidates

本文关键字:有效 方法 是什么 候选人      更新时间:2023-10-16

有N名候选人报名回答一系列选择题。设计一个有效的方法来评估答案并对候选人进行排名。

vector <string> Evaluate (const string& answer, const vector<string>& param)
{
    // answer - will have the answer for multiple choice question.
    // like X X X X X where each X is a capital letter (A-D)
    // (e.g) A B A C D
    // param will have candidate name followed by his/her answer
    // (e.g) param[0] - "Foo A C A C D"
    // param[1] - "Bar D D A C B"
    // return candidates name with highest % of mark in result[0], 
    // next highest in result[1] and so on.
}

我能想到的一种方法是,将答案标记化&参数化并比较它。但我在寻找更好的方法。有什么建议吗?

PS:这不是家庭作业。在topcoder

中遇到这个问题

如果假设答案之间有一个空格,则可以计算单个候选人的分数而不需要标记化。首先,搜索要跳过的第一个空格,然后将剩下的字符串传递给以下函数

int compute_score(const string& answer_key, const char answer[])
{
  int score = 0;
  for (unsigned i = 0; i < answer_key.size(); i+=2) {
    score += answer[i]==answer_key[i];
  }
  return score;
}

一种解决方案是检查所有候选人并按0 - 5的等级对他们的答案进行评分,其中0为完美,1为错误,等等。评分后,将其插入列表中。然后,在对所有候选人进行评分后,按等级对列表进行排序(或在插入它们时对它们进行排序)。

或者,您可以在添加它们时将它们添加到二叉搜索树中。这可能比将它们插入列表并排序要快。

另一个想法是使用静态变量来存储到目前为止百分比最高的候选对象的名称。如果学生的百分比高于当前候选人,则在进一步的函数调用时使用学生的名字更新静态变量的值,最后,得分最高的学生将在静态变量中显示该值。

如果您不想要所有候选人的列表%,并且也有使用静态变量的权限,这将是一个更好的解决方案。