Variables 按顺序排列数字

Variables 按顺序排列数字,variables,numbers,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 本质上,你所拥有的是一个 一个相对简单的方法是为每个变量存储一组必须在它们之前的变量。(在您的示例中,该存储将b映射到{a},c映射到{a},d映射到{b}),然后您可以编写一个递归函数,生成由这些变量的子集(在您的示例中,

我有一些变量,比如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

本质上,你所拥有的是一个

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


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

您尝试了什么?你有代码吗?如果你还没有开始,暂时把代码放在一边,考虑一下逻辑。如果你用手和纸回答这个问题,你会继续吗?然后把你的过程转换成代码。是的,我在思考逻辑方面做了一些努力。我会给每个变量赋值。从第一个关系式a=1开始,现在b比a小,所以假设我给b分配了2。对于c也是一样,而对于d,我分配2+1=3,因此a=1,b=2,c=2,d=3,这让我想到,对于位置2,我们有2个变量,因此我可以交换它们。但是这个逻辑缺少变量d。我还认为应该使用树的概念。其中,每个子节点表示该子节点小于其父节点