【问题标题】:Finding unique sequences in large arrays在大型数组中查找唯一序列
【发布时间】:2015-07-09 20:53:39
【问题描述】:

对于如下所示的给定位数组(x 为 1,. 为 0),我们有一个现有的算法来确定每一行是唯一的:

XXX...
X.XXXX
XX..X.
.XX...

但是,如果行数非常大,性能会受到影响。如果数组有 100 万行,谁能提出更好的算法来找到这些唯一的行序列?

换句话说,这些行:

XXX...
X.XXXX
XX..X.
.XX...
XXX...
X.XXXX
XX..X.
.XX...
XXX...
X.XXXX
XX..X.
.XX...

无论数组高度有多大,都将始终在第一个数组中显示序列?

【问题讨论】:

  • 它应该是相当简单的 IIRC:取任何行。假设它出现在位置 4 并在 4 之后第一次在位置 55 重复。检查位置 5 和 56 中的行是否相同,所以直到到达与 4 相同的行。重复此操作直到数组结束。
  • 您可以使用 linq group by 来完成。另外,也许您可​​以包括如何定义您的数组是 string[]char[][],这有助于我们稍微了解您所拥有的而不是猜测。
  • @user1952500 这非常简单而且完全没有效率我正在寻找这方面的好算法
  • 对于六个元素宽且每个元素只能有两个可能值的数组,该数组只有 64 个可能的选项。如果你有 100 万个,它们不可能都是独一无二的。
  • 而且,不,这个问题根本不清楚。最后一句中对“第一个数组”的引用缺乏足够的上下文。我们遗漏了部分问题。

标签: c# arrays algorithm analysis


【解决方案1】:

假设位数组不太长,我会这样做:

  1. 将每个位数组转换为数字。
  2. 创建HashSet<int>
  3. 将每个数字放入哈希集中。如果Add 返回false,则该数字不是唯一的

现在,您可以从哈希集中删除该数字,也可以使用非唯一数字创建第二个集合。哪种方式更好取决于一般有多少行重复。

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2014-02-09
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2017-05-07
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多