切りよくモチベーションを保つことができる関数型コンピューター・プログラミングの練習問題<その2>

切りモチ・プログラミング 公開下書き

◇お題3 ダイクストラ法

ダイクストラ法

20191020comp47a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑数字は距離だと思ってくれだぜ☆
Start から Goal まで、数字を足していって 一番少なくできる経路を 教えてくれだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 edbaじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 その答えを出した方法を教えてくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 まったく別の話題に移るのね」

きふわらべのやり方

20191020comp47a2.png

KIFUWARABE_80x100x8_01_Futu.gif
「 まず スタート地点の e に着目する☆
これを クエン (Current; カレント; 現在)としよう☆」

20191020comp47a3.png

KIFUWARABE_80x100x8_01_Futu.gif
「 そこから伸びる エーッチ (Edge; エッジ; 辺)は3本☆」

20191020comp47a4.png

KIFUWARABE_80x100x8_01_Futu.gif
「 矢印の デスッテネーィション (Destination; デスティネーション; 先)側にある ノーゥット (Node; ノード; 節)に、
通った エーッチ (Edge) の点数を書くぜ☆」

20191020comp47a5.png

KIFUWARABE_80x100x8_01_Futu.gif
「 過ぎたところは消す☆
これで今、 スターット (Start; スタート; 開始)地点は3つになったぜ☆」

20191020comp47a6.png

KIFUWARABE_80x100x8_01_Futu.gif
「 同様に、デスッテネーィション(Destination)側にある ノーゥット(Node)に、
通ったエーッチ(Edge)の合計を書くぜ☆ ここで☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ノーゥット(Node)には既に 点数が書かれているものもあると思う☆
ここでは 数の小さい方を残せだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ、ノードの点数には パァーッ(Path; 経路)も ↓タグ付けしておく必要があるわね」

20191020comp47a6.png

KIFUWARABE_80x100x8_01_Futu.gif
「 それもそうかだぜ☆」

20191020comp47a7.png

KIFUWARABE_80x100x8_01_Futu.gif
「 同様に 過ぎたところは消す☆
ゴールは除くと、
スターット(Start)地点は6つになったぜ☆」

20191020comp47a8b1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑同様に、デスッテネーィション(Destination)側にある ノーゥット(Node)に、
通ったエーッチ(Edge)の合計を書くぜ☆ ここで☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 同様に、ノーゥット(Node)には既に 点数が書かれているものもあると思う☆
数の小さい方を残せだぜ☆」

20191020comp47a9.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 他のルートでやったとこは、もう やらなくていいんじゃないの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 うーん、むずかしいものだな☆」

お父んのやり方

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ わたしが やってみるかだぜ☆」

20191020comp48a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 スタート地点を、壁に 釘で 打ち付けるとしよう☆
玉が 糸で つながっているので、重力で 下に落ちるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 うむむ☆」

20191020comp48a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑次に第2世代で同世代決戦だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ここが むずかしい☆」

20191020comp48a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑隣から やってきたときの合計も気になるが……☆」

20191020comp48a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑端から 端へ移動したときの合計も気になるよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ヨコに進んでどうすんの?」

20191020comp48a4b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ヨコのつながりを 切ろうぜ☆?」

20191020comp48a4b2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑あっ、二分木になった!」

20191020comp48a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑次は第三世代だな☆
ここは ヨコの線を切らなくても、ゴールに最小で たどり着いたもの勝ちだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 あっさり読み切ったな☆ 何でだぜ☆?」

20191020comp48a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 下に行くだけ という作戦勝ちだぜ☆
その作戦に持ち込むように、同世代決戦してヨコのつながりを切ったんだぜ☆」

ダイクストラのおっさんのやり方

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もっと専門的に見ていくことにしよう☆
誰が どこからコピーしたのか知らないが、 Wikipediaの『ダイクストラ法』の日本語版のページには
英語版にはない説明が載っている☆ スペインや韓国とも違う☆ 日本語版だけ 独自の世界に行っている☆」

20191020comp49a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑大文字のVは 型 だと思ってくれだぜ☆ ノーゥット(Node)型を V と書くとしよう☆」

