13

ここに理論的/衒学的な質問があります:それぞれが他の複数によって所有される可能性があるプロパティを想像してください。さらに、所有権のある反復から次の反復まで、2人の隣接する所有者が所有権を部分的に結合することを決定する可能性があります。例えば:

territory 1, t=0: a,b,c,d
territory 2, t=0: e,f,g,h

territory 1, t=1: a,b,g,h
territory 2, t=1: g,h

つまり、もはや所有物ではcありません。dそしてghいわば太った猫になりました。

私は現在、このデータ構造を、各子が複数の親を持つことができるツリーとして表現しています。私の目標は、これをコンポジットデザインパターンに詰め込むことです。しかし、構造全体を台無しにすることなく、クライアントが以前の所有権に戻って更新する方法についての概念的な基礎を得るのに問題があります。

私の質問は2つあります。

  1. 簡単:自分でグーグルできるように、このデータ構造の便利な名前は何ですか?

  2. ハード:私は何が間違っているのですか?私がコーディングするとき、私は「それをシンプルに、愚かにしてください」というマントラを頭の中に入れようとします、そして私はこの信条を破っていると感じます。

4

3 に答える 3

14

私の質問は2つあります:簡単:自分でグーグルできるように、このデータ構造の便利な名前は何ですか?

ここにあるのは木ではなく、グラフです。マルチマップはここであなたを助けます。ただし、隣接リストまたは隣接行列は、良いスタートを切ることができます。

これが隣接行列とリストに関するビデオです:隣接行列とリストに関するYoutube

ハード:私は何が間違っているのですか?

これは本当にわかりにくいです。おそらく、あなたは適切な方法で関係をモデル化していませんでした。そもそも優れたデータ構造を考えると、それほど難しいことではありません。

そして、あなたがデザインパターンを求めたように(しかしあなたはおそらくあなた自身を知ったでしょう)、コンポジットパターンはあなたがそのような設定を簡単にモデル化することを可能にします。

于 2012-07-19T06:02:40.963 に答える
3

あなたはあなたの所有者とあなたの領土(財産)の間に多対多の関係を持っています。使用している言語はわかりませんが、この種のことはリレーショナルデータベースで簡単に表現および追跡できます。(エンティティごとにテーブルが必要になる可能性があり、関係には3番目の「ジャンクション」テーブルが必要になる可能性があります。「過去にさかのぼって」クエリを実行できるようにする必要がある場合は、ある種の「時間インデックス」列を含めることができます。同じように。)

オブジェクト指向言語で作業している場合は、TerritoryとOwnerの2つのクラスを作成できます。ここで、Territoryクラスには、所有者への参照/ポインターのコレクションであるプロパティ/メンバー/フィールドがあり、Ownerクラスには同様のコレクションがあります。テリトリーの。(言語によっては、これら2つのコレクションの1つに「弱い」参照を含める必要がある場合があります。)

この場合、ある特定の時点に戻ってネットワークの状態を確認したい場合は、問題が発生する可能性があります。(これが必要な場合は、そう言ってください。私(または他の誰か)がそのために機能するソリューションを投稿できます。)

あなたがどのレベルの単純さを目指しているのかはわかりませんが、どちらの場合も、所有権の関係を実際に「難しい」更新はしていません。たぶん、あなたがいくつかのコードを投稿したなら、あなたにもっと具体的なアドバイスを与えるほうが簡単かもしれません。

于 2012-07-19T05:41:52.050 に答える
0

ビジネスルールに関する詳細情報がなければわかりません。私は、各ノードが潜在的に多数の親を持つ可能性があるグラフを設計した経験が豊富ですが。

一般的な構造は、有向非巡回グラフです。ここでの重要なルールは、グラフを通るパスがそれ自体に戻ることはできないということです。たとえば、パスを取る"A/B/C/B"場合、Bが2回繰り返されるため、これは無効になります。

  1. 有効:-、、"A/B/C"ノード"D/E/C"Cは2つの親EとがありBます。
  2. 無効:- "A/B/C/B"、ノードBが同じパスで繰り返され、サイクルが発生します。
于 2021-08-23T18:12:54.603 に答える