考虑以下问题:
我们有两个货物装载序列,可以包含谷物或牛。现在,我们还有一系列货物载荷,我们希望从初始序列中获得。
初始序列可能看起来如下,我们想要实现的序列显示在右侧:
C G
G C
C G G
C C C
G G G
\ /
?
现在,在?
点,可以选择左侧货物装载或右侧货物装载。应该进行拣选以匹配所需的最终序列。
例如,我们应该在开头选择Grain
,然后图片就会变成这样:
G
C C
G G G
С C C
С G G
\ /
? ---> G (we took it from the left)
那么,这个问题有一个众所周知的名字吗?我意识到这可以通过一个简单的动态编程算法来解决,但我想知道更多。
基本上,如果还有更多关于这个问题的内容,我想阅读它。 例如,如果我们有无限数量的有限输入序列,我对算法的复杂性没有任何想法。
答案 0 :(得分:2)
正式语言理论家会将你的问题描述为测试字符串w是否是shuffle两个字符串u,v。似乎已经对识别用shuffle构造的语言的复杂性进行了一些研究(例如,无上下文语言和常规语言的混合是无上下文的。)
答案 1 :(得分:2)
我没有太多的见解可以分享,但现在是:
让我们调用货物0和1而不是C和G,而且,让我们标记两个队列0和1而不是左右。
首先,无法用无限(流)输入序列解决算法。如果两个输入序列只有0,那么在“流可见性窗口”之外只有1,如果你的结果序列需要它,你不能瞄准这个1,所以你可能会被卡住,而有一个答案。
由于我们不能谈论无穷大,让我们分析解算器的复杂性。我看不到比你的算法好多了......如果结果序列的长度为m,我们将结果模型化为0和1的序列(对于右和左),则有2 ^ m个可能的解。如果我们在每一步都考虑平均,那么只有一个输入序列有效,其中两个输出序列中有一个机会,这意味着另一个序列将无效以及其他后续序列。这应该导致O(m!)的复杂性。