3
a=raw_input()
prefix_dict = {}
for j in xrange(1,len(a)+1):
    prefix = a[:j]
    prefix_dict[prefix] = len(prefix)
print prefix_dict

上記のコードでメモリエラーの可能性はありますか?このコードはサーバー上で実行されており、サーバーは32ビットUbuntu(Ubuntu 12.04 LTS)を実行しているクアッドコアXeonマシンです。いくつかのケースでは動作し、いくつかのケースではメモリエラーが表示されます。参考:彼らがテストしているケースはわかりませんが、入力は小文字のアルファベットです。入力のサイズ<=10,000

4

2 に答える 2

0

そのためのデータだけのメモリ量は 1 + 2 + 3 ... + n-2 + n-1 + n になります。n は入力の長さ、つまりlen(a). これは (n+1) * n/2 になります。n が 10,000 の場合、約 50 MB の文字列データに加えて、Python 辞書が 10,000 エントリを格納するために大量の RAM を使用することになります。私のOSXボックスでテストすると、これは最小限のようで、実際にこのコードを実行すると、プロセスは53.9 MBが使用されていることを示しています:

str = "a"
d = {}
for i in xrange(10000):
    d[str] = i
    str = str + "a"

私はあなたのコードに明らかな問題は見当たりません.10,000文字の長さの文字列で実行すると、約50MBを喜んで出力するので、何か他のことが間違っているに違いありません.

topプロセスのメモリ使用量として何が表示されますか?

于 2012-07-23T19:24:24.453 に答える
0

たぶん、より小さなコードが役立ちます:

prefix_dict = { a[:j]:j for j in xrange(1, len(a) + 1) }
于 2012-07-23T19:30:08.380 に答える