1

私はプログラミングパールの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 のサイズはバイト単位です。

データ分析

誰かこれがどうしてそうなのか説明してくれませんか..??

4

1 に答える 1