概要
本書(原題:Python Algorithms: Mastering Basic Algorithms in the Python Language)はアルゴリズムの分析と設計方法について,Pythonを使って説明します。古典的なアルゴリズムに焦点を絞って解説していますが,基本的なアルゴリズムによる問題解決の方法もしっかり理解できます。
本書はプログラミングとコンピュータサイエンスの最も重要で難しい分野を非常に読みやすい形で解説しています。アルゴリズムの理論とプログラミングの実践の両方をカバーし,理論が実際のPythonプログラムにどのように反映されているかを説明します。また,Pythonに組み込まれている有名なアルゴリズムとデータ構造について説明し,実装と評価について学ぶことができます。
本書で学べること
新しい問題を効率的なアルゴリズムで解ける問題に変換する方法。もしくは,効率的に解けない問題であると示す方法
数学と基本的な実験やベンチマークを使ってアルゴリズムとPythonのプログラムを分析する方法
古典的なアルゴリズムとデータ構造を深く理解し,Pythonでこれらを効率的に実装する方法
新しい問題を解くために新しいアルゴリズムを設計し,実績のある設計原理・設計技法を使って実装する方法
Pythonのハイパフォーマンスコンピューティングを実現する豊富なツールを使って実装を高速化する方法
こんな方におすすめ
Pythonの入門を終えた方 アルゴリズムを学習したい方 コンピュータサイエンスを専攻する学生
日本語版監訳者より
現代社会はアルゴリズムに支えられています。コンピュータとアルゴリズムの登場が世界を変えたと言っても過言ではありません。アルゴリズムに関する話題は,コンピュータ科学と数学の両方に広がりを持っています。ある問題Aがあるときに,それを解くためのアルゴリズムを思いついたとしましょう。アルゴリズムをプログラミングしていくつか問題Aの具体例に適用したところ,答えがきちんと返ってきたとします。得られた答えが役に立てば,それで良いこともあるでしょう。しかし,そのアルゴリズムですべての問題Aが解けるかどうかは分かりません。アルゴリズムが途中で止まったり,間違った答えを返したりしないということを証明する必要があります。これには数学的な考え方が必要です。多くのアルゴリズムの入門書は,こうした数学的な側面についてふれていません。一方,アルゴリズムに関する専門的な書籍では,数学記号をふんだんに使った説明を目にします。この本はこれらのちょうど間に位置します。原著ではかなり複雑で難しい議論が軽妙な語り口で解説されています。もしアルゴリズムに関してまったく知識がない場合は,まず入門書を手に取ることをおすすめします。また本書を読み進めるためには,Pythonプログラミングの知識も必要です。
アルゴリズムで問題が解けるということは,簡単な計算の積み重ねで最終的に正しい答えが得られるということです。各ステップの計算は本当に単純です。2つの値の比較や,グラフであればあるノードに隣接するすべてのノードを順番に取得するような計算です。こうした単純な計算の繰り返しでどうして問題が解けるのか,本書の2〜4章ではこの一般的な課題に真正面から取り組みます。これらの章で扱われる話題は,アルゴリズムを設計し数学的に正しいことを証明できるようになるための知識です。このため,抽象度が高い議論も含まれます。続く5〜8章では多種多様なアルゴリズムを例に,それらを支える設計思想を解説しています。個別のアルゴリズムとコードを理解するところからはじめ,一見違う問題に対して,同じ設計思想のアルゴリズムが適用できる仕組みがわかるようになればかなりの上級者です。9章と10章はグラフに関する話題がまとまっています。グラフは応用範囲が広いため,本書の前半でもたびたび話題に上ります。最後の11章は計算理論の話です。P≠NP問題の理解の助けになりますが,ほとんどが抽象的な話題なので少し毛色が違った章になります。各章で中心になるトピックには,必ずPythonのコードが提示されます。コードを読むことで,アルゴリズムの動作が分かります。ダウンロードしたコードを自分で変更して繰り返し実行すれば,さらに理解が深まるはずです。
原著者のMagnus Lie Hetlandさんは,経験豊かなPythonプログラマであり,大学でアルゴリズムを教えている専門家です。幅広く深い知識の持ち主であるため,この本にはさまざまな話題が含まれます。比較的難しいトピックをその概要の説明だけにとどめている部分もあります。こうした話題を完全に理解したいと思う場合は,本書で提示されている参考資料にあたる必要があるでしょう。最近はWebを探せば関連情報をすぐに見つけることもできます。本書が広大なアルゴリズムの世界へ旅立つきっかけを与えてくれます。
日本語,英語に関わらず,言葉は曖昧さを持ちます。書き手の意図が読み手に正しく伝わらないこともあるでしょう。しかしコードは違います。正しく動くコードは,作り手の意図が受け手に正確に伝わります。プログラミングができれば,コードを読むことでアルゴリズムを理解できるわけです。本書のコードは簡潔で,丁寧なコメントも付いています。短いコードから想像を超える計算結果が生み出される様子は,まさに世界を変えたアルゴリズムの威力そのものです。
複雑さを増す一方の現代社会にはさまざまな課題があります。すべてが計算で解決できるわけではありませんが,アルゴリズムが役立つ場面は多くあるでしょう。例えば,物流の配送ルートを最適化すれば燃料を削減できます。これは既存のアルゴリズムを少し変更するだけで解決できそうです。膨大な数の化合物から効率良く薬の候補を見つけられれば,患者さんが少ない希少疾患の治療方法を確立できるかもしれません。こうした複雑で難しそうな課題は,冷静に分析して部分的に解ける問題へ変換する必要があります。これはまさに本書で解説されているアルゴリズムの設計技法です。読者のみなさんの頭の中で再構築された知識が,現実のさまざまな課題に適用され1つでも多く解決につながれば,監訳者としてこの上ない喜びです。
辻真吾(つじしんご) 監訳者
現在,東京大学先端科学技術研究センターに所属。2000年東京大学大学院工学系研究科修了。創業間もないベンチャー企業に就職しJavaを用いたWebアプリ開発に従事。バイオインフォマティクスの研究を志し,退職して現在の勤務先に博士課程の学生として復学。2000年代中頃からPythonに注目し,2010年に「Pythonスタートブック(技術評論社)」を出版。その他にも「Pythonで学ぶアルゴリズムとデータ構造(講談社)」など著書多数。Start Python Clubを主宰し,2015年から月に1回「みんなのPython勉強会」を開催している。
最近は要素還元主義に立脚した科学研究や社会システムに限界を感じており,複雑系やその1分野としてのAgent-based modeling(ABM)に興味がある。
おいしい食事とお酒が好き。
Website:www.tsjshg.info
塩井宏亮(しおいひろあき) 訳者
東京大学大学院工学系研究科航空宇宙工学専攻を修了後,2014年に日本General Electric (GE) に入社。 2016年にデータサイエンティストとしてアメリカ(カリフォルニア州)のGE Digital本社へ転籍。金融,電力,製造業,ヘルスケアなどを中心に,様々な産業分野の顧客へコンサルティングサービスを提供。顧客の問題発見からアルゴリズム開発・実装,プロトタイプまでを手掛ける。現在,同じくカリフォルニア州に本社を置くスタートアップ dotData, Inc. にてデータサイエンティストとして活動中