在一组“二进制字符串”(Python)中计数

时间:2019-03-14 21:01:41

标签: python string loops for-loop binary

我有一大套(100 000)二进制字符串(固定长度k),如下所示: “ 011100001111000010”,“ 111011011110000100”等。某些二进制字符串包括前导零。 我想获得一个长度为k的列表 L ,使得a [i] =在第i个位置具有1的二进制字符串的数量。例如:

输入:

"1011"
"0111"
"0111"

输出:

[1,2,3,3]

由于二进制字符串的数量很大(100000+),并且使用嵌套的for循环k大约为100,所以效率似乎非常低。解决这个问题的最有效方法(或至少更有效的方法)是什么?

1 个答案:

答案 0 :(得分:1)

没有比循环遍历每个字符更快的方法了,因为您必须查看每个字符才能知道每个字符串要增加的计数器。唯一不正确的情况是,如果您具有关于字符串特征的先验其他知识(即,如果它们是按照某种顺序排序的,等等)。

因此,您必须使用2个循环:一个循环遍历所有字符串,一个内部循环遍历当前字符串内的所有字符。如果该字符串的第i个字符为1,则只需增加第i个计数器即可。

编辑:请注意,问题是embarrassingly parallel,因此使用线程并行化非常容易。尽管它不会渐近地加快速度,但您可以通过CPU支持的并发线程数来加快速度。只需注意,对于不熟悉它的人来说,高效的多线程编程绝非易事。