是預先規定好的,我猜測的理由如下:
用 numeric mode 舉例,如果要表示 9 的話我們最少需要 4 個 0 或 1( 9 = 0b1001),但 4 個 0 或 1 最高能表示到 15,也就是說用一個數字一組來編碼長度為 1 的數字會浪費掉高達 (16 - 10) / 16 = 37.5% 的編碼空間,用同樣的想法可以得到:兩個數字一組來編碼長度為 2 的數字最少需要 7 個 0 或 1,會浪費 (128 - 100) / 128 = 21.88% 的編碼空間;三個數字一組來編碼長度為 3 的數字最少需要 10 個 0 或 1,會浪費 (1024 - 1000) / 1024 = 2.34% 的編碼空間;四個數字一組來編碼長度為 4 的數字最少需要 14 個 0 或 1,會浪費 (16384 - 10000) / 16384 = 38.96% 的編碼空間;五個數字一組 …… 浪費 23.7% ……;六個數字一組 …… 浪費 4.63% ……。顯然三個數字一組是這幾種情況中最好的,因為若浪費的編碼空間越少,則可以預期編碼後的長度不會比其他情況所得到的更長。
(考慮以 n 個數字一組編碼長度為 n 的十進位數,則在 n <= 1002 的情況下,n = 643 的表現最好,因為它在最少需要 2136 個 bit 的情況下,只浪費了 0.016% 的編碼空間;不過如果以三個數字一組編碼長度為 643 的數字,也僅僅需要 2144 個 bit 而已。)
除此之外還要考慮到最後一組數字長度的問題,如果用 n 個數字一組來編碼,則最後一組數字的長度可能是 1 到 n,撇除為 n 的情況,我們會有 n - 1 種可能,因此若 n 的大小不定會帶來一些麻煩。
所以說在兼顧適用性和效率的情況下,使用三個數字一組來編碼是最合理的選擇。