次の図のようなグラフを保持するデータ構造があります。
このツリーでは、ノードはその下のレベルから任意の数の一意の子を持つことができます。写真のツリー内は一連のパスを表します。すべてのパスは、レベル 1 のノードで開始し、「*」マークのノードで終了する必要があります。したがって、図のツリーのパスは次のとおりです。
A then C then G
A then C then G then J
A then D then G
A then D then G the J
A then D then K, and so on...
実際、私の元のツリーは巨大 (約 200 万シーケンス) で、レベルあたりの最大ノード数は 61 (11 レベル中) です。そのため、私のアプリケーション (SAMSUNG 用のコンピューター ビジョン アプリケーション) で多くのメモリ消費の問題が発生します。
私の目標は、これらのパスをよりコンパクトな文字列形式で表す反復アルゴリズムを持つことです。ですから、問題は次のように 3 つのステップに分けられると思います。ツリー データ構造を構築しました (ステップ 2)が、ステップ 3 でツリーから出力文字列/シーケンスを取得する反復アルゴリズムを導出できません。
1- 入力文字列:
(A C G) | (A C G J) | (A D G) | (A D G J ) | (A D K) | ....
、
ここで「|」代替手段を表します。
2- これらのパスのツリー データ構造の構築。
3- 必要な出力文字列:
(A (C G [J]) | (D (G [J]) | K)) | (B ....)
.
どこどこ "|" は選択肢を表し、「[ ]」はオプションを囲みます。ターゲット出力文字列は、より単純化するために使用できる一般的な要因がないように最適化する必要があります。