【发布时间】:2019-02-09 19:38:47
【问题描述】:
我正在尝试为我和妻子之间的家务任务构建一个简单的“任务分配器”。虽然这个概念在工作中也非常有用,所以我需要好好学习它。
我的哈希表:
$Taches = @{
"Balayeuse plancher" = 20
"Moppe plancher" = 20
"Douche" = 15
"Litières" = 5
"Poele" = 5
"Comptoir" = 5
"Lave-Vaisselle" = 10
"Toilette" = 5
"Lavabos" = 10
"Couvertures lit" = 5
"Poubelles" = 5
}
所有项目的总价值为 105(分钟)。 所以我们每个人大约 50 分钟把它分成两部分。
我的目标:
我想从该哈希表中选择随机项目并构建两个不同的哈希表 - 一个用于我和我的妻子,每个的总价值为 50(所以这是公平的)。例如 20+20+10 或 5+5+5+15+20 等。困难的部分是必须在两个哈希表之间考虑所有任务,并且它们只能在每个哈希表中出现一次(没有用把同一件东西清洗两次!)。
最好的选择是什么?
现在我成功地实现了一个总值为 50 的随机哈希表,如下所示:
do {
$Me = $null
$sum = $null
$Me = @{}
$Me = $Taches.GetEnumerator() | Get-Random -Count 5
$Me | ForEach-Object { $Sum += $_.value }
} until ($sum -eq 50)
结果示例:
名称 值 ---- ----- 普贝尔 5 Balayeuse 刨床 20 冲洗 15 普尔 5 香水 5它有效,但男孩觉得这是一种迂回和弯曲的做法。我确定有更好的方法吗?另外,我缺少重要的东西。所有任务都必须考虑在内,并且不能出现两次。这虽然一开始看起来很简单,但相当复杂!
【问题讨论】:
-
你在这里得到的被称为Bin packing problem。请参阅Basic Analysis of Bin-Packing Heuristics,其中包含著名求解算法的伪代码。相关问题:Splitting a folder in smaller ones with a certain size
标签: powershell random max hashtable