Submit Search
Upload
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
•
2 likes
•
5,008 views
Hiro H.
Follow
FuraIT # 3(2014.8.23) http://furait.connpass.com/event/7851/ での発表
Read less
Read more
Technology
Report
Share
Report
Share
1 of 82
Download Now
Download to read offline
Recommended
画像キャプションの自動生成
画像キャプションの自動生成
Yoshitaka Ushiku
【解説】 一般逆行列
【解説】 一般逆行列
Kenjiro Sugimoto
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
Naoaki Okazaki
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
fastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
More Related Content
What's hot
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
Deep Learning JP
トランザクション入門
トランザクション入門
Kumazaki Hiroki
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
Shunji Umetani
NLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZA
Megagon Labs
形状解析のための楕円フーリエ変換
形状解析のための楕円フーリエ変換
Tsukasa Fukunaga
Visual Studio CodeでRを使う
Visual Studio CodeでRを使う
Atsushi Hayakawa
自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai
良いコードとは
良いコードとは
Nobuyuki Matsui
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
線形?非線形?
線形?非線形?
nishio
最適輸送入門
最適輸送入門
joisino
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII
全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
Pythonのシグナル処理
Pythonのシグナル処理
Atsuo Ishimoto
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Stand alone self attention in vision models
Stand alone self attention in vision models
harmonylab
What's hot
(20)
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
トランザクション入門
トランザクション入門
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
NLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZA
形状解析のための楕円フーリエ変換
形状解析のための楕円フーリエ変換
Visual Studio CodeでRを使う
Visual Studio CodeでRを使う
自動定理証明の紹介
自動定理証明の紹介
良いコードとは
良いコードとは
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
線形?非線形?
線形?非線形?
最適輸送入門
最適輸送入門
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
全力解説!Transformer
全力解説!Transformer
Pythonのシグナル処理
Pythonのシグナル処理
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
Stand alone self attention in vision models
Stand alone self attention in vision models
More from Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
Hiro H.
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
MSYS2使いはじめました
MSYS2使いはじめました
Hiro H.
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
More from Hiro H.
(20)
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
MSYS2使いはじめました
MSYS2使いはじめました
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Recently uploaded
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
2024 03 CTEA
2024 03 CTEA
arts yokohama
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
Recently uploaded
(11)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
2024 04 minnanoito
2024 04 minnanoito
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
2024 03 CTEA
2024 03 CTEA
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
1.
FuraIT #3(2014.8.23) コンピュータに 「最長しりとり」「最短距離での JR線全線乗り尽くし」を 解いてもらった方法 H.Hiro @h_hiro_ /
http://hhiro.net/about/
2.
自己紹介
3.
H.Hiro (@h_hiro_) ● 情報系の研究員 ※2014年3月まで大学院生でした ● 中学生のときに部活で プログラミングに触れてから 好きになり、大学の専門も そちらに進みました
4.
【告知】 Sapporo.cpp(札幌C++勉強会) ● 札幌で勉強会やってます ● 不定期開催 (今年は開催頻度多め) ● 次の活動:8月30日(土) Ohotech(北見)で4人発表します
5.
よろしく お願いします
6.
今回の内容 (1)
7.
最長しりとり
8.
与えられた単語リストでしりとりを するとき、最大の単語数のものを 求める(1単語につき1回まで) 単語リスト → 最大の単語数の しりとり いた いちご こっぷ たこ たいこ ふた (6単語) いた→たこ→ こっぷ→ふた→ たいこ (5単語)
9.
今回の内容 (2)
10.
最短距離での JR線全線 乗り尽くし
11.
JR線全線を乗り尽くして、出発駅 まで戻るための最短ルートを求める ※JR線以外の交通機関は使わず 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
12.
これらを コンピュータに 解かせた話
13.
【補足1】 ● 以後で説明する解き方は 私が考案したというわけではありません。 ● ただ、すぐに使えるような プログラムの実装が見当たらず、 欲しくなったので自分で作ったという ものです。
14.
【補足2】 ● 今回の説明だけで、聴講される皆様が 具体的にプログラムまで書けるように なるところまでは想定していません。 ● 「こうやればコンピュータにとって 解きやすくなるんだ」という感覚をつかんで いただければ幸いです。 ● プログラムのソースコードや参考資料は 適宜示しております。
15.
【参考文献・資料】 ● 最長しりとり ● ポケモンでしりとりしたら最長何匹まで続く? 数学の卒論がネットで話題に http://nlab.itmedia.co.jp/nl/articles/1107/19/news080.html ● JR線全線乗り尽くし(中国人郵便配達問題) ● Saul I. Gass,
Carl M. Harris, 森村英典(監訳), 刀根薫(監訳), 伊理正夫 (監訳)(1999), 経営科学OR用語大事典, 朝倉書店, ISBN 4254121318 ● Bernhard Korte, Jens Vygen, 浅野孝夫(訳), 浅野泰仁(訳), 小野孝男 (訳), 平田富夫(訳) (2005), 組合せ最適化―理論とアルゴリズム, シュプリ ンガー・フェアラーク東京, ISBN 9784431711834 ※Wikipediaに掲載がありますが、それを書いたのは私です
16.
今回用いた 考え方
17.
グラフ理論 いくつかの点と、それらを結ぶ 辺からなるデータ構造を扱う 数学の一分野
18.
「理論」って言うと 難しそうに見えるけど
19.
パズルに近い 分野です
20.
グラフ理論
21.
いくつかの点(「頂点」ともいう)と それらを結ぶ辺からなる データ構造を「グラフ」という。 ※辺はちょうど2つの点を結ぶとする 例:点が5つ、辺が7つのグラフ
22.
JR線などの鉄道網は、 駅を点、路線を辺とする グラフ構造とみなせる 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
23.
実は、しりとりも グラフ構造とみなせる
24.
こうすればよい 単語リスト いた いちご こっぷ たこ たいこ ふた (6単語) い た こ ふ いちご ふた たいこ たこ こっぷいた
25.
しりとりを グラフ構造にして 何が嬉しいのか?
26.
どんな条件で 「最長しりとり」に なるのかが 見た目で はっきりする い た こ ふ いちご ふた たいこ たこ こっぷいた
27.
辺を1か所 辿ること が 単語を1回 使うこと を 意味する い た こ ふ いちご ふた たいこ たこ こっぷいた
28.
● どこかの点から スタートして ● 辺をなるべく多く 辿り ● 辿れた辺の本数が 最大になるような ものを見つければ よい い た こ ふ いちご ふた たいこ たこ こっぷいた
29.
ちなみに、 いまの問題の 答えは 右図の通り い た こ ふ いちご ふた たいこ たこ こっぷいた
30.
ちなみに、 いまの問題の 答えは 右図の通り (単語数:5) い た こ ふ いちご ふた たいこ たこ こっぷいた
31.
ただ、これを手計算で解くのは 問題が小さくないとまず無理 → だから 「コンピュータに解いてもらう」
32.
ただ、全部の通り方を 試しつくそうとすると 流石にコンピュータでも 時間がかかりすぎる
33.
ということで、 「一本の経路で ある」ことを コンピュータが 扱いやすい形で 表現する い た こ ふ いちご ふた たいこ たこ こっぷいた
34.
● しりとりの先頭文字: 出る線の数は 入る線の数より1多い ● しりとりの末尾文字: 出る線の数は 入る線の数より1少ない ● それ以外: 出る線の数は 入る線の数と同じ い た こ ふ いちご ふた たいこ たこ こっぷいた
35.
● しりとりの先頭文字: 出る線の数は 入る線の数より1多い ● しりとりの末尾文字: 出る線の数は 入る線の数より1少ない ● それ以外: 出る線の数は 入る線の数と同じ い た こ ふ いちご ふた たいこ たこ こっぷいた
36.
● しりとりの先頭文字: 出る線の数は 入る線の数より1多い ● しりとりの末尾文字: 出る線の数は 入る線の数より1少ない ● それ以外: 出る線の数は 入る線の数と同じ い た こ ふ いちご ふた たいこ たこ こっぷいた
37.
まとめると
38.
最長しりとりの要件 ● このグラフを一筆書きで辿れる 経路のうち、 最長(辺の数が最大)のもの そのために必要な条件 ● しりとりの先頭・末尾を除き、ある文字で 始まる単語と終わる単語の数は等しい =ある点に入る辺の数と、出る辺の数が等しい ● 先頭・末尾については数の差が 1
39.
さあ、 コンピュータに 解いてもらおう
40.
世の中には 便利なものが ある
41.
整数計画 ソルバー
42.
整数変数について、最適化したい式と 条件式を与え最適化するツール 例:Excelのソルバー、GLPK (https://www.gnu.org/software/glpk/) [最大化したい式] 2x +
y [条件式] x + y ≦ 10 3x + y ≦ 17 x, yは整数
43.
【補足】 ● ツールによって、使える条件式に制限が あります。 例えば「1次式しか使えない」など。 (= x +
3yなどは可、 x2 + yやx2 yなど変数同士の積は不可) ● 今回はGLPKを使ってます。 無料で使え、プログラムの中から呼び出して 使う方法も充実しています(基本はC言語だが 別の言語用ラッパーも多数ある)。
44.
今回の場合 [最大化したい式] Σe∈すべての単語 I(e) I(e)は、単語eを使ったときに1、そうでないときに0を返す [条件式] 始点の文字(頂点)sは Σe∈(sで始まる単語) I(e) - Σe∈(sで終わる単語) I(e)
= 1 始点の文字(頂点)gは Σe∈(gで始まる単語) I(e) - Σe∈(gで終わる単語) I(e) = -1 それ以外の文字(頂点)vは Σe∈(vで始まる単語) I(e) - Σe∈(vで終わる単語) I(e) = 0
45.
※注: 実際にはこれ以外に 「二つ以上の独立した(分断された) しりとりになっていない」ことの チェックが必要なのですが 割愛します
46.
実際に 作ったので これを使って 解いてみます http://chiraura.hhiro.net/shiritori/
47.
http://chiraura.hhiro.net/shiritori/ 単語リスト いた いちご こっぷ たこ たいこ ふた (6単語)
48.
700単語 くらいあっても 結構すぐに 解けます http://chiraura.hhiro.net/shiritori/
49.
ここまでの まとめ
50.
グラフ理論
51.
図にすることで 注目すべき点が 見えやすくなる
52.
● 辺を使う回数がなるべく多い 経路を考えればよい ● 単語は「先頭文字・ 末尾文字」の 組だけで分類 すればよい い た こ ふ いちご ふた たいこ たこ こっぷいた
53.
ということを 踏まえつつ 次の問題へ
54.
もう一つの問題
55.
最短距離での JR線全線 乗り尽くし
56.
地図:国土数値情報 鉄道データ N02-08 (2008年現在;JR以外の鉄道も入ってます)
57.
ルール
58.
● 家に帰るまでが乗り尽くしです ※全線を乗り尽くして出発駅に 戻るまでの距離で考える ● JR以外の交通機関は使わない 詳しくは、7月12日の私の 勉強会発表資料を http://www.slideshare.net/maraigue/chinese-postman http://blog.livedoor.jp/maraigue/archives/1747895.html
59.
解き方
60.
簡単のために JR北海道だけで 考えます
61.
JR北海道の路線図 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
62.
実は「出発駅に 戻らないとならない」と いう制約が 問題を簡単にしている
63.
(それでも結構 大変ではあるのだが)
64.
例えば、乗り尽くしにおいて 「岩見沢~滝川を1回」かつ 「新夕張~新得を2回」 という乗り方は可能か? 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
65.
→答えはNO。 出発駅に戻れなくなる。 「岩見沢~滝川を1回」かつ「新夕張~新得を2回」 では、例えば富良野から札幌に行くと 最後は戻って来られなくなる。 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
66.
例えば、乗り尽くしにおいて 「岩見沢~滝川を1回」 かつ「岩見沢~白石を2回」 かつ「岩見沢~追分を2回」 という乗り方は可能か? 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
67.
→答えはNO。同様の理由で、 岩見沢駅に帰れなくなる。 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
68.
結論: 1.路線網を分断するような辺は 合計で偶数回通る必要がある 2.各駅に入る回数と出る回数は 必ず同じである必要がある ※なお逆に、「各駅に出入りする辺数が 偶数になっていれば、乗り尽くしが 可能である」ことも数学的に示せます。 ぐぐる用キーワード:「オイラーグラフ」
69.
最短乗車距離の見つけ方(1): まず、行き止まりの路線は 絶対に2回通らないとならないので そこは落としてしまう。 (計算時間を減らす意味もある) 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
70.
最短乗車距離の見つけ方(1): まず、行き止まりの路線は 絶対に2回通らないとならないので そこは落としてしまう。 (計算時間を減らす意味もある) 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢
71.
最短乗車距離の見つけ方(1): まず、行き止まりの路線は 絶対に2回通らないとならないので そこは落としてしまう。 (計算時間を減らす意味もある) 沼ノ端 追分 新得南千歳 白石 滝川 旭川 富良野 岩見沢
72.
最短乗車距離の見つけ方(2): 路線図のうち、奇数本しか路線が入って こない駅を集め、そこを2つずつの組にし 距離が最小になるものを求める。 沼ノ端 追分 新得南千歳 白石 滝川 旭川 富良野 岩見沢
73.
最短乗車距離の見つけ方(2): 路線図のうち、奇数本しか路線が入って こない駅を集め、そこを2つずつの組にし 距離が最小になるものを求める。 赤丸の駅に繋がる辺数が全部偶数になった! 沼ノ端 追分 新得南千歳 白石 滝川 旭川 富良野 岩見沢
74.
最終結果:JR北海道全線 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢 ━━━━:2回通る ━━━━:1回通る JR北海道の総距離 2457.7km(営業キロ) 左図の総乗車距離 3565.0km(同) 総距離の145%
75.
最終結果:JR北海道全線 函館 五稜郭 中小国 大沼 森 長万部 室蘭 東室蘭 苫小牧 沼ノ端 追分 新得 夕張 新夕張 東釧路 根室 南千歳 新千歳空港 桑園 白石 新十津川 増毛 滝川 深川 旭川 新旭川 稚内 富良野 様似 岩見沢 一筆書き経路の例 白石→桑園→新十津川→桑園 →長万部→森→大沼→五稜郭 →函館→五稜郭→中小国→五稜郭 →大沼→森→長万部→東室蘭 →室蘭→東室蘭→苫小牧→様似 →苫小牧→沼ノ端→追分→岩見沢 →白石→南千歳→沼ノ端→南千歳 →新千歳空港→南千歳→追分 →新夕張→夕張→新夕張→新得 →東釧路→根室→東釧路→新旭川 →稚内→新旭川→旭川→深川 →増毛→深川→滝川→富良野 →新得→富良野→旭川→深川 →滝川→岩見沢→白石
76.
最短乗車距離の見つけ方(3): 「JR全線」のようにあまりに駅数が多いときは 路線を分断してから解くと 大幅に高速化される(組み合わせ爆発回避) ※詳細は省略 詳細: http://blog.livedoor.jp/maraigue/archives/1747895.html
77.
ソルバーに与えてあげる式 [最小化したい式] Σe∈A d(e)×I(e) Aは、入ってくる路線数が奇数本である駅を 2つ選んで取り出したものの集合 I(e)は、単語eを使ったときに1、そうでないときに0を返す d(e)は駅間距離(定数なので、I(e)と積を取ってよい) [条件式] 入ってくる路線数が奇数本である駅sについて Σe∈A,eの一方はs駅 I(e) = 1
78.
解いてみる ソースコード: https://github.com/maraigue/cpp-chinese-postman
79.
おわりに
80.
(1) グラフ理論という ツールを駆使して 「コンピュータに解ける パズル」にする
81.
(2) グラフ上の最適化は 条件が1次式で 書けるなら GLPKとかで楽できる
82.
ありがとう ございました
Download Now