質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

426閲覧

Pythonでのトポロジカルソートの実装の際に出てくる「into_num」について

SmaSTATION

総合スコア29

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/06/13 00:02

実現したいこと

Pythonでトポロジカルソートを実装したいと思い、あるページを参考にして取り組んでいます。
入力データのひとつになるであろう「into_num」が何を示すのかを知りたいです。

前提

22行目に出てくる「into_num」が何を示しているのか知りたいです。

該当のソースコード

Python

1from collections import deque 2def topological_sort(G, into_num): 3 #入ってくる有向辺を持たないノードを列挙 4 q = deque() 5 for i in range(len(G)): 6 if into_num[i]==0: 7 q.append(i) 8 #以下、幅優先探索 9 ans = [] 10 while q: 11 v = q.popleft() 12 ans.append(v) 13 for adj in G[v]: 14 print("adj=",adj) 15 into_num[adj] -= 1 #入次数を減らす 16 if into_num[adj]==0: 17 q.append(adj) #入次数が0になったら、キューに入れる 18 19 return ans 20 21G = [[1], [2], [], [1, 4], [5], [2]] #隣接する頂点を入れるとこ 22into_num = [0, 2, 2, 0, 1, 1] 23ans = topological_sort(G, into_num) #トポロジカルソート 24print(ans)

試したこと

  • 枝の数のことを指しているのか、と思ったが違いました。
  • ライブラリ固定の変数かと思いましたが、違いました。
  • 値を変えても結果が正しくなってしまうのを確認しました。

補足情報(FW/ツールのバージョンなど)

参考にさせていただいたページ様:https://output-zakki.com/topological_sort/#toc2
叱咤含めて、アドバイスいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

参照先に

トポロジカルソートを実行する際のポイントは、ノードの入次数を管理するリスト into_num です。

入次数のリストだと書いてありますし、 トポロジカルソートに入次数を使うことは wikipediaの説明にもあります。
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%9D%E3%83%AD%E3%82%B8%E3%82%AB%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88

トポロジカルソート(左から並べる)の方法を簡単に説明すると

  1. 入力辺を持たないノード(=入次数0のノード)を1つ探して結果リストに入れる
  2. 元のグラフからそのノードを削除する
  3. グラフと入次数のリストを更新する
  4. グラフが残っていれば1に戻る

こんな感じです。この手順で参照先のグラフなどを手で並べ変えてみると仕組みが理解できると思います。
「1つ探して」のところの探し方が深さ優先と幅優先の違いになります。

投稿2023/06/13 02:26

TakaiY

総合スコア14428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ノードに入ってきているエッジの数みたいですね(into の num)

投稿2023/06/13 01:12

quickquip

総合スコア11310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問