125,000 ノード (最大 2 つの子) のツリーがあります。各ノードの子 (直接および間接) の数を決定しようとしています。ツリーは DAG ですが、各子へのリンクの数は無制限であるため、多くのノードは実質的に他のすべてのノードを子として持ちます。参考までに、ツリーの全体的な複雑さは、メモ化せずに表現すると 10^30 をはるかに超えます。これは、各子への単純なポインターを格納する (および出力をメモ化する) だけで、ハッシュ テーブル、メモリ アロケーター、およびその他のオーバーヘッドを無視しても、15.625 GB のデータの塊が生成されることを意味します。
これは望ましい出力ですが、達成するのに少し時間がかかりすぎて、メモリが少し多すぎます。私は 1 台のワークステーションしか持っていませんが、そこそこのパワーを備えていますが、最高レベルではありません (i7 930、6GB RAM)。
合理的な期間内にデータにアクセスできるように、テーブルをメモ化またはキャッシュする方法はありますか (データに対して数十万回のアクセスを行う可能性があります)。クエリを遅延評価することを検討しましたが、クエリにアクセスするのにどれくらいの時間がかかるかが心配です。
さらに、どのノードが子であるかには特に関心はありませんが、それらの数を知る必要があります。これは、同じ子を 2 回数えることはできないため、基本的には同じことです。
編集:ツリーは不変です。私がすることは、子供の数を読むことだけです。