20191020comp49a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑小文字のvは インスタンス(Instance) だと思ってくれだぜ☆ 何でも指せる☆
しかし 何でも指せるのでは 逆に説明に使いづらい……☆」

20191020comp49a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑そこで 小文字のvは ノーゥット(Node)型のインスタンス(Instance) だけを示すと 縛りを入れるぜ☆」

20191020comp49a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ foreach v ∈V と示せば、図中の各ノードのことを言ってるのが分かるな☆」

20191020comp49a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 小文字のsは スタート地点の ノーゥット(Node) を示しているとするぜ☆」

20191020comp49a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 d(v) という関数は ディスタンス(Distance)の頭文字なのだろう☆
s からの経路の数の合計を出すぜ☆」

20191020comp49a8.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コンピューター・プログラミング を やり慣れていると d(v) という関数に値をセットする表記は 慣れないし、
英語版でも韓国版でもスペイン版でも dist[v] と配列になっているし、分かりやすい☆
日本語版のWikipediaだけ読んでたら 読み替えの 負荷が大きい☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 スタートのノードには 0 を、
それ以外のノードには コンピューターが表現できる整数型の最大値を入れておけばいいだろう☆」

20191020comp49a11.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 同様に prev(v) には Undefined を入れておけだぜ☆
べつに None でも Null でも 無いという意味なら なんでもいい☆
prev(v) というのは、最短経路を辿っているとき、自分の1つ前のノードのことだぜ☆
もちろん英語版では prev[v] という配列になっている☆
日本語版Wikipediaで数学を調べる場合は、
書いたおっさんコンピューター・プログラミングやってないな、ぐらいに思えだぜ☆」

20191020comp49a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 また、空っぽの Q というものがあるとしよう☆
キューゥ(Queue)の頭文字だと思うが深い意味は無いだろう☆ これは容器なんで、中身に何かを入れたり、抜いたりできるぜ☆
上図は 空っぽだぜ☆ 空集合☆」

20191020comp49a9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ある意味、Q というのは V の中身の すべての組み合わせ を取りうる何か状態のようなものだと言えるだろう☆」

20191020comp49a10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑そういう意味で、Q は V の部分集合ということができるぜ☆
困ったことに  記号の意味は  を兼ねる場合があるので、どっちの意味で使われているかは そのとき考えろだぜ☆
ここでは、Vの中身に無いものはQの中身にもない、ぐらいの意味だぜ☆」

20191020comp49a12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑で、各vについて、vをQに入れろだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Vの中身を Qに全部入れるだけの話が 長いな……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここまでが 前処理☆ 次からが 本処理☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 たいしたこと言ってないのに 数学は むずかしく書くわねぇ」

20191020comp49a13.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑本処理は、Qに何か入っている間、ずっと続くぜ☆
これが最初に出てくるということは、ノードを減らしていくのが この問題を解くための 大戦略 ということだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 消去して 組み合わせを減らしていくことが 一番よく効く 問題の本質への解決方法なのだろう☆」

20191020comp49a14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑d(v) を表示してみるぜ☆」

20191020comp49a15.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ダイクストラの創始した方法では、Qから d(v) が一番小さい v を取り除いて、それを u とするぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 最初に 取り除くのねぇ」

20191020comp49a16.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑数学では foreach に条件を使うことで、絞り込みができる☆
プログラム言語では 絞り込んでから foreach するかと思う☆ まあ、読み替えろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑で、 日本語版の Wikipedia では Q ではなく V から v を取っている☆
誰が何考えて どこからコピーしてきて そう書いたのかは知らん☆
英語版では Q から v を取っている☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 せっかく Q でノードを減らしていってるのに、日本語版Wikipediaでは
なんで V を使って foreach するの??」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 知らん☆」

20191020comp49a18.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アルゴリズム上、uとvは隣接しているぜ☆
これは セグメンッ(Segment; 線分) とか、 エーッチ(Edge; 辺) とか いろいろな呼び方があるが、
ノードと ノートの間には……☆」

