如何解决如何计算一百万个二进制序列的不同组? 取决于序列的长度 L:
我有一百万个二进制序列,它们的长度相同,例如 (1000010011,1100110000....) 等等。我想知道他们有多少个不同的组(相同的序列属于同一个组)。最快的方法是什么? 请勿打扰。
解决方法
取决于序列的长度 L:
L 时间复杂度为 O(n),内存成本为 O(n)。这是最佳的复杂性,因为您必须至少访问每个元素一次以检查其值。 L 相当大:哈希表 L 过大:二叉树 1 ~2M 应该足够了,它仍然是 O(n)。也许你可以更小到 1,5M 左右的大小。
与输入大小相比,这足够短了。一个有 L 个桶的桶排序就是你所需要的。 - 预分配一个大小为 2L 的数组,因为您有 ~ 百万个序列,而 220 是 ~ 百万个,因此您只需要 O(n) 的额外内存。 >
如果你选择了一个合理的散列函数和一个合适大小的散列表(或者一个字典,如果我们需要存储计数)1 你在插入时会有少量的冲突。摊销时间将为 O(n),因为如果散列良好,则插入的摊销时间为 O(1)。
附带说明一下,桶排序在技术上是一个完美的散列,因为在这种情况下散列函数是一个一对一的函数。
如果由于某种原因哈希的构建不可行或者您希望保持一致性,那么构建一个二叉树来保存这些值是一种可行的方法。
这将需要 O(nlog(n)) 作为二叉树通常做的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。