簡體   English   中英

如何使用樹結構對對象進行分組(使用java)

[英]how to group objects using tree structure (with java)

這是我正在嘗試做的事情:

我正在開發一個程序,它應該做的一部分是把一大群人分成若干組(給定特定數量的參與者/組)。 但是,每個人必須恰好通過每個組一次(順序無關緊要),我想盡量減少一起通過不同組的人數。

到目前為止,我已經能夠創建一個樹結構,它有一個根分支到每個組的一個節點,每個組都分支到所有其他組(父組除外)的節點,每個分支到節點其余組(除了父母,或父母的父母等)。

這可以在下面看到(給定 5 個組——A、B、C、D、E):

Level 1:    A         B         C           D          E  
Level 2: B C D E   A C D E   A B D E     A B C E    A B C D  
Level 3 (for node E only) :                     BCD ACD ABD ABC  
etc. (with n levels for n groups)

每個級別代表所有參與者的一個分組,並且在每個級別,每個參與者都必須在一個組中。

在我的程序中,每個人當前表示為 integer,存儲在 ArrayList 中。 整個 ArrayList 從根開始,然后在每個節點(在上面的示例中,第一級 5 個組,第二級 4 個等)(隨機)分成偶數組,直到樹的末尾(當每個參與者已通過每組一次)。 我目前正在遞歸地實現這一點。

我無法弄清楚的是如何確保每個級別的每個組中的參與者數量相等(或相差一個)。 當參與者的數量等於最后一層的節點總數(或其倍數)時,這很容易,但如果不是這種情況,則變得更加棘手(並且在每個節點上,參與者不會均勻地分成子節點的數量)。

我不是在尋找解決這個問題的特定代碼,只是關於如何確保每個級別的組大小均勻的想法(特別是一個可以與廣泛輸入的參與者和組數量一起工作的解決方案)。

提前感謝,如果我不清楚,請告訴我(因為我發現很難描述我的問題)!

我覺得你的描述很不錯。 如果我理解正確,這可能適用於研討會或在不同站點有許多團體活動的東西,每個人都需要做每個站點(但最好是與不同的人混合)。

我認為您可能過度使用樹來復雜化您的架構。 為什么不首先將人數除以組數以獲得每組的適當人數(隨機決定誰從哪個組開始),然后讓每個組維護 state 關於誰去過那里,然后是每個“移動” ,從剩下的人中隨機 select? 每個組總是有正確的數字,並且不會有任何重疊,隨機性將確保人們不會只是從一個組移動到另一個組。

如果您的人員沒有按組數平均分配,您總是可以只擁有一個保持不同數量的組,或者應用一些額外的邏輯在每次移動時將奇數人移動到隨機組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM