1,000個の数値の1073バイトの固定ストレージ:
この格納方法の基本的な形式は、最初の5桁、各グループのカウント、および各グループの各番号のオフセットを格納することです。
接頭辞:
5桁の接頭辞は最初の17ビットを占めます。
グループ化:
次に、数値の適切なサイズのグループ化を理解する必要があります。グループごとに約1つの数を試してみましょう。格納する数値が約1000あることがわかっているため、99,999を約1000の部分に分割します。グループサイズを100に選択すると、ビットが無駄になるため、128ビットのグループサイズを試してみましょう。7ビットで表すことができます。これにより、782のグループで作業できます。
カウント:
次に、782個のグループのそれぞれについて、各グループのエントリの数を保存する必要があります。各グループの7ビットカウントはを生成し7*782=5,474 bits
ます。これは、グループの選択方法により、表される平均数が約1であるため、非常に非効率的です。
したがって、代わりに、グループ内の各数値の先頭に1が続き、その後に0が続く可変サイズのカウントがあります。したがって、x
グループ内に数値がある場合、カウントを表すためにがx 1's
続き0
ます。たとえば、グループに5つの数値がある場合、カウントはで表され111110
ます。この方法では、1,000個の数値がある場合、1000の1と782の0になり、合計で1000 + 782 = 1,782ビットになります。
オフセット:
最後に、各数値の形式は、各グループの7ビットのオフセットになります。たとえば、00000と00001が0-127グループの唯一の数値である場合、そのグループのビットはになります110 0000000 0000001
。1,000の数を想定すると、オフセットには7,000ビットが存在します。
したがって、1,000の数を想定した最終的なカウントは次のようになります。
17 (prefix) + 1,782 (counts) + 7,000 (offsets) = 8,799 bits = 1100 bytes
次に、128ビットに切り上げることによるグループサイズの選択がグループサイズの最良の選択であったかどうかを確認します。x
各グループを表すビット数を選択すると、サイズの式は次のようになります。
Size in bits = 17 (prefix) + 1,000 + 99,999/2^x + x * 1,000
整数値に対して、この式を最小化することx
与えるx=6
= 8580ビットで得た、1,073バイト。したがって、理想的なストレージは次のとおりです。