排列组合算法

WBOY
Freigeben: 2016-06-06 20:20:42
Original
1234 Leute haben es durchsucht

<code>$arr = [
    'a'=>[0,1,2,3],
    'b'=>[0,1,2,3,6,7],
    'c'=>[1,2,3,4,7,8,9],
    'd'=>[6,8,1,3,5]
];
//上面组成的新数组:
$new = [
    count($arr[a]) * count($arr[b]),
    count($arr[a]) * count($arr[c]),
    count($arr[a]) * count($arr[d]),
    count($arr[b) * count($arr[c]),
    count($arr[b) * count($arr[d]),
    count($arr[c) * count($arr[d])
];
//最后把new数组里面的值全部相加</code>
Nach dem Login kopieren
Nach dem Login kopieren

现在有一个数组,从arr数组中取出2(这个也可能是3个或者更多)个子数组,两个数组的长度想乘得出的值放入new数组最终把new数组里面的值全部相加,得出结果.目前我的做法是使用循环.有没有什么公式可以直接实现?

回复内容:

<code>$arr = [
    'a'=>[0,1,2,3],
    'b'=>[0,1,2,3,6,7],
    'c'=>[1,2,3,4,7,8,9],
    'd'=>[6,8,1,3,5]
];
//上面组成的新数组:
$new = [
    count($arr[a]) * count($arr[b]),
    count($arr[a]) * count($arr[c]),
    count($arr[a]) * count($arr[d]),
    count($arr[b) * count($arr[c]),
    count($arr[b) * count($arr[d]),
    count($arr[c) * count($arr[d])
];
//最后把new数组里面的值全部相加</code>
Nach dem Login kopieren
Nach dem Login kopieren

现在有一个数组,从arr数组中取出2(这个也可能是3个或者更多)个子数组,两个数组的长度想乘得出的值放入new数组最终把new数组里面的值全部相加,得出结果.目前我的做法是使用循环.有没有什么公式可以直接实现?

没有什么公式可以实现,公式其实就是算法,算法就可能会有循环

<code><?php $arr = [
    'a'=>[0,1,2,3],
    'b'=>[0,1,2,3,6,7],
    'c'=>[1,2,3,4,7,8,9],
    'd'=>[6,8,1,3,5]
];

$arr_len = array();
foreach($arr as $item) {
    $arr_len[] = count($item);
}
// 以上循环可以统计字数组的长度

$res = 0; // 要输出的结果
$c_arr_len = $arr_len;
foreach($arr_len as $k1=>$v1) {
    unset($c_arr_len[$k1]); // 处理了一个数之后删除
    if(count($c_arr_len)>0) {
        foreach($c_arr_len as $k2=>$v2) {
            $res += ($v1*$v2);
        }
    }
}
var_dump($res);//得到结果,其实不需要产生你那个$new数组</code>
Nach dem Login kopieren


2*(a1*a2 + a1*a3 + ... + a2*a3 ...) === ( a1 + a2 + a3 + ... )**2 - (a1**2 + a2**2 + ...)
然後你可以用map和reduce來避免寫循環
但是計算複雜度不變的, 還是n^2

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage