私は16文字のアルファベットを持っています。文が与えられたら、各文字の頻度を数え、巧妙なビット シフトを使用してすべての頻度を 1 つの数値にカプセル化します。これらの文が常にそれぞれ 100 文字であると仮定し、文字が 31 回以上出現しないと仮定すると、次のようになります。
A: occurs 2 times -> 0010
B: occurs 10 times -> 1010
C: occurs 7 times -> 0111
等。
ここで、次のように連結したいと思います: 001010100111...
上記の周波数を集中させただけです。数値を簡単に格納するために、上記のバイナリを 64 ビットの unsigned int に変換したいと考えました。
私の他の要件は、その長さを持ち、文字ごとに周波数を再抽出することです。そのため、10 進数を生成し、それを個々の周波数ビットに解析できる必要があります。
cでそれを行うにはどうすればよいですか?これらの周波数のビット シフトと加算を行うことはできますが、それはつまり、周波数がオーバーラップしていることを意味します。もう1つの問題は、周波数を抽出するときです。末尾の0は重要ではなく、10進数で保存されないため、シフトするビット数をどのように知ることができますが、アルゴリズムでは非常に重要です。
何か賢いアイデアはありますか?ありがとうございました。