【问题标题】:how to calculate different groups of one million binary sequences?如何计算一百万个二进制序列的不同组?
【发布时间】:2021-03-03 08:46:16
【问题描述】:

我有一百万个二进制序列,它们的长度相同,例如 (1000010011,1100110000....) 等等。而且我想知道他们有多少个不同的组(相同的序列属于同一组)。最快的方法是什么? 请不要。

【问题讨论】:

  • 首先,你的方法是什么?
  • 相同深度的二叉树或聚类算法
  • 您可以尝试这两种解决方案并进行一些基准测试以找出最快的方法。

标签: algorithm sorting cluster-computing


【解决方案1】:

取决于序列的长度L:

L
与输入大小相比,这足够短。您只需要一个带有 L 个桶的桶排序。 - 预分配一个大小为 2L 的数组,因为你有大约百万个序列,而 220 是大约百万,你只需要 O(n) 的额外内存。

  • 遍历您的序列,按桶排序
  • 遍历桶,计算结果。归还它们。
  • 我们完成了。

时间复杂度为 O(n),内存成本为 O(n)。这是最佳的复杂性,因为无论如何您都必须至少访问每个元素一次以检查其值。

L 相当大:哈希表
如果您选择了合理的散列函数和合适大小的散列表(如果我们需要存储计数,则选择字典)1 您在插入时会发生少量冲突。摊销时间将为 O(n),因为如果散列良好,则插入的摊销时间为 O(1)。
附带说明一下,桶排序在技术上是完美的哈希,因为在这种情况下哈希函数是一对一的函数。

L 过大:二叉树
如果由于某种原因哈希的构造不可行或者您希望保持一致性,那么构建二叉树来保存值是一种方法。
这将花费 O(nlog(n)),就像二叉树通常那样。


1 ~2M 应该足够了,它仍然是 O(n)。也许您可以进一步降低到 1.5M 左右的大小。

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2021-12-08
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多