* Retranslate the complete Japanese online edition from Chinese * Fit Japanese homepage labels and localize heading permalinks * Point Japanese contribution instructions to the Japanese preview * Replace locale conditionals with multilingual UI tables
4.8 KiB
comments, icon
| comments | icon |
|---|---|
| true | material/rocket-launch-outline |
序文
数年前、私は力扣で「剑指 Offer」シリーズの解説を公開し、多くの読者から励ましと支援をいただきました。読者との交流で最もよく尋ねられたのが、「アルゴリズムはどう学び始めればよいのか」という質問です。私は次第に、この問いに強い関心を持つようになりました。
手探りのまま問題演習に取り組む方法は、単純で直接的、しかも効果があるためか、最もよく選ばれているようです。ただ、問題演習は「マインスイーパ」に似ています。独学の力がある人は地雷を一つずつ取り除けますが、基礎が足りない人は何度も地雷を踏み、挫折するたびに後ずさりしてしまうかもしれません。教科書を通読する方法も一般的ですが、就職を目指す人は、卒業論文、履歴書の提出、筆記試験や面接の準備で精一杯です。分厚い本を読みこなすことは、大きな難題になりがちです。
あなたも同じような悩みを抱えているなら、幸いにもこの本があなたを「見つけて」くれました。本書はこの問いに対する私なりの答えであり、最適解ではなくても、少なくとも前向きな試みです。本書を読んだだけで内定を得られるわけではありませんが、データ構造とアルゴリズムの「知識の地図」を探り、さまざまな「地雷」の形、大きさ、分布を知り、多様な「地雷の取り除き方」を身に付ける手助けをします。それらを身に付ければ、より自在に問題演習や文献の読解に取り組み、体系的な知識を少しずつ築けるはずです。
私はファインマン教授の言葉、「知識は無料ではありません。注意を払わなければなりません。」に深く共感しています。この意味では、本書も完全に「無料」ではありません。あなたが本書に注いでくれる貴重な「注意」に応えるため、私も最大限の「注意」を払い、全力で執筆に取り組みます。
自分の学識や力がまだ十分でないことは承知しています。内容はしばらく推敲を重ねてきましたが、なお多くの誤りが残っているはずです。先生方や学習者の皆さんからのご批判、ご指摘をお願いいたします。
Hello、アルゴリズム!
コンピュータの登場は、世界に大きな変革をもたらしました。高速な計算能力と優れたプログラマビリティを備えたコンピュータは、アルゴリズムの実行とデータ処理に理想的な媒体となりました。ゲームの写実的な映像、自動運転の知的な判断、AlphaGo の見事な対局、ChatGPT の自然な対話などは、いずれもコンピュータ上でアルゴリズムが巧みに働く例です。
実際には、コンピュータが生まれる前から、アルゴリズムとデータ構造は世界の隅々に存在していました。初期のアルゴリズムは、古代の数え方や道具の製作手順など、比較的単純でした。文明が進むにつれ、アルゴリズムも精緻で複雑になりました。巧みな職人の技、生産力を解き放つ工業製品、宇宙の運行を説明する科学法則まで、平凡なものにも驚異的なものにも、その背後には巧妙なアルゴリズムの考え方が隠れています。
データ構造も同じく至るところにあります。大きくは社会的ネットワーク、小さくは地下鉄の路線まで、多くのシステムは「グラフ」でモデル化できます。国から家庭まで、社会の主な組織形態には「木」の特徴が見られます。冬の重ね着は「スタック」のように、最初に着た服を最後に脱ぎます。バドミントンのシャトルの筒は、一方から入れて他方から取り出す「キュー」です。辞書は「ハッシュテーブル」のように、目的の項目を素早く探せます。
本書は、分かりやすいアニメーション図解と実行できるコード例を通して、アルゴリズムとデータ構造の中心的な概念を理解し、プログラミングで実装できるようになることを目指しています。そのうえで、複雑な世界にアルゴリズムがどのように息づいているかを示し、その美しさを伝えたいと考えています。本書があなたの役に立つことを願っています。
