2012-03-15 8 views
1

私のアプリケーションの1つは、アウトラインビューで表示されたオブジェクトのツリーを維持しています。あるノードから別のノードにオブジェクトを移動またはコピーするための長いルーチンを実装しました。このルーチンは、たとえば、ユーザーがアウトラインビューでドラッグアンドドロップを実行したときに呼び出されます。募集:コピー理論、ツリー内のノード移動(ドラッグアンドドロップなど)

オブジェクトが同じ親の中で動かされると面白くなります。特定のノードでオブジェクトが許可されていない場合は、ユーザーがそこにドロップできるようにしますが、最終的な場所を調整することができます。数週間後、最初の数回のリリースでいくつかのバグ修正が行われたので、私はこのルーチンを常に期待どおりに動作させるようにしました。おもう。しかし、私はこの方法が開発されたので、わからない。ad hoc。つまり、私がうまくいかないものを見つけたら、それを修正しました。

現在、私はいくつかのコーナーでパフォーマンスを向上させるために取り組んでいます。例えば、各オブジェクトが移動された直後に、影響を受けたすべてのノードを再索引付けするコードは、論理的には防弾であるが、ユーザがすでに1000個のアイテムを含むノードの先頭に1000個のアイテムを移動するとコストがかかる。

私はこのコードを見ると、あるコンピュータ科学者がこのトピックに関するテキストブックの章や何かを書いたことがあるかもしれないと思うので、その本を買って読んでください。ad hocコードと方法を行う。しかし、私はWeb検索では何も見つかりません。誰もそのような本を知っていますか?

そうでないかもしれません。たぶん、これは、すべてのことが言われ、実行された場合、それぞれのアプリケーションがあまりにも一般的な解決策を提案する異なるケースの1つですか?それが動作するように

おかげで、

ジェリーKrinock

答えて

0

は、それははるかに重要それが正しい方法である場合よりもある、聞こえます。

ユーザーは1000個のアイテムをドラッグして、結果として生じる遅延に問題がありますか?

スピードアップが必要な場合は、移動とインデックス作成を切り離して、移動が完了した後に常に移動コードがインデックスに登録されるようにするのが最適です。また、移動コードがソースとデスティネーションの配列を取って一度だけインデックスを作成できるようにすることもできますが、インデックス作成プロセスは依然として制御しています。

私が見て経験したアルゴリズムのほとんどは、データの取得を改善するためにデータを取得するか、ツリーを最適化すること(正確なツリー構造が重要でない場合)に焦点を当てています。あなたのコードは特定のツリー構造を念頭に置いているので、実際にはここでは役に立ちません。

+0

ありがとう、Guvante。答えは、誰もこの問題に対する一般的な解決策を書いたことはないということです。おそらくそれは不可能です。だから、私はちょうどあなたのように私のパフォーマンスの調整を完了しました。各項目が追加されるたびに再索引付けする代わりに、各追加された索引を索引セットの辞書に入力し、各親に対して1つの索引セットを作成した後、各辞書の子を「再スタック」する。 –

+0

@ Jarry。もちろん、poepleは前にこれを書いていますが、あまりにも一般的な問題です。私は今、同じプロセスに入っています。それがこの投稿を見つけた方法です。しかし、ツリー全体をグループなどのツリーノードにドラッグすると、醜いことになります。コードを共有するように気をつけますか? –

+0

申し訳ありません、Jan、私はあなたの要求を今まで見ていませんでした。ここに私のコードは... https://gist.github.com/jerrykrinock/7794404 –

関連する問題