java - 如何使用树结构对对象进行分组(使用java)

标签 java sorting tree grouping

这就是我正在尝试做的事情:

我正在开发一个程序,它应该做的部分工作是把一大群人分成几个组(给定特定数量的参与者/组)。但是,每个人都必须在每个组中只经过一次(顺序无关紧要),并且我想最大程度地减少一起穿过不同组的人数。

到目前为止,我已经能够创建一个树结构,它的根分支为每个组的一个节点,每个分支分支为所有其他组(父组除外)的节点,每个分支为其余组的节点(父级或父级的父级除外,等等)。

这可以在下面可视化(给出 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)

每个级别代表所有参与者的一组,并且在每个级别,每个参与者都必须属于一个组。

在我的程序中,每个人当前都表示为一个整数,存储在 ArrayList 中。整个 ArrayList 从根开始,然后在每个节点上(随机)分为偶数组(在上面的示例中,第一层 5 个组,第二层 4 个等),直到树的末尾(当每个参与者都遍历每个组一次时)。我目前正在递归地实现这个。

我无法弄清楚如何确保每个级别的每个组中的参与者数量相等(或减少一个)。当参与者的数量等于最后一层的节点总数(或其倍数)时,这很容易,但如果情况并非如此(并且在每个节点上,参与者不会均匀地划分为子节点的数量),则会变得更加棘手。

我并不是在寻找特定的代码来解决这个问题,只是想知道如何确保每个级别的组大小均匀(特别是可以与大量输入的参与者和组一起使用的解决方案)。

提前致谢,如果我完全不清楚(因为我发现很难描述我的问题),请告诉我!

最佳答案

我觉得你的描述很好。如果我理解正确的话,这可能适用于研讨会或在不同站点有许多小组 Activity 的 Activity ,每个人都需要完成每个站点(但最好是与不同的人员组合)。

我认为你可能用树使你的架构变得过于复杂。为什么不首先将人数除以组数以获得每组的适当人数(随机决定谁从哪个组开始),然后让每个组保持有关谁去过那里的状态,然后对于每个“移动”,从剩余的人中随机选择?每组总是有正确的人数,并且不会有任何重叠,并且随机性将确保人们不会只是一起从一个组移动到另一个组。

如果您的人员没有按组数均匀划分,您始终可以只让一个组保持不同的数量,或者应用一些额外的逻辑在每次移动时将奇数人移动到随机组

关于java - 如何使用树结构对对象进行分组(使用java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876955/

相关文章:

algorithm - 以特殊方式设置不相交?

algorithm - 二叉搜索树中的顺序后继

java - Leopard 中的 JConsole 在哪里

javascript - 为什么 array.sort 在 JavaScript 中不起作用?

c++ - 提高 std::sort 性能

c - C中的模拟树命令

java - 使用 ConcurrentSkipListMap 的并发测试队列

java - 当我运行程序时,我得到 "java.lang.ArithmeticException:/by zero"

java - 为什么负号打印在 $ 符号之前?

linux - 根据星期几对文件进行排序