SlideShare a Scribd company logo
1 of 37
Download to read offline
アルゴリズムのイメージを 擬人化する 
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

More Related Content

What's hot

勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 

What's hot (20)

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
双対性
双対性双対性
双対性
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
ダブリング
ダブリングダブリング
ダブリング
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライド
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
計算量
計算量計算量
計算量
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 

More from AtCoder Inc.

More from AtCoder Inc. (20)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
arc047
arc047arc047
arc047
 
abc032
abc032abc032
abc032
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
abc031
abc031abc031
abc031
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 

Recently uploaded

Recently uploaded (6)

2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 

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