Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何计算一百万个二进制序列的不同组?_Algorithm_Sorting_Cluster Computing - Fatal编程技术网

Algorithm 如何计算一百万个二进制序列的不同组?

Algorithm 如何计算一百万个二进制序列的不同组?,algorithm,sorting,cluster-computing,Algorithm,Sorting,Cluster Computing,我有一百万个二进制序列,它们的长度相同,比如(1000010111100110000…)等等。我想知道它们有多少个不同的组(相同的序列属于同一组)。最快的方法是什么? 请不要使用stoi。根据序列的长度L: L

我有一百万个二进制序列,它们的长度相同,比如(1000010111100110000…)等等。我想知道它们有多少个不同的组(相同的序列属于同一组)。最快的方法是什么? 请不要使用stoi。

根据序列的长度L: L<~20:桶排序
与输入大小相比,这已经足够短了。你只需要一个有L个桶的斗式分拣机。-预先分配一个大小为2L的数组,因为您有~百万个序列,而220是~百万,所以您只需要O(n)个额外内存

  • 按照顺序,按桶排序
  • 仔细检查,数一数结果。归还它们
  • 我们完成了
时间复杂度为O(n),内存开销为O(n)。这是最佳的复杂性,因为您必须至少访问每个元素一次以检查其值

L相当大:哈希表 如果您选择了一个合理的哈希函数和一个大小合适的哈希表(或者如果我们需要存储计数,则选择一个字典),1则在插入时会发生少量冲突。摊销时间将为O(n),因为如果哈希值良好,则插入值将摊销为O(1)。
作为旁注,bucket排序在技术上是一个完美的散列,因为本例中的散列函数是一对一函数

L不合理的大:二叉树 如果由于某种原因,哈希的构造不可行,或者您希望保持一致性,那么构建一个二叉树来保存这些值是一种可行的方法。
这将采用O(nlog(n))作为二叉树通常所做的



1~2M应足够,且仍为O(n)。也许你可以把尺寸降到1,5米左右。

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