私はmathematica7を使用しており、速度を上げるために動的リストでAppendToを使用しないように、単一リンクリスト(〜50,000要素)を使用しようとしています。このテストでは、次のように10個の要素のリストを作成できます。
list1 = Fold[{#1, #2} &, {}, RandomInteger[10^5, 10]]
そして、私はPart
このようにそれにアクセスしようとします(ランダムな要素に100回アクセスします)
Timing[list1[[Sequence @@ ConstantArray[1, #], 2]] & /@RandomInteger[{1,10}, 100]]
これは、小さなリスト(上記の10)では問題なく機能します。私が理解していない理由で、リストにもっと多くの要素(10 ^ 4など)がある場合、これはカーネルを強制終了します。このサイトや他の場所を見て回ってみましたが、リンクリストをどのように使用すべきかわかりません。のようなさまざまな実装を使用しようとしたこともf[e1,f[e2,f[e3,...f[]...]]]
ありますが、このスキームを使用するときに要素にアクセスして操作するための優れた方法がわかりません。問題はw/に関係していると思い$RecursionLimit
ますが、それを回避する方法がわかりません。
特に使えるようになりたい
list1[[Sequence @@ ConstantArray[1, index], 2]] = new value
私のコードで。繰り返しますが、これはリストが小さい場合は機能しますが、リストが大きい場合は最終的にカーネルをクラッシュさせます。奇妙なことに、カーネルは常にクラッシュするわけではなく、大きなリストの場合にのみ確率的にクラッシュします。これは、ここSEで説明したものと似ていますが、その議論が適切かどうかはわかりません。本当に私はLL要素を修正して数学でLLを正しく使うのに助けが必要です。
前もって感謝します。