gpt4 book ai didi

java - 我有 24 件元素需要分成 6 组,每组 4 件。我可以使用什么算法来找到所有可能的组合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:12 24 4
gpt4 key购买 nike

我有 24 个独特的元素。

我需要将它们分成 6 组,每组包含 4 个项目。

考虑到顺序不相关,我可以使用什么算法迭代这 24 项的所有可能组合/分离

例如,这样的组合之一是:

ABCD-EFGH-IJKL-MNOP-QRST-UVWX

^ 因为顺序并不重要,所以这与:

DCBA-HGFE-LKJI-POMN-TSRQ-XWVU

^ 但它们不同于:

AFCD-EBGH-IJKL-MNOP-QRST-UVWX

...这是一个独特的组合。

所以重申一下:考虑到我需要将它们分成 6 组,每组 4 个,我正在尝试找出如何从 24 个项目中获得所有可能的组合。

此外,6 组的顺序也不重要。含义:“ABCD-EFGH-IJKL-MNOP-QRST-UVWX”与“EFGH-IJKL-MNOP-QRST-UVWX-ABCD”相同

注意:帮助在 Java 中实现它会很棒。

谢谢!

编辑:

解决方案怎么样:

(1) 我首先尝试找到给定 24 个项目的所有可能的四组。(2) 然后我找到所有可能的六组,给定 #1

产生的组

想法?

最佳答案

解决此类问题的一个常见角度是为每个要枚举的对象定义规范表示,然后使用递归和修剪。对于您的特定问题,让我们规定规范表示对每个组中的字母以及组本身进行排序。使用递归,我们以所有可能的方式执行以下操作。把A放在第一组。将 B 放在第一组或第二组中。如果 A 和 B 在一起,则将 C 放在第一组或第二组。如果 A 和 B 分开,则将 C 放在第一、第二或第三组中。通常,将每个连续的字母放在一个已经有字母的组中,或者放在第一个空组中。

python :

def combinations(unassigned, groupcountmax, groupsizemax, groups=()):
if not unassigned:
yield groups
else:
x, unassigned1 = unassigned[0], unassigned[1:]
for i, group in enumerate(groups):
if len(group) < groupsizemax:
yield from combinations(unassigned1, groupcountmax, groupsizemax,
groups[:i] + (group + x,) + groups[i+1:])
if len(groups) < groupcountmax:
yield from combinations(unassigned1, groupcountmax, groupsizemax,
groups + (x,))

将 24 个项目枚举成 6 组 4 将需要相当长的时间,因为它们有 24!/(6! (4!)^6) ~ 4.5e12。

关于java - 我有 24 件元素需要分成 6 组,每组 4 件。我可以使用什么算法来找到所有可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com