106

Kosaraju の Strong Connected Component(SCC) グラフ検索アルゴリズムを Python で実装しています。

プログラムは小さなデータ セットでは問題なく動作しますが、非常に大きなグラフ (800,000 ノード以上) で実行すると、「セグメンテーション フォールト」と表示されます。

その原因は何ですか?ありがとうございました!


追加情報: 最初に、超大規模なデータ セットで実行すると、次のエラーが発生しました。

"RuntimeError: maximum recursion depth exceeded in cmp"

次に、次を使用して再帰制限をリセットします

sys.setrecursionlimit(50000)

しかし、「セグメンテーション違反」が発生しました

無限ループではないと信じてください。比較的小さなデータで正しく実行されます。プログラムがリソースを使い果たした可能性はありますか?

4

8 に答える 8

59

問題を解決したことは理解していますが、このスレッドを読んでいる他の人にとっては、答えは次のとおりです。オペレーティングシステムが Python プロセスに割り当てるスタックを増やす必要があります。

それを行う方法は、オペレーティングシステムに依存します。Linuxでは、コマンドulimit -sで現在の値を確認でき、それを増やすことができますulimit -s <new_value>

以前の値を 2 倍にしてみて、機能しない場合は、機能するかメモリが不足する値が見つかるまで、倍増を続けます。

于 2012-07-06T19:19:45.147 に答える
22

セグメンテーション違反は一般的なものであり、これには多くの理由が考えられます。

  • 低メモリ
  • 不良ラムメモリ
  • クエリを使用してデータベースから巨大なデータ セットをフェッチする (フェッチされたデータのサイズがスワップ メモリを超える場合)
  • 間違ったクエリ / バグのあるコード
  • ループが長い (複数回の再帰)
于 2013-11-04T21:04:58.330 に答える