按顺序排列数字

时间:2014-12-12 19:55:31

标签: variables numbers

我有一些变数,让我们说a,b,c,d。全部属于固定间隔[0,e] 现在我和他们之间有一些关系,比如

a > b
a > c
b > d

像这样的东西;我想制作一个打印所有可能情况的函数。

示例:

a b c d 
a c b d
a b d c
a c b d

1 个答案:

答案 0 :(得分:2)

从本质上讲,你拥有的是directed acyclic graph

一种相对简单的方法是为每个变量存储必须之前的一组变量。 (在您的示例中,此存储会将b映射到{a},将c映射到{a},将d映射到{b}。)然后,您可以编写一个递归函数,生成由这些变量的子集组成的所有有效尾部(在您的情况下,例如,子集{c,d}生成两个有效的尾部:[c,d]和{ {1}})。此递归函数检查子集中的每个变量,并确定是否已满足其先决条件。 (例如,由于[d,c]映射到b,因此包含{a}a的任何子集都无法生成以b开头的尾部。)如果是,那么它可以递归地在不包括该变量的子集上调用自己。

如果需要,您可以执行一些优化。例如,您可以使用dynamic programming来避免重复计算同一子集的有效尾部集。