java - 以较少迭代次数获得组合的算法

标签 java python algorithm breadth-first-search a-star

我正在编写一个逻辑来根据以下条件获取迭代的组合。我有处理它的工作代码。我想知道我是否可以减少它的迭代次数

A,B,C,D,E,F,G 是下例中的节点集

enter image description here

标准:

获取元素列表。
1、里面不能有重复的节点。例如.. AB 可以在那里 BA 不应该在那里 2. 不应该有对角线元素 eg.. AA,BB...

完成逻辑后,我们得到所有彩色的(不是黑色/灰色的) AB,AC,AD,AE,AF,AG,BC,BD,BE,BF,BG,CD,CE,CF,CG,DE,DF,DG,EF,EG,FG

获取迭代中的元素组 必须根据以下规则对元素进行分组以进行迭代

第一次迭代 1. 选择一个元素。让我们说AB 2. 将被拾取的元素不应该有 A 或 B 。因此可以选择CD。 3. 完成上述 2 个步骤后,我们将获得第一次迭代的元素

在第一次迭代结束时,我们会收集 AB、CD、EF

  1. 现在重复第 1 步到第 3 步以获取第 2 次迭代的元素

在第 2 次迭代结束时,我们将收集 AC、BD、EG

像这样迭代次数将完成以获得每次迭代的元素。

问题: 由于我预计元素将在 100 左右,我想知道是否有减少迭代次数的最佳方法。我希望不会有办法。但由于我们这里有算法专家,所以我需要这里的建议。

最佳答案

您可以使用 round-robin tournament algorithm

将项目放在两行中(如果数字是奇数,则空位),这里我为您的 AB/CD/EF 示例配对

A  C  E  G     
B  D  F  .
pairs  AB CD EF

固定第一个元素 (A) 并在每一步循环旋转其他项目(顺序与您的顺序不同)。最后你会得到 N-1N/2

A  B  C  E
D  F  G  .  
pairs  AD BF CG
and so on
A  D  B  C 
F  G  E  .  

A  F  D  B 
G  E  C  .  

A  G  F  D  
E  C  B  .  

A  E  G  F  
C  B  D  .  

关于java - 以较少迭代次数获得组合的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106497/

相关文章:

java - File.getAbsolutePath() 返回 null 的可能原因有哪些?

java - 如何在 Spring Boot 中使用 JWT 身份验证实现基本身份验证?

python - 在 Windows 中将 python .py 作为服务启动

python - 使用 Chardet 查找超大文件的编码

Python YAML 到 JSON 到 YAML

java - 如何使用 Java 在 Alfresco 中编辑修改和修饰符属性

java - JSOUP同时提取多个元素

algorithm - 编程算法: how evenly distribute categories across columns

javascript - 确定数字数组中高点和低点的最佳算法?

algorithm - Procrustes 分析/找到由两组 2d 点表示的两个图像之间的角度