100万件の電話番号を保存 [終了] 質問する

100万件の電話番号を保存 [終了] 質問する

メモリの観点から、100 万件の電話番号を保存する最も効率的な方法は何ですか?

どうやらこれは Google の面接の質問のようですが、あなたの考えを教えてください。

ベストアンサー1

メモリが最大の考慮事項である場合、数値を保存する必要はまったくなく、i と i+1 の差分だけを保存すれば済みます。

番号の範囲が 200 0000 から 999 9999 の場合、電話番号の可能な数は 7,999,999 になります。番号は 100 万あり、それらが均一に分布していると仮定すると、連続した番号 n_i と n_i+1 の間の予想距離は E = n_i+1 - n_i ~ 8 (3 ビット) になります。したがって、32 ビットの int の場合、最大 10 個の連続したオフセット (最適な合計メモリ フットプリントは約 400 KB) を保存できますが、8 を超えるオフセットが必要になる場合もあります (400 や 1500 など)。その場合は、int の最初の 2 ビットをヘッダーとして予約しておけば、保存されているビットを読み取るために使用するフレーム サイズがわかります。たとえば、00 = 3x10、01 = 5x6、10 = 7x4、11 = 1*30 などを使用します。

おすすめ記事