繁体   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