アルゴリズムのイメージを 擬人化する 
AtCoder株式会社 代表取締役 
高橋 直大 
2014/11/10 
1
©AtCoder Inc. All rights reserved. 
2 
はじめに 
2014/11/10
内容について 
•初心者向きの内容になります。 
–ガチ勢は聞いても勉強にならないかも 
–可愛いキャラが後半に出てくるので、それ目当ても可 
•一応教育コンテンツです 
–擬人化をすることで良いこともあるんです。 
•気になった点は即突っ込んでください。 
–擬人化、一人でしてもつまらないので、属性追加とか大 歓迎です 
2014/11/10 
3
©AtCoder Inc. All rights reserved. 
4 
アルゴリズムをなぜ擬人化するのか? 
2014/11/10
なぜ擬人化? 
•アルゴリズムが擬人化出来ない人は、そのアルゴリ ズムを理解しているとは言えない! 
–アルゴリズムを十分に理解している人は、アルゴリズムの 擬人化が上手 
•もちろん、全員が全員擬人化しているわけではありません 
–逆に、あまり理解していないアルゴリズムは、上手く擬人 化できない 
•知らないアルゴリズムは擬人化出来ない! 
2014/11/10 
5
擬人化をしよう! 
•擬人化をするために必要なことは? 
–アルゴリズムの特徴を、出来るだけ多く捉える! 
•特徴が解らないと、安易な擬人化しか出来ません。 
–アルゴリズムを、別の視点から見てみる! 
•こういう入力の時はどう? 
•ああいう入力の時はどう? 
•そういった視点から、キャラクターの性格が形成されていく 
•こうした複数の視点を積極的に探していくことで、アルゴリズム を深く理解し、問題を解く能力が向上する! 
–競技プログラミングに直結するとは限りません 
2014/11/10 
6
©AtCoder Inc. All rights reserved. 
7 
ブルートフォース 
2014/11/10
あ 
•あ 
2014/11/10 
8
ブルートフォース 
•総当たりアルゴリズム 
–力づくで全部調べる 
•全てを力で解決する 
–蟻本さえも丸めて武器にしてしまう 
•だが、完全な脳筋キャラなのだろうか? 
2014/11/10 
9
ブルートフォース 
•ブルートフォースは劣ったアルゴリズム? 
–そんなことはありません! 
•計算量が問題ないのであれば、最もバグりにくく、 コード量も短くて済むことが多い! 
•力づくで解決できない問題ももちろんあるが、力づ くで良いのであれば、それが最も楽 
2014/11/10 
10
ブルートフォース 
•ブルートフォースは、「力づくで解決できる時にだけ 出てくる仕事人!」 
–蟻本も持ってるし、脳筋キャラでも勉強してる! 
–自分の役立つポイントは、彼が一番理解しています。 
•もしブルートフォースを組んでTLEしたら、ブルート フォースが悪いのではなく、悪いのはあなたです! 
2014/11/10 
11
ブルートフォース おまけ 
•なんで女の子じゃないの? 
–マッチョな女の子とか嬉しくないじゃん!!!! 
»ほんとは男2女2にしてねって言われたからです。 
•女の子としてイメージすると、また違ったキャラ付に 出来るかもしれない! 
–それはご来場の皆様にお任せします! 
2014/11/10 
12
©AtCoder Inc. All rights reserved. 
13 
深さ優先探索 
2014/11/10
あ 
•あ 
2014/11/10 
14
深さ優先探索 
•深さ優先探索は勇者である 
–色々なところに、主人公的な要素が存在する!!! 
2014/11/10 
15
深さ優先探索 
•「解に辿り着いたとしても、その解が最短である保 障がない点」 
–とりあえず答えにはたどり着くけど、普段の仕事はいい加 減 
•これだけ見ると「決して優等生なキャラクターではない」という部 分が強調される。 
•ヒーローの日常は多少不真面目なくらいが良い! 
2014/11/10 
16
深さ優先探索 
•「グラフが膨大でも、解に辿り着けることがある」 
–真面目に最短路を探すようなアルゴリズムでは、とても解 に辿り着けないような膨大なグラフでも、解に辿り着ける ことがある。 
•例えば、6*6のスライドパズルの探索とか 
–単純な実装では大抵上手くいかないけれども、ちょっとし た工夫で一気に探索結果が変わるのも魅力的 
2014/11/10 
17
深さ優先探索 
•「たまに空回りする」 
–グラフの形によっては、同じところで無限ループを起こし てしまう 
•ちょっとだめなところがあるのもポイント! 
–大事な仲間(メモリーちゃん)に覚えてもらうことにより、 空回りを起こさなくなる! 
•いわゆるメモ化再帰 
2014/11/10 
18
深さ優先探索 
•他にも色々な主人公要素が存在する 
–初期パーティ 
•アルゴリズムを学ぶ上で、「探索」は最初に身に着けるツールです。 最初から出てくること程、主人公らしい要素はありません。 
–目の前のことを無視できない。 
•隣接ノードのうち最も評価が高いものから探索する、というのはよ くおこなわれる手法であり、それをすることにより、遠くの良い解 よりも、近くの解に近づき易くなります。 
2014/11/10 
19
深さ優先探索 おまけ 
•もし深さ優先探索が女の子だったら? 
–ヤンデレっぽい子にした気がします 
•一人の男性に嵌ると、そこで無限ループを起こして抜け出せない 
–サークルクラッシャー的な子の可能性もあり 
•親しくなった男性の友人と次々に親しくなっていく 
•そういう目で見ると、探索系アルゴリズムは全部真人間ではなく なってしまうので、もうちょっと違った目線で見てあげたほうが良 いと思います>< 
–もちろん女勇者でも良い 
2014/11/10 
20
©AtCoder Inc. All rights reserved. 
21 
幅優先探索 
2014/11/10
あ 
•あ 
2014/11/10 
22
幅優先探索 
•委員長タイプの女の子! 
–真面目!かわいい! 
2014/11/10 
23
幅優先探索 
•委員長タイプの女の子! 
–全員に対して平等です。 
•始点からの距離に対して近い順に探索します。 
•偏ったりはしません。 
–常にきっちりと仕事をこなします。 
•出力される解は必ず最短であることが保障されている 
2014/11/10 
24
幅優先探索 
•やることが増え過ぎちゃうと対応できない 
–解までが遠いと、絶対に解に辿り着けない 
•目回してあわあわってなりそうでかわいい 
–あんまり工夫の余地がない 
•探索順を弄っても、そんなに探索効率は変わらない 
–凄く工夫するとダイクストラやA*になるが、これはもはや別物 
–融通の利かない感じがかわいい 
•深さ優先探索と大体正反対! 
2014/11/10 
25
©AtCoder Inc. All rights reserved. 
26 
ビームサーチ 
2014/11/10
あ 
•あ 
2014/11/10 
27
ビームサーチ 
•「ビーム」の名が表す通り、魔法少女ちゃん!! 
–杖からビームを打つよ! 
2014/11/10 
28
ビームサーチ 
•「ビーム」の名が表す通り、魔法少女ちゃん!! 
–杖からビームを打つよ! 
•・・・みたいな設定なわけがないです!!! 
2014/11/10 
29
ビームサーチ 
•そもそもビームサーチってどういうアルゴリズム? 
–良い状態を上位K個まで保持する 
•貪欲法だと、「最も良いものを選ぶ」 
•ビームサーチは、「上からK個を残す」 
–何が嬉しいの? 
•貪欲法だと上手くいかない問題はたくさんある 
•でも、貪欲法だと「ある程度上手くいく」問題もたくさんある 
•だったら、貪欲法で候補になるのをたくさん持っておけば、もっと 上手くいきやすいよね!って発想 
2014/11/10 
30
ビームサーチ 
•ビームサーチって地味じゃない? 
–「ビーム」は、探索のループ毎に、「常にK個のノードを探索 する」→「幅が一定」だからビームって呼ばれてるだけ 
•それなのに、「ビームサーチ」とかかっこいい名前がつ いてる 
こんなかっこいい 
ビームは打てない! 
2014/11/10 
31
ビームサーチ 
•結論:ビームサーチはコスプレ少女である 
–ビームなんて打てない!魔法も使えない! 
–コスプレしているだけ! 
2014/11/10 
32
ビームサーチ 
•では、ビームサーチちゃんは本当はどんな子なの か? 
–ビームサーチちゃんは、地方から出てきて都会に出てきた、 一人暮らしの大学1年生である! 
•書いて貰った段階では高校生だったんだけど、なんとなく大学1 年生にしました 
2014/11/10 
33
ビームサーチ 
•一人暮らしの貧乏な女の子 
–狭い部屋に一人で住んでる 
–お金がないので、コスプレ衣装を自分で作っている 
•前に作ったコスプレ衣装を参考に、改良したものを新たに作る 
–狭い部屋に住んでいるので、ものがあまり置けない 
•お気に入りの上位K着だけを残して、残りは捨ててしまう 
•地味なのに頑張ってるのが可愛い! 
•幸薄っぽいのが可愛い!!! 
2014/11/10 
34
©AtCoder Inc. All rights reserved. 
35 
最後に 
2014/11/10
今回のまとめ 
•ブルートフォースくん 
–力づくで押し切るのが得意です。使い方は考えましょう 
•深さ優先探索くん 
–とりあえずチューニングすればなんとかしてくれます。最 適解とかを出したい時は無理だけど 
•幅優先探索ちゃん 
–きっちりしてるけど、探索空間が膨大な時に注意しよう 
•ビームサーチちゃん 
–かわいい!地味かわいい! 
–意外と単純、簡単なアルゴリズムです!こわくないよ! 
•魔法使いだって考えると怖いけど、所詮コスプレ少女だよ! 
2014/11/10 
36
さいごに 
•今回の擬人化の説明は、「イラストにあった特徴」だ けを取り出しています。 
–よって、アルゴリズムの全ての特徴が生かせているわけで はない 
•例えば、深さ優先探索は、「辞書順最小」とかは見つけられる 
•一人が擬人化するだけでは、全ての特徴を列挙出 来ない 
–一部の特徴は、擬人化することでむしろ見えなくなってし まう 
•これを解決するには、みんなでそれぞれアルゴリズム を擬人化し、共有すれば良い! 
2014/11/10 
37

アルゴリズムのイメージを擬人化する