gpt4 book ai didi

生成所有大小为 n 的预购订单/弱订单的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:44 25 4
gpt4 key购买 nike

我正在寻找一种半途有效的算法,给定一个输入集,从中生成所有总预序关系(或者,等价地,所有弱顺序)。也可以称其为n个标记元素的所有优先安排。

我已经尝试通过首先生成所有大小为 n 的排列,然后用“~”折叠这些排列的子序列来实现这一点,但是由于重复很多,这是非常低效的,而且我也错过了一些结果。大小由 Fubini 编号 1、1、3、13、75、541、4683、47293、545835 ……(OEIS 编号 A000670)给出,并且随着 n 的增加而快速增长。我只需要前几个,比如说,直到 n=8。

示例:对于 A={a, b, c} 且 n=3,结果是 13 个预订单:

b>a>c, b>a~c, b>c>a, b~c>a, c>b>a, c>a~b, c>a>b, a~c>b , a>c>b, a>b~c, a>b>c, a~b>c, a~b~c

最佳答案

不难。在 Python 3 中:

import itertools

def weakorders(A):
if not A: # i.e., A is empty
yield []
return
for k in range(1, len(A) + 1):
for B in itertools.combinations(A, k): # i.e., all nonempty subsets B
for order in weakorders(set(A) - set(B)):
yield [B] + order

调用,例如 list(weakorders(range(8)))

关于生成所有大小为 n 的预购订单/弱订单的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32694444/

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