1
0

More than 1 year has passed since last update.

基本情報対策:小学生でもわかる?有向グラフとトポロジカルソート

Last updated at Posted at 2023-09-19

基本情報の勉強をしていますが、有向グラフとトポロジカルソートの処理が全くわかりませんでした。

そのため、GPTさんに説明してもらいました。

いきなり結論

自分に向かう矢印が0の文字から処理をして、配列に代入したらその文字を消します。

すると、また0になる文字ができるのでそれをマタ代入することを続けます。

いまいちわかっていませんが、

今回は
CABDEF

となりましたが

ACBDEF

ともなるようです。

~~~追記~~~
もっとありました
以下は可能なトポロジカルソートの結果です:

Aから始める場合:

A, C, B, D, F, E
A, C, B, F, D, E
A, C, B, F, E, D
など
Cから始める場合:

C, A, B, D, F, E
C, A, B, F, D, E
C, A, B, F, E, D
など
~~~~~~~~

有向グラフ:下記の関係性を持つグラフとする。

A -> B -> F -> E
     |    
     v
     D -> E
     ^
     |
     C

処理順

入次数の初期状態

A: 0
B: 1 (Aから)
C: 0
D: 2 (BとCから)
F: 1 (Bから)
E: 2 (DとFから)

初期キューの作成:

入次数が0のノードをキューに入れます。この場合、ノードAとノードCが入次数0です。


キュー: [C, A]

トポロジカルソートの実行:

  1. キューからノードCを取り出し、結果のリストに追加します。

ソート結果: [C]
キュー: [A]

ノードCから出ている辺を探し、その辺の目的地の入次数を1減らします。ノードCからはノードDへの辺がありますので、ノードDの入次数を1減らします。


Dの入次数: 1 (2から1に減少)
  1. キューからノードAを取り出し、ソート結果のリストに追加します。

ソート結果: [C, A]
キュー: []

ノードAから出ている辺を探し、その辺の目的地の入次数を1減らします。ノードAからはノードBへの辺がありますので、ノードBの入次数を1減らします。


Bの入次数: 0 (1から0に減少)

入次数が0になったノードBをキューに追加します。


キュー: [B]
  1. キューからノードBを取り出し、ソート結果のリストに追加します。

ソート結果: [C, A, B]
キュー: []

ノードBから出ている辺を探し、その辺の目的地の入次数を1減らします。ノードBからはノードDとノードFへの辺がありますので、これらのノードの入次数をそれぞれ1減らします。


Dの入次数: 0 (1から0に減少)
Fの入次数: 0 (1から0に減少)

入次数が0になったノードDとノードFをキューに追加します。


キュー: [D, F]
  1. キューからノードDを取り出し、ソート結果のリストに追加します。

ソート結果: [C, A, B, D]
キュー: [F]

ノードDから出ている辺を探し、その辺の目的地の入次数を1減らします。ノードDからはノードEへの辺がありますので、ノードEの入次数を1減らします。


Eの入次数: 1 (2から1に減少)
  1. キューからノードFを取り出し、ソート結果のリストに追加します。

ソート結果: [C, A, B, D, F]
キュー: []

ノードFから出ている辺を探し、その辺の目的地の入次数を1減らします。ノードFからはノードEへの辺がありますので、ノードEの入次数を1減らします。


Eの入次数: 0 (1から0に減少)

入次数が0になったノードEをキューに追加します。

lessCopy code
キュー: [E]
  1. キューからノードEを取り出し、ソート結果のリストに追加します。

ソート結果: [C, A, B, D, F, E]
キュー: []

ノードEから出ている辺はありませんので、入次数の処理は行いません。キューは空になり、ソートされていないノードもなくなりましたので、トポロジカルソートは完了です。

最終結果:


[C, A, B, D, F, E]

この手順を通じて、与えられた有向グラフに対してトポロジカルソートを行い、結果として**CABDEF**の順序を得ることができました。

くそめんどい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0