Gale-Shapley偏好生成 我有一个C++代码,我正在努力,这让我很难堪。我已经写了一个Gale-Shapley算法。我现在正试图创建一个函数来生成所有可能的偏好组。我会尽量把这件事说清楚
假设我有三个男人和三个女人 每个男人或女人都会有一个由3个男人或3个女人组成的偏好列表 每个人可以有6个不同的列表 所以可以有6*5*4=120个不同的3人组来测试一组男性或女性。现在,由于有3名男性和3名女性,总共有120^2个不同的分组需要测试。我需要生成所有14440个选项,这样我就可以将它们传递到我的算法中,以测试我是否可以破坏它Gale-Shapley偏好生成 我有一个C++代码,我正在努力,这让我很难堪。我已经写了一个Gale-Shapley算法。我现在正试图创建一个函数来生成所有可能的偏好组。我会尽量把这件事说清楚,c++,C++,假设我有三个男人和三个女人 每个男人或女人都会有一个由3个男人或3个女人组成的偏好列表 每个人可以有6个不同的列表 所以可以有6*5*4=120个不同的3人组来测试一组男性或女性。现在,由于有3名男性和3名女性,总共有120^2个不同的分组需要测试。我需要生成所有14440个选项,这样我就可以将它们传递到我的算法中,以测试我是否可以破坏它 几天来,我一直在想如何做到这一点。有什么想法吗?谢谢 你的问题听起来像是你需要找出每个男人和女人都可以拥有的所有可能的偏好列表排列。内部嵌套循环似乎是处理此问
几天来,我一直在想如何做到这一点。有什么想法吗?谢谢 你的问题听起来像是你需要找出每个男人和女人都可以拥有的所有可能的偏好列表排列。内部嵌套循环似乎是处理此问题的好方法 比如:
// initialize men's preferences
std::vector<int> menPreferences(numMen*numWomen);
for (int i = 0; i < numMen; ++i) {
resetPermutation(menPreferences, i, numWomen);
}
// intialize women's preferences
std::vector<int> womenPreferences(numWomen*numMen);
for (int j = 0; j < numWomen; ++j) {
resetPermutation(womenPreferences, j, numMen);
}
// note that each individual preference list is currently sorted (pre-req of std::next_permutation)
// nested loops to consider all the possible permutations
// First handle men
for (int i = 0; i < numMen; ++i) {
std::vector<int>::iterator manIt = menPreferences.begin() + (i*numWomen);
do {
// Now handle women
for (int j = 0; j < numWomen; ++j) {
std::vector<int>::iterator womanIt = womenPreferences.begin() + (j*numMen);
do {
// Actually test algorithm with current preference lists
testGaleShapely(menPreferences, womenPreferences);
} while ( std::next_permutation(womanIt, womanIt+numMen) );
// Reset permutation for next iteration
resetPermutation(womenPreferences, j, numMen);
}
} while ( std::next_permutation(manIt, manIt+numWomen) );
// Reset permutation for next iteration
resetPermutation(menPreferences, i, numWomen);
}
免责声明:我在飞行中写了这篇文章,但没有测试过任何内容。它肯定有错误(任何人都可以让我知道,所以我可以修正)。不过,我希望它能给你一个好主意,告诉你如何处理这个问题。你的问题听起来像是你需要找出每个男人和女人都可能拥有的偏好列表的所有可能排列。内部嵌套循环似乎是处理此问题的好方法 比如:
// initialize men's preferences
std::vector<int> menPreferences(numMen*numWomen);
for (int i = 0; i < numMen; ++i) {
resetPermutation(menPreferences, i, numWomen);
}
// intialize women's preferences
std::vector<int> womenPreferences(numWomen*numMen);
for (int j = 0; j < numWomen; ++j) {
resetPermutation(womenPreferences, j, numMen);
}
// note that each individual preference list is currently sorted (pre-req of std::next_permutation)
// nested loops to consider all the possible permutations
// First handle men
for (int i = 0; i < numMen; ++i) {
std::vector<int>::iterator manIt = menPreferences.begin() + (i*numWomen);
do {
// Now handle women
for (int j = 0; j < numWomen; ++j) {
std::vector<int>::iterator womanIt = womenPreferences.begin() + (j*numMen);
do {
// Actually test algorithm with current preference lists
testGaleShapely(menPreferences, womenPreferences);
} while ( std::next_permutation(womanIt, womanIt+numMen) );
// Reset permutation for next iteration
resetPermutation(womenPreferences, j, numMen);
}
} while ( std::next_permutation(manIt, manIt+numWomen) );
// Reset permutation for next iteration
resetPermutation(menPreferences, i, numWomen);
}
免责声明:我在飞行中写了这篇文章,但没有测试过任何内容。它肯定有错误(任何人都可以让我知道,所以我可以修正)。不过,我希望它能为您提供一个处理此问题的好方法。嵌套循环应该可以很好地处理此问题。嵌套循环应该可以很好地处理此问题。