$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