私はプログラミングパールの1つを試していました:
重複のない最大 1,000 万個の 7 桁の整数を含むファイルがあるとします。たった 1.5Mb の RAM を使用し、データを 1 回だけ読み取って、これらの数値を昇順で出力する効率的な方法は何ですか? 1Mb の RAM しかなく、他のストレージがない場合の結果はどうなりますか? 重複が許可された場合、あなたの答えはどのように変わりますか?
テスト ケース I を作成するために、8999999 個の数値を生成し、ファイルに書き込みました。次に、各行について、同じものをツリーに挿入し始め、最終的にトライ構造を作成しました。
サンプルコード:
from sys import getsizeof
tree = dict()
xtree = dict()
f = open("data2.txt", "r")
cnt = 0
for number in f:
cnt += 1
currTree = tree
xtree[number] = dict()
for n in number.strip():
if n not in currTree:
currTree[n] = dict()
currTree = currTree[n]
f.close()
print(cnt)
print(getsizeof(tree))
print(getsizeof(xtree))
print(tree)
サンプル ファイル data2.txt には 20 個のレコードがあります
生成されたツリーは
問題は、構築されたツリーのメモリ サイジングを行うと、20 行で 240 バイトのメモリ フット プリントが表示されることです。
100 行で、ツリーのサイズは 368 バイトになります
また、8999999行で368バイトになります
xtree
データをフィードするだけの名前の補助マップを作成しました
xtree と tree のサイズはバイト単位です。
誰かこれがどうしてそうなのか説明してくれませんか..??