0

私が取り組んでいるプロジェクトについて支援が必要です。すべての入力が特定の順序で行われないと仮定して、入れ子集合モデルで左右を計算するにはどうすればよいですか。

4つのフォームが配布され、各フォームには4人が参加し、各4人にはさらに4人が参加します。ネットワークは7世代までダウンワードに成長します。任意のレベルでノードを選択することにした場合、ダウンライナーとアップライナーを見つけるにはどうすればよいですか?

     A
|    |   |   |
B    C   D   E 
             |
         ------------
         |   |   |   |
         F   G   H    J
         |
     ----------
     |   |  |  |
     W   X  Y  Z

説明:

A brings A B C D
E then brings F G H J
F brings WXYZ

などなど。第7世代では、停止が発生します。その間、各ノードは系統のダウンワードを開始します。

4

1 に答える 1

2

左右の訪問数の計算は、反復的な手続き型の操作です。単一のクエリで実行することはできませんが、再帰的に自分自身を呼び出す単一のプロシージャで実行できます。

手順には2つのパラメータが必要です。

  • 作業中のノードのID
  • これまでに使用された最大の訪問数(次の左はこれ+1です)

プロシージャは、適用した最大の訪問数(最後の右)を返す必要があります。

プロシージャ内で、クエリを実行して、指定されたIDを持つノードのすべての子を検索します。それらが順番に並んでいる場合は、それに応じて並べ替えることができます。または、任意の順序を使用することもできます。見つかった子ごとに、左側の番号を設定してから、その子に対して再帰的にプロシージャを呼び出します。再帰呼び出しが戻ったら、戻りコードを使用して正しい訪問番号を設定します。

ジョーセルコは、訪問数の計算を賢く効率的にする方法に特化した本の全章を持っています。データセットが非常に大きく、頻繁に編集される場合は、それを確認することをお勧めします。それ以外の場合は、ノードリストを編集するたびに、すべての訪問数を再計算できます。

于 2012-04-28T12:49:02.147 に答える