我正在为给定字符串的字符频率计算寻找最有效(时间和空间)的算法。
最简单的算法是想要搜索一个标志数组(大小=不同字符数)并增加相应索引的计数器。这适用于线性时间。唯一的问题是flag-array的空间要求,如果需要所有的ASCII字符,它可以达到256.
是否有更好的算法,可以节省空间/时间?
答案 0 :(得分:3)
如果使用hash table来存储计数器,则需要与字符串中不同字符数成比例的空间,您仍然可以在线性时间内运行计算。很容易看出你不能比线性时间更好,因为你需要至少看一次每个角色。
在实践中,如果你的字符串实际上只使用一个字节来存储一个字符(即它不是Unicode)你的“标志数组”将只有大约1 kb,因此它可能是最好的镜头,因为它不是具有哈希表的(常数因子)时间和空间开销。