从愿望清单中获得最佳分配[关闭]
Posted
技术标签:
【中文标题】从愿望清单中获得最佳分配[关闭]【英文标题】:Getting best possible allocation out of wish list [closed] 【发布时间】:2020-08-02 09:57:57 【问题描述】:首先:很抱歉我的英语不好,希望你能理解我的要求。
在我的学校,毕业生必须在最后一年为论文选择一个主题。每个学生从一个学科领域中选择一位导师来帮助他们。
起始位置
每个学生必须准确指定三个愿望,这些愿望按偏好降序排列。示例:1. 乔布斯先生 / 2. 盖茨先生 / 3. 马斯克先生 每位导师最多可指导三名学生如何确保尽可能多的学生实现他们的第一个愿望?在剩下的学生中,尽可能多的应该得到第二个愿望,其余的应该得到第三个愿望。
哪种编程语言最适合解决这个问题:php、Access、Excel?
到目前为止,我们在一个需要几个小时的过程中手动对愿望进行排序。有时几天。
我们希望自动化这个过程。非常感谢每一个想法、每一种方法、每一个提示。
理想情况:我们有一个显示导师和分配给他们的学生的列表。
示例:
先生工作 -> Stacy、Carl、Melody 先生盖茨 -> 威廉、埃里克、夏洛特 先生马斯克 -> 安东尼、莎拉、耐莉祝你身体健康!
【问题讨论】:
不依赖于任何编程语言,它只需要一个算法,我确信现实世界中有一种算法可以解决这类问题。类似knapsack
【参考方案1】:
如果你正确格式化输入数组,这段 php 会做到这一点..
$preferencesOfStudents 是学生,按顺序排列他们喜欢的老师。
function shuffle_assoc($list)
if (!is_array($list)) return $list;
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key)
$random[$key] = $list[$key];
return $random;
$preferencesOfStudents = [
'students' => [
'Stacy' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Carl' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Melody' => ['Mr Jobs','Mr Musk','Mr Gates'],
'William' => ['Mr Musk','Mr Gates','Mr Jobs'],
'Eric' => ['Mr Gates','Mr Jobs','Mr Musk'],
'Charlott' => ['Mr Jobs','Mr Gates','Mr Musk'],
'Anthony' => ['Mr Gates','Mr Musk','Mr Jobs'],
'Sarah' => ['Mr Gates','Mr Jobs','Mr Musk'],
'Nelly' => ['Mr Gates','Mr Musk','Mr Jobs']
]
];
// 1 = Jobs, 2 = Gates, 3 = Musk
$teachers = [
'Mr Jobs' => [],
'Mr Gates' => [],
'Mr Musk' => []
];
$randomstudentsarray = shuffle_assoc($preferencesOfStudents['students']);
//print_r($randomstudentsarray);
foreach($randomstudentsarray as $name => $student)
if(count($teachers[$student[0]]) < 3)
$teachers[$student[0]][] = $name;
elseif(count($teachers[$student[1]]) < 3)
$teachers[$student[1]][] = $name;
else
$teachers[$student[2]][] = $name;
print_r($teachers);
【讨论】:
谢谢。我稍后会试试这个。然后让你知道它是否有效。 它有效。非常感谢你。不幸的是,我忘了提一些事情,但我会尽力解决它。 也许你能帮忙? ***.com/q/63225518/4421892以上是关于从愿望清单中获得最佳分配[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 C 中从用户那里获得 *secure* 输入的最佳方式是啥?