* 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.5 KiB
まとめ
要点の振り返り
- アルゴリズムは日常生活の至るところにあり、手の届かない難解な知識ではありません。私たちはすでに、多くのアルゴリズムを知らず知らずに学び、大小さまざまな問題の解決に使っています。
- 辞書を引く仕組みは二分探索と同じです。二分探索は、重要なアルゴリズムの考え方である分割統治を体現しています。
- トランプを並べる過程は挿入ソートによく似ています。挿入ソートは、小規模なデータ集合のソートに適しています。
- お釣りを渡す手順は本質的に貪欲法であり、各手順でその時点で最もよいと思われる選択をします。
- アルゴリズムは、有限の時間内に特定の問題を解く命令や操作手順の集まりです。データ構造は、コンピュータ内でデータを組織化して格納する方法です。
- データ構造とアルゴリズムは密接に結び付いています。データ構造はアルゴリズムの土台であり、アルゴリズムはデータ構造に生命を吹き込みます。
- データ構造とアルゴリズムは、ブロックの組み立てに例えられます。ブロックはデータ、形や接続方法はデータ構造、組み立ての手順はアルゴリズムに対応します。
Q & A
Q:プログラマーとして日々働いていますが、アルゴリズムで問題を解いたことはありません。一般的なアルゴリズムは言語に組み込まれており、そのまま使えます。これは、仕事上の問題がまだアルゴリズムを必要とする段階に達していないということでしょうか?
具体的な仕事のスキルを武術の「技」に例えるなら、基礎科目はむしろ「内功」、つまり内に蓄えた力に近いでしょう。
アルゴリズムやほかの基礎科目を学ぶ意義は、仕事でゼロから実装することではなく、学んだ知識を基に専門的な対応や判断を行い、仕事全体の質を高めることにあると私は考えます。簡単な例として、各プログラミング言語に組み込まれたソート関数を考えましょう。
- データ構造とアルゴリズムを学んでいなければ、どんなデータもその関数に渡すかもしれません。動作は滑らかで性能もよく、問題はないように見えます。
- 学んでいれば、組み込みソートの時間計算量が
O(n \log n)だと分かります。データが学籍番号のような固定桁数の整数なら、さらに効率のよい「基数ソート」でO(nk)に減らせます。ここでkは桁数です。データが非常に多ければ、短縮した実行時間はコスト削減や利用体験の改善など、大きな価値を生みます。
エンジニアリングでは最適解に達するのが難しい問題が多く、数多くの問題が「そこそこ」の解決にとどまっています。難しさは問題そのものの性質だけでなく、それを見る人の知識にも左右されます。知識が充実し経験が増えるほど、分析は深まり、問題をより見事に解けるようになります。
Q:今ではほとんどのコードを AI エージェントに書いてもらいます。それでもアルゴリズムを学ぶ必要はありますか?
李沐先生の言葉を引用します。「エージェントは能力の増幅器、つまり能力 x10 であって、加算器、つまり能力 +10 ではない」。
AI が能力の増幅器なら、元になる「能力」も重要です。特に二つを蓄える価値があると思います。一つは表現力、特に AI と協働する力です。目標を明確にし、背景を補い、ずれを早めに修正します。AI に問題を説明することは、自分の考えを整理することでもあります。もう一つは基礎知識です。細部は AI に補ってもらえますが、基本概念を自分で理解してこそ、要点を突く質問ができ、正誤を判断し、出力を役立つ成果に変えられます。
AI の特徴的な点は、従来の道具のように機能の境界が明確でないことです。水のように、使う人によって異なる形になります。人の能力が高く、センスがよいほど、AI の増幅効果もはっきり表れます。