2016-11-26 45 views
0

我想要提出一種算法,用於對固定數量的用戶進行排序和分配團隊。我發現的大多數算法都假設要劃分的組的數量;我想創建一個智能系統,在這個系統中自動分配組(盡其最大能力),並基於總用戶數和每個組的最小和最大用戶數進行預測。將用戶分爲團隊的算法(基於每個團隊的最小/最大數量)

假定每個組的標準如下:

  • 的3最低每組
  • 最大的每組6只基於用戶

這裏有總數

  • 智能分組基於總用戶數和每個組的最小/最大值的一些可能性:

    對於24個成員:

    • 4組5和1組6

    4個

  • 4組,每組4個
  • 6組爲21個成員:

    • 3組6和1組3
    • 3組5和1組6(更好的選擇)的

    對於10個成員:

    • 2組5(更好的選擇)的
    • 2組,每組3和1組4

    儘管沒有必要,但對於羣組而言,「更好的選擇」是每個羣組的用戶數量相等(例如除非不可能(例如21個成員),每個成員的5 + 5 + 5 + 6比「6 + 6 + 6 + 3」更「相等」,否則10個成員將是2個5)的組。

  • +0

    您需要更加細緻的「更好」的定義。例如。如果目標是36,那麼更好? 12組3個,9組4個,6組6個, – Gene

    回答

    0

    這裏的任何人在JS的解決方案的興趣https://jsfiddle.net/kp8d0w27/6/

    第一個循環檢查是否與會者的總數可以平分。如果可以,就這樣做。

    第二個循環只有在總數不是等分時纔會運行,並且將循環直到餘數(模)大於最小集並小於最大值。

    最後,我使用稱爲塊的Lodash函數將原始數組拆分成相等部分。

    const minNumber = 3 
    const maxNumber = 6 
    
    let divisible = false 
    let totalGroups = 0 
    let perGroup = 0 
    
    const attendees = ['chris', 'kevin', 'thomas', 'gio', 'nathan', 'michael', 'elyse', 'sarah', 'jacinthe', 'chloe', 'benoit', 'alex', 'darren', 'john'] 
    const totalAttendees = attendees.length 
    
    // Can we divide into equal groups? 
    for (let divider = maxNumber; minNumber <= divider; divider--) { 
        totalGroups = totalAttendees/divider 
    
        if (Number.isInteger(totalGroups)) { 
        divisible = true 
        perGroup = divider 
        break 
        } 
    } 
    
    // Nope, so divide teams and make sure their between our min and max 
    if (!divisible) { 
        totalGroups = 0; 
    
        for (let j = maxNumber, remainder = 0; minNumber <= j; j--) { 
        remainder = totalAttendees % j 
    
        if (remainder >= minNumber && remainder <= maxNumber) { 
         perGroup = j; 
         break 
        } 
        } 
    } 
    
    console.log(JSON.stringify(_.chunk(attendees, perGroup))) 
    

    不乾淨(並有一些我沒有考慮在這裏,就像如果參加者的數量小於最小的情況下),我還在重構,但它運作良好,並解決了我的原問題。

    0

    根據您迄今給出的標準 - 最小組大小變化 - 案例數量有限。

    • 如果目標是3,4或5的倍數,則拆分爲相等大小的組。 (我們從不需要大小爲6的組。)
    • 否則,目標是1或2(mod 3)。
      • 對於模1的情況下使用的4單個組與所有其他的是3.
      • 對於模2的情況下使用兩組4與所有其他的是3。

    注21,你離開了7組的3

    的不二選擇採用這種算法:

    • 24 - 7 - 8 3
    • 21組組3
    • 10 - 2組3,1組4(1(mod 3)情況)
    • 14 - 2 3組,2組4(2(mod 3)情況)

    也許你正在安靜地想(但不是說)你想盡量減少組數。如果這是真的,那麼你需要指出少數羣體和羣體規模變化的相對重要性。這兩個因素需要權衡。

    +0

    謝謝,請參閱我提出的解決方案。 – mousesports