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

问题描述 投票:1回答:1

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

输入:

"1011"
"0111"
"0111"

输出:

[1,2,3,3]

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

python string loops for-loop binary
1个回答
1
投票

没有比循环遍历每个字符至少一次更快的方法,因为你必须查看每个字符以知道每个字符串要递增的计数器。唯一不适用的情况是,如果您对字符串的特征有一些先验的额外知识(即,如果它们按照某种顺序排序等)。

所以你必须使用2个循环:一个循环遍历所有字符串,一个内循环遍历当前字符串中的所有字符。如果字符串的第1个字符为1,则只增加第i个计数器。

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

© www.soinside.com 2019 - 2024. All rights reserved.