2012-07-04 11 views
7

大きな数式(数百万のノード)に対応する式グラフの共通部分式消去(CSE)の実装を検討しています。一般的な部分式の削除の実装

これを実行するにはどのようなアルゴリズムが適していますか?インターネットを検索して簡単にアルゴリズムを実装していましたが、何も見つかりませんでした。可能であれば、アルゴリズムは完全な式グラフのノード数に線形の複雑さを持たなければならない。

+0

この表現は役立ちます:http://www.masonchang.com/blog/2010/8/9/sea-of-nodes-compilation-approach.html –

答えて

9

これは副作用のない表現ですか?そして、最も簡単なことは、各部分式の木をバケットにハッシュして、部分式除去の候補を決定することです。 これはCSEの特別なケースです。すべての式が単一の(巨大な)「基本ブロック」に含まれています。 (私はduplicate codeを検出するための基礎としてこの考え方を使用しています)

式に順序と副作用がある場合は、Value Numberingと考えるとよいでしょう。

+0

いいえ、副作用はありません。私があなたの提案を正しく理解していれば、式のノードを依存関係の順にループし、各ステップで式がすでにハッシュマップに存在するかどうかをチェックする必要があります。存在する場合は、代わりにこの部分表現をハッシュマップに追加します。これは正しく理解されていますか? – Joel

+0

"依存関係の順"とは、各ツリーのボトムアップを意味します。 –

+0

私は実際にこの戦略について考えていました。どのようなハッシュを使用しますか? – Joel

関連する問題