【问题标题】:how to group objects using tree structure (with java)如何使用树结构对对象进行分组(使用java)
【发布时间】:2011-05-03 23:38:57
【问题描述】:

这是我想要做的:

我正在制定一个计划,其中一部分应该做的是将一大群人分成若干组(给定特定数量的参与者/组)。但是,每个人必须恰好通过每个组一次(顺序无关紧要),我想尽量减少一起通过不同组的人数。

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

这可以在下面可视化(给定 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 个等)被(随机)分成偶数组,直到树的末尾(当每个参与者已通过每组一次)。我目前正在递归实施。

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

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

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

【问题讨论】:

    标签: java sorting tree grouping


    【解决方案1】:

    我认为你的描述非常好。如果我理解正确,这可能适用于研讨会或在不同站点有许多小组活动的活动,每个站点都需要每个人都做(但最好是由不同的人组成)。

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

    如果您的人员没有按组数平均分配,您总是可以只拥有一个保持不同数字的组,或者应用一些额外的逻辑来在每次移动时将奇数人移动到随机组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2021-05-04
      • 2020-02-08
      • 2021-08-11
      • 2015-10-19
      相关资源
      最近更新 更多