Algorithm 如何计算一百万个二进制序列的不同组?
我有一百万个二进制序列,它们的长度相同,比如(1000010111100110000…)等等。我想知道它们有多少个不同的组(相同的序列属于同一组)。最快的方法是什么? 请不要使用stoi。根据序列的长度L: L<~20:桶排序Algorithm 如何计算一百万个二进制序列的不同组?,algorithm,sorting,cluster-computing,Algorithm,Sorting,Cluster Computing,我有一百万个二进制序列,它们的长度相同,比如(1000010111100110000…)等等。我想知道它们有多少个不同的组(相同的序列属于同一组)。最快的方法是什么? 请不要使用stoi。根据序列的长度L: L
与输入大小相比,这已经足够短了。你只需要一个有L个桶的斗式分拣机。-预先分配一个大小为2L的数组,因为您有~百万个序列,而220是~百万,所以您只需要O(n)个额外内存
- 按照顺序,按桶排序
- 仔细检查,数一数结果。归还它们
- 我们完成了
作为旁注,bucket排序在技术上是一个完美的散列,因为本例中的散列函数是一对一函数 L不合理的大:二叉树 如果由于某种原因,哈希的构造不可行,或者您希望保持一致性,那么构建一个二叉树来保存这些值是一种可行的方法。
这将采用O(nlog(n))作为二叉树通常所做的
1~2M应足够,且仍为O(n)。也许你可以把尺寸降到1,5米左右。首先,你的方法是什么?相同深度的二叉树或群集算法你可以尝试这两种解决方案,并进行一些基准测试,找出哪种方法最快。