20191020comp49a19.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑数がある☆ これ そのものに 名前は付いていないが、
Length(u, v) で この数を調べられることにしよう☆」

20191020comp49a20.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ d(u) と、Length(u, v) の違いは しっかり見分けてくれだぜ☆」

20191020comp49a21.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑sからvまでの長さを求めて、 alt に入れようぜ☆」

20191020comp49a22.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑d(u) より小さな alt を探しているわけだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 それぐらい わたしも 探していたが……☆
alt の方が小さいということは、より最小の経路を回ってきたということだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 u は Qに残っているvの中で 最小のd(v) というのが ダイクストラの工夫なのよ」

20191020comp49a23.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ より近道を見つけた場合は、v に関する記録を更新しろだぜ☆
それ以外は 何もしない☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プログラムで書けることを 数学風の書き方をしているけど、
計算機科学による説明の方が 読みやすいのだから、
日本語版Wikipediaの数学の記事は 参考にしてはいけないのよ」

問題を作成しようぜ☆?

KIFUWARABE_80x100x8_01_Futu.gif
「 さて、プログラムの練習をしようにも、何から手を付ければいいのか……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ノーゥット(Node)を主とするか、エーッチ(Edge)を手とするかで分かれるな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 全体を1本の セグメンッ(Segment)と考えて、それに バイパース(Bypass)を 増やしていけばいいのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 というと☆?」

20191020comp50a1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑まず 1つの セグメンッ(Segment) を作るのよ。
ここから ランダムに 2つのノード u,v を選ぶの」

20191020comp50a2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑そして 新しいノード w を作成し、 u,w と v,w をつなげるのよ。
この操作なら 1本の線が 複線 になっているだけだから、 立体交差 が起こらないメリットがあるのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 Sコンビネーター感ある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ、ここで Kコンビネーターとか出てくるのかだぜ☆?」

20191020comp50a3.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑同様に、新しいノード v3 を作成し、 v2,v3 と v1,w3 をつなげるのよ」

20191020comp50a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑これを続けると 網 は作れそうだよな☆」

20191020comp50a5.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑Bypassなしでひとつ飛びのノードをつないでもいいのよ!」

KIFUWARABE_80x100x8_01_Futu.gif
「 立体交差しそう☆」

20191020comp50a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑じゃあ 複線 のメリットを残しつつ、長所を伸ばしていこうぜ☆
複線を作ったときに その両端の u,v ともに 生えている セグメンッ(Segment)の本数が3本以上の場合に限り……☆」

20191020comp50a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑線分 u,v は 削除して構わないことにしようぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Kコンビネーター感ある☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それって 線分 u,v の途中に 新しいノード w を作るのと同じなのよ」

20191020comp51a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 このアルゴリズムでは 将棋盤のようなグリッドも引けないと思うぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 立体交差しないように 工夫したからな☆ 当然だろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 十字交差 は していいのでは☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 立体交差させずに 十字交差 させるのは むずかしいのよ!」

20191020comp51a2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑人の目には a と b は つなげても良さそうに見えるけど、
a と c は 他の線に交わってしまうので つなげられないということを 説明することが むずかしいのよ」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 a と c の違いを 説明することが むずかしいのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 a と c は XOR(エックス・オア)の関係にあるのでは☆? 例えば……☆」

20191020comp51a2b1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑こう見せれば c の方がつながり、 a の方は つながらないように見えるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それは 線1本の違いよ」

20191020comp51a2b2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 このように 外を通っている線があれば c は a の外側に回ることは ないわよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 輪っか であることを説明できたら a と b は 接続しても 他の線と交差しないことを 説明できるかもしれない☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 輪っか じゃ わかんないのよ!」

20191020comp51a2b2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑全てが外側に面している円の円周上 にある2点は、複線 にしても 他の線と重複せず 描く方法があるぜ☆
見ようによっては 内側にしても同じだが……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 どうやって それを判定するんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 外周判定アルゴリズム を作るのが先かだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あらゆる内側の空間 は、見ようによっては 外周 なんじゃないの?
服を裏返すみたいに ネットワークの図形を裏返すのよ」

