如何有效地枚举有限集上的所有偏序?
我想检查是否存在具有指定属性的部分订单。为了检查这一点,我将用蛮力来枚举小有限集上的所有可能的偏序。
答案 0 :(得分:12)
它们必须是非常小的有限集,才能让您的项目变得切实可行。
带有n个标记元素的带标签的posets的数量是Sloane序列A001035,其值已知为n = 18:
0 1
1 1
2 3
3 19
4 219
5 4231
6 130023
7 6129859
8 431723379
9 44511042511
10 6611065248783
11 1396281677105899
12 414864951055853499
13 171850728381587059351
14 98484324257128207032183
15 77567171020440688353049939
16 83480529785490157813844256579
17 122152541250295322862941281269151
18 241939392597201176602897820148085023
序列A000112是未标记的posets的数量;不出所料,这些数字虽然较小,但仍然迅速增长。他们似乎只知道n = 16; p 16 是4483130665195087。
Gunnar Brinkman和Brendan McKay的论文中有一个算法,列在上面链接的OEIS A000112页面的参考文献中。这项工作是在2002年完成的,使用了大约200个工作站,计算4483130665195087未标记的16号机组大约需要30个机器年(参考机器是1 GHz Pentium III)。今天,它可以更快地完成,但是p 17 的值可能大约是两个十进制数量级。