聞くだけでポインタと二分木のイメージが固まる動画ガイド
5分54秒 | アルゴリズム基礎FE
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
こんにちは、プログラミングの世界って本当に奥が深いですよね。 中には使いこなせばとてつもない力を与えてくれる、まるで魔法みたいなツールがあるんです。 今回はですね、その中でも特に強力で、でも同時にすっごく危険な、諸刃の剣とも言える2つの概念について一緒に解き明かしていきましょう。 さて、いきなりですけど、ちょっと変な質問をさせてください。もし誰かが、あなたの部屋の住所を知っている それだけで、勝手に部屋の模様替えをしちゃったらどうです?なんか、ちょっと気味悪くないですか? でもね、実はこれこそが、僕たちが最初に見ていく強力なツールの本質をもう完璧に表してる例え話なんです。 オーケー、じゃあ本題に入っていきましょう。そのツールの名前はポインタ。これ、単なる変数とは訳が違うんです。 なんていうか、自分自身は実体を持たずに、影から全部を操っちゃう黒幕みたいな、一種の間接的な支配力とでも言うんでしょうか。 このスライドが、その違いをすごく分かりやすく示してくれてますね。普通の変数っていうのは、まあ、データそのものを入れるための箱です。 スコアが100点だったら箱の中身は100。シンプルですよね。一方、ポインタっていうのは、箱の中にデータを直接入れないんです。 その代わり、そのデータが入っている箱はメモリのこの場所にありますよっていう住所だけを書いたメモをぽつんと入れておく。そういうイメージなんです。 なんでそんな遠回しなことするの?って思いますよね。それがね、遠隔操作をするためなんです。 普通に関数に値を渡すだけだと、それはただのコピー。元のデータには何の影響もないんです。でも、ポインタ、 つまり住所を渡しちゃうと話は全く別。関数はその住所を頼りにして、あなたの本当の部屋に直接やってきて、家具を動かし始めるんですよ。 こっちはただ住所を教えただけなのに、気づいたら部屋が勝手に模様替えされてる。っていうこの住人の戸惑い。これこそがポインタが持つ直接的なパワーの証拠なんです。 でも、この力には常にやばい危険が付きまわります。もし、住所が書かれてない真っ白なメモ、 プログラミングで言うところのヌルポインタですね。これを辿ってしまったらどうなるか。 プログラムは、え、どこ行けばいいの?って存在しない場所を捜し回ってパニックになって、最悪システム全体がクラッシュすることだってある。まさに深淵を覗き込むような行為なんですよね。 さてさて、気持ちを切り替えて、次の強力なツールに移りましょうか。今度は、膨大な情報の海の中から たった一つの答えをもう本当に一瞬で見つけ出す、そんな不可能を可能にしちゃう救世主、それが二分木です。 二分木って、一体何なのか。これね、すごくシンプルなんです。 スライドにある通り、あらゆる分かれ道で選択肢が常に2つしかない。左に行くか右に行くか。 たったこれだけの単純なルールが、後で分かるんですけど、信じられないくらいの効率を生み出すんですよ。 じゃあ、その力を実感してもらうために、ちょっと具体的な問題を考えてみましょう。はい、ここに100万人の人がいます。 この中から、たった一人の特定の人物を探し出してください。いや、普通に考えたら、 端から順番に、あなたですか?あなたですか?って聞いていったら、運が悪かったら100万回確認しなきゃいけないですよね。気が遠くなります。 では、もしこの100万人がうまいこと二分木の構造で整理されていたとしたら、 目的の人物に辿り着くまでに、一体何回の左か右かの選択が必要になると思いますか? ちょっと想像してみてください。100万ですよ。何千回、何万回? 正解はですね、なんと、たったの20回です。 え、20回?って思いません?信じられますか、これ?100万っていうあの途方もない数の中から たった20回の選択で、ピンポイントで「この人だ!」って見つけ出せるんです。このスピード感、いやもう本当に驚きですよね。 じゃあ、この魔法のタネは何なのか。このスライドがまさに核心を突いてます。一回選択するたびに、 探さなきゃいけない範囲がごっそり半分になるんです。100万人が50万人に、50万人が25万人にって、どんどん減っていく。 この、ある意味冷徹なまでの絞り込みこそが、コンピュータ科学の世界でO(log N)、いわゆる対数時間と呼ばれる驚異的な効率の正体なんですね。 しかも、もっと面白いのが、二分木ってただ速いだけじゃないってこと。 その構造そのものに隠された秩序が潜んでるんです。 例えば「中間順」っていうある決まった歩き方をすると、バラバラに入れたはずのデータが、あら不思議、小さい順に綺麗に整列して出てくるんですよ。 構造自体に意味があるって、なんだかエレガントですよね。 さて、ここまでポインタと二分木っていう2つの超強力な概念を見てきました。 最後にこれらが持っている力と危険のバランスについて、ちょっとまとめてみたいと思います。 いやー、もうこの言葉が今回見てきたツールの本質を完璧に捉えてますよね。 最強の武器であり、同時に自分を傷つける諸刃の剣。 ポインタはメモリを直接いじる絶大な力をくれますけど、一歩間違えればシステムを壊しちゃう。 二分木は圧倒的な探索スピードを実現しますけど、その構造がバランスを崩しちゃうと、効率はガクンと落ちてしまうんです。 最後に、皆さんにこの問いを投げかけて、今回は終わりにしたいと思います。 ポインタや二分木って、単にテストのために覚えるべきプログラミングの道具なんでしょうか。 それとも、物事を間接的に制御するってどういうことか、とか、膨大な問題をどうすればごっそり効率化できるのかっていう、 もっと根本的な考え方を僕たちに教えてくれるものなんでしょうか。 その答えを自分なりに考えてみることこそが、本当の意味でこれをマスターする最初の一歩なのかもしれないですね。
このコンテンツは Web society で視聴・学習できます。