假设我的原始数据是
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
它损坏了,我只有一些不完整的集合,其中的顺序是有效的,但不是所有的元素都存在。
1, 4, 6, 7, 8, 11, 12
1, 2, 4, 5, 6, 9, 10, 12
2, 4, 7, 9, 10, 11
4, 7, 9, 12
等。
我还有所有原始元素的列表,没有任何顺序。
我需要恢复尽可能多的原始数据。我不能保证我有足够的信息来恢复一切。我需要充分了解我所拥有的,并找出哪些部分是可靠的。
可能会有一些复杂的问题(但我会先解决这些问题,而不是他们):
不完全集的顺序基本上是有效的,但这里和那里可能有一些错误,这是人类写的。
我可能对不完整集合中的每一对元素都有额外的信息,比如
“5到6之间肯定没有什么东西”,
“7到12岁之间肯定还有别的事情,但我不确定到底有多少,具体是什么”,
“3到4之间可能有也可能没有”,
“7到9之间只有一个未知项”
我想把这些信息合并到算法中以恢复更多的数据。
到目前为止我最好的主意是:
在排序函数中使用不完整的数组:如果存在一个B集之前的不完整集合,则得出一个A> B。如果没有A和B都存在的集合,则返回A=B。
我不喜欢的是,我不知道哪些部分是完全修复的,哪些是随机的。为了帮助我洗牌原始元素列表,再次排序,看看哪些元素改变了位置,哪些没有。然后做几千次(列表中的元素数小于50,所以我可以使用最简单的方法来解决这个问题)
有更好的建议吗?
最佳答案
从你的不完全集合中建立有向图并使其topological sort
有些错误可能被发现为循环(有向无环图中没有循环)