← メディア一覧

スタックとキュー_最新の記憶と公平な処理

5分12秒 | アルゴリズム基礎FE

基本情報技術者試験の頻出テーマを解説した音声コンテンツです。

トランスクリプト(字幕テキスト)

The Deep Dive へようこそ。さて、今回のテーマは「スタック」と「キュー」です。これコンピューターサイエンスの基本ですけど、 ただ用語を覚えるだけだとなんか面白くないですよね。そうなんですよね。 で、提供された資料を読み解いていくと、これって実はシステムがどっちを選ぶかっていう話なのかなと。ほう。 最新の情報を優先するのか、それとも公平性を保つのかっていう、ある種の哲学の話なんじゃないかなって。 ああ、その感覚はすごく大事ですね。この「後が先か」っていう、本当にシンプルなルールがですね、 ウェブサイトの表示からメッセージのやり取りまで、私たちのデジタル体験の、まああらゆる場面を裏で支えてるんですよ。 なるほど。じゃあ今日はその核心に迫っていきましょうか。はい、ぜひ! まずは最新を優先するスタックから。資料にある「お皿洗い」の例えが、これすごく分かりやすいですよね。 ええ、秀逸な例えだと思います。洗ったお皿をこう、どんどん上に積み重ねていく。うんうん。 で、いざそのお皿を使う時って、当然一番上の、つまり最後に置いたお皿から取りますよね。 取りますね、自然と。これが「後入れ先出し(LIFO: Last In First Out)」ですね。 ええ。でもこの話が本当に面白くなるのは、実はここからでして。おお。 ウェブブラウザの「戻る」ボタンは、まあ分かりやすい例なんですけど、スタックの本当の価値っていうのは、 プログラムそのものの動きを管理してる点にあるんです。プログラムそのもの、ですか? はい、「コールスタック」って専門的に呼ぶんですが、プログラムが何か処理をするたびに、 その作業内容がスタックに「プッシュ」される。プッシュ、積まれるわけですね。そうです。 で、終わったら「ポップ」される、取り出される。コンピューターって基本この積み重ねで動いてるんです。 ということは、時々聞く「スタックオーバーフロー」っていうエラーは、ああ、はいはい。 文字通り、その「お皿」、つまりやるべき作業が、もう積み上がりすぎてテーブルから溢れちゃった、みたいな。 まさにその通りです。なるほど。単なるデータの整理方法じゃなくて、コンピューターの、もう心臓部そのものなんですね。 ええ、そのシンプルな積み重ねのアイデアがいかに根本的かっていうことですね。なるほどなあ。 スタックは最後の出来事を覚えておくのが得意、と。でもそれだとちょっと不公平が起きる場面もありますよね。 と言いますと?例えば、順番通りに処理しないとクレームになるような、そういう時ってどうするんでしょう。 いい質問ですね。そこで登場するのが、もう一方の主役、公平性を重んじる「キュー」です。キュー。 資料にもあったラーメン屋の行列とか、ところてんの例えがまさにそれですね。ああ、ところてん! ええ。「先入れ先出し(FIFO: First In First Out)」の世界です。 このところてんの例え、なんか一方通行な感じがすごく的確ですよね。一度押し出されたらもう戻れないっていう。 そうなんです。プリンターの印刷待ちなんかを想像してもらうと分かりやすいかなと。 はいはい、先に印刷ボタンを押した人の分から順番に出てきますもんね。ええ。 ただ、プリンターの例もいいんですが、キューの本当の力は現代のアプリが実現している「非同期処理」で発揮されるんです。 非同期処理?例えば、重い動画をアップロードする時って、処理中もアプリはサクサク動かせるじゃないですか。 ああ、確かに。アップロードの進捗バーを見ながら他の操作ができます。 あれは、エンコードとかアップロードみたいな重いタスクを一旦キューに入れておいて、 裏側で順番に処理させてるからなんです。へえー!FIFOのおかげで、ユーザーを待たせることなく、 リクエストされた順番通りに公平な処理が保証される。これが、快適なアプリの裏側にある「見えない行列」の正体なんです。 面白い。つまりスタックは文脈とか状態を記憶して「元に戻る」みたいな動きで使われて、ええ。 キューはタスクを順番通りに公平にさばくために使われると。同じデータの入れ物なのに思想が全く違うんですね。 その通りです。そして実際のシステムでは、この2つが巧みに組み合わされてるんですよ。ほう。 例えばチャットアプリで「送信取り消し」ができるのは、直前の操作を覚えているスタックのおかげかもしれない。 でも、送られたメッセージが相手に届く順番は、キューがしっかり管理している。 なるほど。場面に応じて最適なルールを使い分けてるわけですね。そういうことです。 いやあ、日常の当たり前がこんなシンプルなルールの組み合わせで成り立っていたとは。この話の核心は、 スタックはLIFO、キューはFIFOっていうだけじゃなくて、それが最新の記憶と公平な処理っていう、 システムの根幹をなす思想の現れだってことですね。まさに。ご理解いただけて嬉しいです。 では最後に少し思考を広げてみましょうか。はい。このスタックとキューというルールが、 実はもっと複雑なアルゴリズムの基礎になっています。あなたのスマートフォンの通知センター、 あるいはSNSのタイムライン、そこでは一体どんな見えない行列や見えない積み重ねが、 あなたに表示する情報を整理していると思いますか?そして、そのルールは本当に公平なものなんでしょうか。

このコンテンツは Web society で視聴・学習できます。