5

クライアント間で共有されるアクティビティのキューがあり、ユーザー アクティビティをキャプチャし、他のサイトのロボットによって実行されます。アクティビティの例は次のようになります。

CREATE FOLDER  /docs
CREATE FILE    /docs/journal.txt
DELETE FILE    /docs/blog.txt
MOVE   FOLDER  /docs/images /docs/photos
...

多くの場合、アクティビティを 1 つに減らすか、またはまったく減らすことができます。例えば:

CREATE FOLDER /docs
RENAME FOLDER /docs /documents

単純に次のように変更できます。

CREATE FOLDER /documents

そして次のようなもの:

CREATE FOLDER /docs
RENAME FOLDER /documents
DELETE FOLDER /documents

キューから完全に削除できます。

この種の削減/最適化は非常に一般的な問題のように思えます。攻撃する前に、いくつかの一般的な解決策を試してみたいと思います。経路探索の最適化問題のようです。

何か案は?

4

3 に答える 3

3

あなたのためにこれを行うライブラリやフレームワークは知りません。一方で、その背後にあるロジックを自分で指定する必要があります。私が見ているように、とにかくそれが大部分の作業になります。

これが私がとるアプローチです:

  1. アクションのトポロジカルソートを実行します(フォルダーの名前を変更する「依存する」フォルダーを作成するなど...)

  2. 依存関係のない各コマンドは、依存関係ツリーの「ルート」を表します。

  3. これらのツリーを各ルートから再帰的に折りたたみます。

于 2012-05-31T22:04:45.020 に答える
1

1 つのオプション (やや重いものではありますが) は、キュー レコードを調べて、プログラム内で作成したツリー表現でファイル システムで実行される操作をシミュレートすることです。参照されているディレクトリごとに、最終的に実行されるネット操作を追跡できます。完了したら、変更されたツリー構造をたどって、各ディレクトリとサブディレクトリに適用される最終的な変換を表す一連のコマンドを出力できます。

お役に立てれば!

于 2012-05-31T22:24:18.507 に答える
0
  1. すべての操作を定義する (作成、名前変更、移動)
  2. 操作と操作のパラメーターを含む Command クラスを定義します。
  3. 2 つのコマンドを組み合わせることができるかどうかと、その組み合わせの結果がどうなるかを示すものを実装します。

互いに直後に続くコマンドのみを組み合わせることができると想定する必要があります。そうしないと、望ましくない副作用が発生する可能性があります。そのため、yoru キューからコマンドを実行しようとするときは、組み合わせることのできないコマンドに遭遇するまで、コマンドのピーク/ポップ/構築を開始します。

于 2012-05-31T22:44:56.857 に答える