我试图使用O(n)复杂度的算法在任何给定文本中找到每个符号的频率.我的算法看起来像:
s = len(text)
P = 1.0/s
freqs = {}
for char in text:
try:
freqs[char]+=P
except:
freqs[char]=P
Run Code Online (Sandbox Code Playgroud)
但我怀疑这个字典方法足够快,因为它取决于字典方法的底层实现.这是最快的方法吗?
更新:如果使用集合和整数,速度不会增加.这是因为该算法已经具有O(n)复杂度,因此不可能实现必要的加速.
例如,1MB文本的结果:
without collections:
real 0m0.695s
with collections:
real 0m0.625s
Run Code Online (Sandbox Code Playgroud) 我知道所有关于std :: string和std :: wstring但他们似乎并没有完全注意UTF-8和UTF-16的扩展字符编码(至少在Windows上).也不支持UTF-32.
那么有谁知道提供完整的UTF-8,UTF-16和UTF-32支持的跨平台直接替换类?