从愿望清单中获得最佳分配[关闭]

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* 输入的最佳方式是啥?

获得快速准确位置的最佳方式[关闭]

如何从 Steam 中的其他个人资料中获取愿望清单数据?

Magento 删除愿望清单中的产品

如何从 Magento 2.0 Luma 模板中删除“我的愿望清单”和“比较产品”块?

如何使用 PyQt 获得最佳外观? [关闭]