点と凹多角形の内外判定を行う

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑角度を使うと 内側か 外側かは 判定できるようだが……☆
外周かどうかは☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ジオメトリーを使わずに、ロジックだけで 判定できないものなのか☆?」

20191020comp51a2b3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑a から b に線を引いても、他の線と交わらないことを判定するアルゴリズムかだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 他の線と交わることを判定するアルゴリズム を作って、それを否定した方が早くない?」

20191020comp52a1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 まず トーゥレス(Torus; トーラス)を作って、そこに線を引きましょう」

KIFUWARABE_80x100x8_01_Futu.gif
「 分からん言葉を使い始めた☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 トーゥレスは 中身が詰まっていないドーナツの表面だな☆
ドラクエの地球の形で有名なやつだぜ☆」

20191020comp52a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑しかし 内側も 外側も なくなってしまった……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 目を覚ましなさい。 最初から 内側とか 外側 というものは なかったのよ」

20191020comp52a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑服を裏返して脱ぐ のを トーゥレス で縛って禁じたわけかだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 何を言っているか分からん☆ 必殺技の解説は禁止だぜ☆」

20191020comp52a4b1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑a と b がいわゆる外周にいるかどうかは、
2通りのコースで a と b がくっつけば 確認できると
アッサンプション (Assumption; 仮説)を立てましょう」

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑この絵では f と e が、向かって左側を通って1周して 他の線と交わらずに
線をつなげるような見た目をしているが、
実際には a,f,b,d の線に遮られるはずだろ☆ 平面とは対応してないんじゃないのか☆?」

20191020comp52a4b2.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ ↑ サレンダァ(Sylinder; シリンダー; 筒)で十分だったのかしら」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 内側と 外側が 分かれた……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑上図の 赤と 緑の どちらかの線が 遮られたかどうかの判定というのは
できるものなのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 むしろ 遮られないものが タテ一列に並ぶのよ。
ここにタテ一列に並んでいる2つのノードは 他の線と交差せずに つながるの」

20191020comp51a2b4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑今見ているのは この例 なので……☆」

20191020comp51a2b5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑c と b は 線を横切ってしまうのが どういうことなのか 絵にしてみるかだぜ☆
……、あれ、c と b は 線を横切らずに つなげることができるぜ☆」

20191020comp51a2b6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑このように都合よく見ることができるだろ☆」

20191020comp53a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑だから c と b は 他の線と交わらずに つなぐくとができる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 うぎぎぎぎ!」

20191020comp54a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑これぐらい 格子を入れて やっと b と c は つながらない、ぐらいだぜ☆」

20191020comp54a2.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑これだけやっても ぐるっと 回ってくるからな☆」

20191020comp54a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑なんだこれは……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんなのよ これ!」

20191020comp55a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑b も この位置にいれば 立体交差してしまうわけだが、
ジオメトリーを使わず、ノードとノードの接続の関係だけ知っていて
立体交差のないグラフを描けると、判定する方法はあるだろうか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 接続している辺の数でも数えれば なんとかなるのだろうか☆?」

20191020comp54a2b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑言ってしまえば 上図の 左図と 右図 を別クラスターに仕分ける判定方法は存在するか☆?」」

KIFUWARABE_80x100x8_01_Futu.gif
「 例が少なすぎてなんとも……☆
サンプルを増やせば 何か見えてくるのでは☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あんたの直観で一発で仕留められないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ノードの数が 6 に対して、
左図は ノードの接続数が 5、4、4、3,3、3 と並んでいるのは 何かを感じるぜ☆
ノード数が 5 でも このような比較の図は 作れるだろうか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 やってみるぜ☆」

20191020comp56a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑b と d は つながらないぜ☆」

20191020comp56a2.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ノードに接続しているエッジの数は こうだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ノードの数が 5 に対して、
左図は ノードの接続数が 4、4、3,3、2 と並んでいるのは 何かを感じるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんらかの許容できる上限値があるのかしら?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 誰が こういう問題に詳しいのかしら?」

化学構造情報とグラフ理論

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑バケ学だろ☆ 調べて寝よう……☆」

<書きかけ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事