排列組合演算法

來源:互聯網
上載者:User
$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數組裡面的值全部相加

現在有一個數組,從arr數組中取出2(這個也可能是3個或者更多)個子數組,兩個數組的長度想乘得出的值放入new數組最終把new數組裡面的值全部相加,得出結果.目前我的做法是使用迴圈.有沒有什麼公式可以直接實現?

回複內容:

$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數組裡面的值全部相加

現在有一個數組,從arr數組中取出2(這個也可能是3個或者更多)個子數組,兩個數組的長度想乘得出的值放入new數組最終把new數組裡面的值全部相加,得出結果.目前我的做法是使用迴圈.有沒有什麼公式可以直接實現?

沒有什麼公式可以實現,公式其實就是演算法,演算法就可能會有迴圈

[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數組


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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.