作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
编辑 1 -自从发布后我了解到基本问题是关于如何找到笛卡尔积(现在去谷歌),但不仅因为我不想要每个烫发,我想找到使用相同子数组的笛卡尔积每次排列的关键永远不会超过一次,我的“额外”问题更多地是关于如何最大限度地减少笛卡尔积所需的工作量(我不得不说,接受小的错误率)-
想象一下......我有四个厨师和四个食谱,每个厨师对每个食谱都有一个分数,今天我希望每个厨师做一道菜(但没有一道菜应该做两次)并且决定应该基于最好的(最高总分)所有四个的排列(所以也许一个厨师不会做出他个人的最好成绩)。
我已将数据放入多维数组中
array(
array (1,2,3,4),
array (35,0,0,0),
array (36,33,1,1),
array (20,20,5,3)
)
最佳答案
抱歉,但这将更多地是逻辑布局而不是代码......
我不太清楚数组(1,2,3,4)是第一道菜还是第一道菜的分数,但我可能会使用这样的数组
$array[$cook_id][$dish_number] = $score;
$array['a'] = array(0=>100, 1=>50, 2=>0); // cook a prefers 0 over 1 with weight 50, over 2 with weight 100
$array['b'] = array(0=>100, 1=>100, 2=>50); // cook b prefers 0,1 over 2 with weight 50
$array['c'] = array(0=>50, 1=>50, 2=>100); // cook c prefers 2 with weight 50
$array['a'] = array(0=>75, 1=>50, 2=>0);
$array['b'] = array(0=>100, 1=>50, 2=>50);
$array['c'] = array(0=>100, 1=>25, 2=>25);
$array['a'] = array(0=>200, 1=>148, 2=>148, 3=>0);
$array['b'] = array(0=>200, 1=>149, 2=>0, 3=>0);
$array['c'] = array(0=>200, 1=>150, 2=>147, 3=>147);
$array['d'] = array(0=>69, 1=>18, 2=>16, 3=>15);
// a totally uneducated guess...
$picks = array(0=>'a', 1=>'b', 2=>'c', 3=>'d');
do {
$best_change = false;
$best_change_weight = 0;
foreach ($picks as $dish1 => $cook1) {
foreach ($picks as $dish2 => $cook2) {
if (($array[$cook1][$dish1] + $array[$cook2][$dish2]) <
($array[$cook1][$dish2] + $array[$cook2][$dish1]))
{
$old_score = $array[$cook1][$dish1] + $array[$cook2][$dish2];
$new_score = $array[$cook1][$dish2] + $array[$cook2][$dish1];
if (($new_score - $old_score) > $best_change_weight) {
$best_change_weight = $new_score - $old_score;
$best_change = $dish2;
}
}
}
if ($best_change !== false) {
$cook2 = $picks[$best_change];
$picks[$dish1] = $cook2;
$picks[$dish2] = $cook1;
break;
}
}
} while ($best_change !== false);
[a1] a2 a3
b1 [b2] b3
c1 c2 [c3]
a1 [a2] a3
b1 b2 [b3]
[c1] c2 c3
关于php - 受限笛卡尔积计算 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231244/
我是一名优秀的程序员,十分优秀!