求演算法,重新排列數組

來源:互聯網
上載者:User

求演算法,需求是這樣的:
有幾組原始使用者(組序列A),每個組的使用者數量是不定的,每個組的用員都是不重複的,每個使用者也只在一個組中出現。
現在想重新排列成新的組序列B,新的組要求:

1.組序列B的組數量是根據組序列A中群組成員數量最高的值決定的,例如A-組1中的成員數量最多,是N個,那麼組序列B的組數量就是N。
這樣也是為了避免A組的組內成員會同時出現在同一個B組中。
2.同上解釋,A的每個組的組內成員不能出現兩個人同時出現在一個B組中的情況,為了結果公平。
3.將A組的成員按照一定演算法規則進行調換,使最終B的各群組成員數量相差<=1。

程式是php,若有大神能直接提供這個函數就更棒了,多謝!
比如:function adjust_array($arrayA) {
return $arrayB;
}

回複內容:

求演算法,需求是這樣的:
有幾組原始使用者(組序列A),每個組的使用者數量是不定的,每個組的用員都是不重複的,每個使用者也只在一個組中出現。
現在想重新排列成新的組序列B,新的組要求:

1.組序列B的組數量是根據組序列A中群組成員數量最高的值決定的,例如A-組1中的成員數量最多,是N個,那麼組序列B的組數量就是N。
這樣也是為了避免A組的組內成員會同時出現在同一個B組中。
2.同上解釋,A的每個組的組內成員不能出現兩個人同時出現在一個B組中的情況,為了結果公平。
3.將A組的成員按照一定演算法規則進行調換,使最終B的各群組成員數量相差<=1。

程式是php,若有大神能直接提供這個函數就更棒了,多謝!
比如:function adjust_array($arrayA) {
return $arrayB;
}

$arrayB = [];$max = array_reduce($arrayA,function($varA,$varB){    return ($varA>count($varB))?                          $varA:count($varB)},0);$counter = 0;$row = 0;foreach($arrayA as $arrayBefore) {    foreach($arrayBefore as $item) {        if ($counter>=$max) {            $counter = 0;            $row++;        }        $arrayB[$row][$counter++] = $item;    }}return $arrayB;

好像沒那麼複雜,你可以先統計出所有使用者數和組數,然後排一下就行了。例如5組34個人,那麼每組應該最少6個人,最多7個人,定義一個數組放置自由人,如果一個組超過7個人,多出來就放到free裡面,如果不足6個就從自由人裡面取出來補齊,如果最後自由人還有多餘的就再遍曆一次,放到6個人的組裡就好了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.