【问题标题】:Reconstruct superset from random ordered subsets从随机有序子集重建超集
【发布时间】:2019-11-16 01:08:41
【问题描述】:

如果我们有保持超集顺序的随机样本(例如,a 在之前b),但不一定由超集中的连续元素构成(样本可以包含孔,例如 {a, c, d})?此外,样本大小可以是任何大于或等于 2 的长度(1 的样本长度不能保持顺序),但我们假设在单次计算期间样本长度保持不变(没有可变长度数据)。

例如,简单的情况是 {a, b, c}, {c, d, e} 和 {e, f, g},较难的情况是 {a, f, g}, { b, e, f}, {c, d, e} 等...

这种算法的限制是什么,例如。给定超集的大小和样本长度,需要的最小样本数?什么时候数据无法重构?等等

【问题讨论】:

  • 用浏览器搜索“拓扑排序”。这可能是获得有效答案的跳板。是的,只要子集中有足够的信息,您就可以做到。
  • 不就是所有子集的排序联合吗?
  • 不完全是,union 不保证顺序。这将是一个子集,某种顺序提取联合

标签: algorithm sorting set combinatorics


【解决方案1】:

您可以遍历子集并使用每个子集中包含的信息来构建有向图。如果该图包含超集的所有元素,并且该图只有一条通过所有元素的路径,那么该路径就是超集的顺序。

实际上,将有序子集 {a,b,c} 中的信息添加到有向图时,需要遵循以下三个规则:

  • 添加边 a→b 和 b→c,但不添加 a→c。
  • 如果已经存在从 a 到 b 的路径,例如a→x→y→b,则不加边 a→b。
  • 如果有一条边 x→y,添加边 a→b 会创建一条从 x 到 y 的附加路径,例如x→a→b→z→y,然后删除边缘x→y。

例子:

假设对于超集 {a,b,c,d,e,f,g,h,i,j,k,l},我们已将来自多个子集的信息添加到图中,并到达在这种情况下:

下一个子集是 {b,g,h,k}。已经有一条从 b 到 g 和从 h 到 k 的路径,所以我们不添加边 b→g 或 h→k。我们添加的边是g→h:

我们现在已经创建了一条从 e 到 h 的附加路径,e→g→h,因此我们删除了边 e→h。我们还创建了一条从 f 到 h 的附加路径,f→g→h,所以我们去掉边 f→h,得到:

从子集 {b,g,h,k} 中添加信息简化了图,我们现在知道元素 g 是有序超集中的第七个元素,因为从起始元素 a 和 b 到结束元素 k 的所有路径我穿过它,六个元素来到它之前。

(注意所有路径经过的元素:c、g、j,将图分成四个子图:abc、cdefg、ghij和jkl,然后可以单独考虑,例如找边的时候在向该子图中添加新边后删除。)

要知道超集的顺序,我们需要来自其他子集的信息,以将图形简化到所有元素都只有一条路径:


具有 N 个元素的超集有 2N 个唯一的有序子集;如果您知道所有这些子集,则可以确定您知道超集的顺序。如果您删除了包含两个相邻元素 x 和 y 的所有子集,则将不再知道这两个元素的顺序。所以在最坏的情况下,你需要 2N - 2N-2 + 1 个子集来知道超集的顺序。

在最好的情况下,您只需要一个与超集相等的子集即可知道超集的顺序。 (而且,正如您在问题中提到的,一个子集的最后一个元素是下一个子集的第一个元素的子集链是这种最佳情况的扩展。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2016-01-24
    相关资源
    最近更新 更多