例如,
A = [A,B,C,d]
B = [1,2,3,4]
我的问题是:如何生成合并A和B的所有可能方法,以便在新列表中我们可以在 b 之前出现 a , b 出现在 c 之前, 1 出现在 2 之前, 2 出现在 2 之前强> 3 下,等等。?
我可以想到一个实现:
我们从8中选择4个时段,然后对于每个可能的选择,有两种可能的方式 - 第一个或B优先。
我想知道有更好的方法吗?
编辑: 我刚刚学会了一种更直观的方法 - 使用递归。 对于每个点,有两种可能的情况,取自A或取自B;继续递归,直到A或B为空,并连接剩余的。
答案 0 :(得分:0)
如果相对顺序不同于排序列表的构成(假设它是,因为否则它不会成为问题),那么您需要形式化初始顺序。多种方法。最容易记住每个列表中每个元素的索引。示例:在第一个数组[...]
中a的有效位置为1然后你可以继续加入列表,然后生成所有元素的排列。任何有效的排列都是保持新索引与您存储的顺序的顺序关系的排列 一个有效置换数组的示例 a12b3cd4 你可以知道并检查这是否是有效的排列,因为元素'a'的索引小于b的索引,依此类推。并且您知道索引必须更小,因为这是您在第一步中制定的
simmilarly一个无效的排列数组 ba314cd2,同样的检查方式