【发布时间】:2018-07-02 18:11:16
【问题描述】:
我有一个初始数组s0,我复制了两次,分别给出s1 和s2。现在 s1 和 s2 由于并发插入而分道扬镳。
我知道s1 是通过将一个字符插入s0(在随机位置)获得的。同样,s2 派生自 s0 和随机插入。但是,我无法再访问s0。
我如何将s1 和s2 组合起来,就好像这两个添加都发生在s0 的相应位置上一样。
举个例子:
s0 = [1, 4, 9, 11]
s1 = [1, 4, 11, 9, 11]
s2 = [1, 3, 4, 9, 11]
-----
s3 = merge(s1, s2) = [1, 3, 4, 11, 9, 11]
(如果s1和s2都是通过在同一索引处插入一个字符获得的,我不管它们在s3中的顺序是什么,都是有效的)
因为我知道s1 和s2 正好有两个不同,所以我首先搜索第一个不同的索引。
var i = 0;
while (s1[i] === s2[i]) i++;
现在我知道第一个区别在索引i,但我无法确定s1[i] 是否是添加的字符(因此,必须在索引@987654344 处添加到s2 @) 或者 s2[i] 是添加的字符。
【问题讨论】:
-
“但是,我无法再访问
s0” 这怎么可能?更重要的是,如何验证结果? -
我想也许既然您知道确切有两个差异,我们可以确定共同部分并在共同路径之间插入字符?类似的东西:)
-
@guest271314 这是在研究最终一致性的背景下,解释一切都太复杂了。所以接受我们不知道原始状态
s0。 -
@HyperZ 不,它不会“太复杂”。您是否试图复制新的(对于那些“接受”的人来说是强制性的)“芯片”借记卡/信用卡的功能?也就是使用量子密码学?
-
我认为这个问题与 JavaScript 没有太大关系。如果您知道该算法并且在实现它时遇到了困难,那就可以了,但这似乎与语言无关。
标签: javascript arrays