我有一个 16 个字母的字母表。给定一个句子,我想计算每个字母的频率,然后使用巧妙的位移将所有频率封装在一个数字中。让我们假设这些句子每个总是 100 个字母,并且假设没有字母出现超过 31 次,我想要这样的东西:
A: occurs 2 times -> 0010
B: occurs 10 times -> 1010
C: occurs 7 times -> 0111
等等。
现在,我想连接这样的:001010100111 ...
我只是集中了上面的频率。为了方便地存储数字,我想将上面的二进制转换为 64 位无符号整数。
我的另一个要求是有那么长的时间并重新提取每个字母的频率。因此,我需要能够生成小数,然后将其解析为各个频率位。
我将如何在c中做到这一点?我可以对这些频率进行位移和添加,但这意味着我正在重叠频率。另一个问题是在提取频率时,我怎么知道要移动多少位,因为尾随的 0 是微不足道的并且没有保存在十进制中,但它们在我的算法中非常重要。
有什么聪明的主意吗?谢谢你。