use*_*247 5 random algorithm matlab sequence combinatorics
我有一排数字1:n.我正在寻找第二行也有数字,1:n但这些应该是随机顺序,同时满足以下要求:
例如,在下面
Row 1: 1 2 3 4 5 6 7 ...
Row 2: 3 6 15 8 13 12 7 ...
Run Code Online (Sandbox Code Playgroud)
数字7出现在第1行和第2行的相同位置(即位置7;因此不满足规则1)
而在下面
Row 1: 1 2 3 4 5 6 7 ...
Row 2: 3 7 15 8 13 12 2 ...
Run Code Online (Sandbox Code Playgroud)
2 + 7的组合出现两次(在第2和第7位;因此不满足规则2).
或许可以 - 但是不必要地耗费时间 - 手工完成(至少直到合理的数量),但在MATLAB中必须有相当优雅的解决方案.
这相当简单。创建节点的随机排列,但将列表解释如下:将其解释为围绕节点的随机游走,如果节点“b”出现在节点“a”之后,则意味着节点“b”出现在节点“a”下方' 在列表中:
所以如果你的初始随机排列是
3 2 5 1 4
Run Code Online (Sandbox Code Playgroud)
那么在这种情况下,3 -> 2 -> 5 -> 1 -> 4您将按如下方式创建行:
Row 1: 1 2 3 4 5
Row 2: 4 5 2 3 1
Run Code Online (Sandbox Code Playgroud)
这种随机游走将满足这两个条件。
但是您是否希望在您的网络中允许多个周期?我知道你不希望两个人拥有彼此的帽子。但是如果有 7 个人,其中3个人拥有彼此的帽子,另外4 个人也拥有彼此的帽子,那又如何呢?这是可以接受的和/或可取的吗?