新着Pick
1159Picks
Pick に失敗しました

人気 Picker
「アルゴリズムのありがたさはなかなか分からないかもしれない」

ダイクストラはグラフに表現されていれば計算できるので、例えばカーナビや鉄道の乗り換えなどは応用が考えやすいと思います。

求められているのはこれまでに提案されたアルゴリズムを理解し使いこなす能力もだけど、新しいアルゴリズムを生み出す力。例えば、我々が日々お世話になっている動画配信でもその動画情報をいかに小さくコンパクトに圧縮するか、いまだに研究が世界中で繰り広げられています。「もう完成した技術」ではないのです。
アルゴリズムという言葉は今や誰もが耳にする言葉になりました。

これを使いこなしている天才数学プログラマーたちは、いかなる数学的な思考で問題を解いているのか。

AtCoderの高橋さんに、初歩中の初歩の問題を提供してもらうことで、そのせめて一端には触れることができるのではないでしょうか。休日の頭の体操にどうぞ活用いただけましたら幸いです。
アルゴリズムの例題が紹介されていて、読んでいて楽しい記事でした。この「楽しい」って感覚は、プログラミング教育の議論でとても大切なことです。

アルゴリズムにしても、プログラミングにしても「あくまでツールだから目的がないとダメ」という議論があるのですが、これ実は必ずしも真ではありません。今回のようにアルゴリズムそれ自体の楽しさが元来あるわけで、アルゴリズムを学ぶこと自体が目的化しても私は悪くないと思っています。楽しさが先にあるのであって、「社会の課題解決のために」というのは、大人の押し付けであることがしばしばあります。

とは言え、社会の課題解決自体が、本来楽しくてやりがいあるものです。その本質的な楽しさを体感してもらうことで、アルゴリズムやプログラミングがもっと楽しくなる。そんな学びのスパイラルをライフイズテックでは狙っています。
これを見て「面白い!」と思われた方にオススメなのは、各種ソートのアルゴリズム。
大学の頃実験で色々比較したのを思い出した。アルゴリズムによって全然スピードが違う。ググってみたら、こんなのが出てきて、ワクワク!

ソートアルゴリズム12種を可視化してみた
https://qiita.com/r-ngtm/items/f4fa55c77459f63a5228
アルゴリズムの世界は、よく知りませんが、ここでの新しい理論は「論理的真理」の発見で面白そう。
ダイクストラ応用の、カーナビの経路計算には少し関わっていたので、興味深いです。

余談ですが、カーナビ、
基本のアルゴリズムは同じだが、高速か一般道か?、(歩行者の多い)狭い道を誘導するか?、(衝突のリスクが上がる)右折を左折に対しどの程度優先させるか?などの様々なパラメーターがあります。
賢いカーナビの使い方は、それらの「クセ」をわかって、わざと裏切って別の道を通り、再計算させること。
Dijkstra's algorithm ですね スペリングからお察しのとうりオランダの方ですよ メリケンの子は「ディジェクストラ?」って読んじゃいますよ、教えないと

https://en.m.wikipedia.org/wiki/Edsger_W._Dijkstra

で、コレ↑ちょっと読んでみたら、ついこの間1999年にリタイヤ、2002年お亡くなり、という事実にオドロキ  ワタシもシヌ直前まで働きたいものですねぇ

あ、ちなみにこのアルゴリズム、正の重みのみの directed グラフ用ですよ 負の重みがあると、答え間違えます ワタシのクラス↓の宿題に、「(|V|, |E|) = (3, 3) で、negative cost cycle を持たない directed グラフのうち、Dijkstra が間違った答えを出すものを設計しなさい」っていう問題ありますよ カンタンなので皆さんもやってみて!(問題には続きがあって、「A*だと間違えないのも示しなさい」です)

こういうのを minimum deceptive problem (MDP) design 問題といいます  MDP一般は、アルゴリズムを別の視点から考えさせる、教育的にいいトピックだと思っています あ、機械学習にも応用されてますよ


ご参考 機械工学の学生さんに、この分野の面白さを紹介するのが目的のクラスですよ
http://www.umich.edu/~me558/
中学受験算数のちょっと気の効いた解法を探すような問題に通ずるところがありますね。中学受験をしたわけではないのであまり知りませんが、鶴亀算とか、方程式立てればできるような話を敢えて算数の領域だけで解かせる、みたいな。(自分は苦手です、こういうの…大学受験の数学を教えていたことはあるけど、受験算数は無理…)

コードの書き方なんてあとから勉強してもよいし、こういうアルゴリズムの考え方なんかをプログラミング教育でしっかりやってくれるといいですね。こういう話なら小学校の算数の先生もとっつきやすいだろうし。
面白かった。プログラミングどこかでガッツリ勉強したいです。
楽しませてもらいました(*^^*)

応用編を期待しています!!
考えることは楽しいこと。
発見は楽しいこと。

改めてそんなことを感じさせてくれるアタマの体操でした。
こういう仕掛けを仕事上の問いでも入れていきたいものです。
この連載について
コンピュータのプログラミングが転機を迎えている。一部のエンジニアだけでなく、子供から多くの大人たちが取り組むべき対象として認知され始めたのだ。ソフトウェアを作るまでいかなくとも、プログラミングを通じて、何を創造していけるのか。次代を生き抜く「教養」としてのプログラミングをレポートする特集。