共立出版

アルゴリズム・サイエンス・シリーズ

配本1

超入門編

「アルゴリズム・サイエンス:入口からの超入門」

浅野哲夫著

2006年発行

 

「IT時代の本質は,縦書きの本ではわかりません!」

本シリーズの目的は,アルゴリズム・サイエンスを高校生あるいは大学初年度生に紹介し,若年層のこの分野に対する興味を喚起すること,さらに,アルゴリズム・サイエンスのこの四半世紀の進歩を学問体系として整理し,この分野を志す学習者および研究者のための適切な学習指針を整備することである.

目次

第1章 数式における括弧の威力
第2章 変数の威力
第3章 プログラムの威力
第4章 コンパイラの威力
第5章 ループの威力
第6章 配列の威力
第7章 データ構造の威力
第8章 分岐命令の威力
第9章 再帰の威力
第10章 2分探索の威力
第11章 乱数の威力
第12章 計算幾何学の威力
章末問題の解答
索引

著者まえがきより

計算機を用いて問題を解くときに,プログラムを作る前にどのようにして問題を解くかについて方針を定め,徐々にプログラムに近い形にしていくが,問題の解き方をプログラムよりは少し抽象的に表現したものがアルゴリズムである.本書の意図は,高校生にもわかるようにやさしくアルゴリズムを紹介して,アルゴリズム学習の楽しさを伝えることにあった.そのために途中で飽きられないように心がけた.長々とした文章を続けることを避けて,質問を入れたり,まとめを入れたりして,アクセントをつけることを試みた.大学の講義用のテキストとずいぶんスタイルが違うことに違和感を感じられるかも知れないが,著者の意図を理解していただければ幸いである.本書を読んでアルゴリズム研究の楽しさを少しでも感じてもらえば,それ以上の喜びはない.
 従来のテキストは,「教える」側の論理で書かれていることが多いようである.あることを教えるためには,まずこの基礎知識が必要だから,という風に「教えるべき事柄」をリストアップした後で,理解するために必要な知識の順に並べ直す,というやりかたである.確かに多くの研究者が試行錯誤を繰り返しながら到達した所に,最短距離で到達しようとすると,この方法が最も「効率的」である.しかし,読者の立場からすると,これでは一向に勉学の意欲は湧いてこない.本書を書くに当たって特に気をつけたことは,「教えたいこと」を列挙するのではなく,複雑に見えるアルゴリズムでも,なるほどこれなら自分が先に生まれていたら,この程度のことは考え付いたはずだという印象を読者がもてるようにすることであった.そのために,アルゴリズムを考えるときには,どのようにして考えを進めていくのかを示すようにした.素人の考え方に比べてなるほど賢いと実感できるものであれば読者の共感を得るだろう.
 難しい理論を難しい用語と概念を用いて説明するのは研究者にとってはむしろ簡単なことであり,難しい理論を易しく説明するほうが却って難しいものである.たとえば,数学の勉強で定理の証明は慣れない学生にとっては苦痛以外の何物でもないが,なぜ苦痛なのだろうか.それは人間の思考過程と逆の順序で説明されているからである.定理を最初に考えついた人は,果たして最初に定理の言明を思いついて,それを証明したのだろうか.私の知る限りそのような例はほとんどない.ふつうは,何か興味のある問題があって,それを解こうとして,沢山の例題をこなしている間に一般的な法則らしいものを見つけ,それが本当に成り立つのかを証明しようとするが,大体は試行錯誤の繰り返しである.できたと思った証明が一晩明けてみると間違いであったことに気がつくというのは研究者なら誰しも経験のあることである.証明自体にしても,最初の証明はやたらに長くて,とても発表に時間制限のある学会では説明しきれない.そこで,どうすれば短く説明できるかを工夫することになる.そのための常套手段は一般化である.証明で必要な一部の性質を定義するのである.かくして定義が登場する.ところが,実際に論文に書くときには,最初に定義があり,次に定理の証明が続くのである.これは明らかに逆の順である.これでは定理を証明した人の頭の良さを披瀝するのが目的ではないかとさえ疑いたくなる.しかし,これが現実である.この状況を本書では少しでも改善したいと推敲を重ねたつもりである.
 勉学の意欲が掻き立てられるようなテキストが最も望ましいが,ではどうすればよいかが最大の問題である.人はなぜ勉強をするのだろうか.勉強が本当に好きだという人もいるようだが,恋愛よりも遊びよりも勉強が好きだなどとはとても人前では言えない.人生の教訓を得るために小説を読むという人も少ないだろう.小説を読むのは,あくまで面白いからである.では,アルゴリズムのテキストを読もうという人は何を期待しているのだろう.それは言うまでもなく,勉強しない人から自分を差別化したいからであろう.勉強しなかった人には歯が立たない問題でも,勉強した人にとっては簡単だということがある.素人とプロには超えられない差があるからこそプロの存在意義があるのである.したがって,素人には全くできないが,勉強をした人にはとっては非常に簡単だという事が多ければ多いほどよい.それと,素人にできないことであっても,それが魅力のないものであれば,その技量・知識は高く評価されることはない.したがって,素人とは明確な差がついて,しかも大事な仕事ができるというのが理想的である.
 現在の理科系離れの原因の一つとして受験勉強を挙げる人が多い.大学入試センターの数学の問題を見ると,確かに洗練された良い問題が多いことは認めるが,時間制限がすべてをぶち壊しにしている.受験生にとって試行錯誤の時間はない.問題を見た瞬間に解答の粗筋が浮かんでこないといけないのである.したがって,反復勉強により,このタイプの問題ならこの解き方,というパターン学習が幅を利かすことになる.多様な解き方を教えるとかえって混乱するから,解き方は一つだけ教えるのが鉄則である.しかし,そのために学問の面白さが伝わらない.柔軟な頭をもつことが究極の目標であったはずなのに,これでは頭を柔軟にしてはいけないと教えているようなものである.アルゴリズムを考える楽しさは,まさに試行錯誤にある.
 どんなに素晴らしいと思えるアルゴリズムが得られても,決して満足することなく,何か改良すべきことがないかどうかを探し続けるのがアルゴリズム研究の真髄である.
 日本人が最も苦手なことは何だろうか.学問の分野で言うと,講演後の質問であろう.欧米では良い質問をすることが能力を誇示することだという発想から,どんな気の利いた質問をしようかと考えながら講演を聞いている.日本では,こんなことを聞くと恥ずかしいとか,こんなことを聞くと失礼だとかが先に立ってしまうことが多い.お義理の質問でお茶を濁すことが結構多い.そこで,本書では本文の中で「質問」を多用することにした.あたかも読者と著者がお互いに話をしているように,議論を進めていくのである.
 本書の目的は,高校生を含め幅広い読者にアルゴリズム研究の楽しさを伝えることであった.どの程度成功したのかは,本書の売行きに反映されるであろう.ただ,執筆していて,本当はこういうことを伝えたかったのに,この文章ではうまく伝えることができていないなと感じることも多かった.そこで,余り他のテキストにはないが,「著者の独白」として,著者が伝えたかったことを記した.どの程度,著者の意図が実現できていたか評価するつもりで読んでもらえれば幸いである.
 本書の執筆にあたっては多くの方から暖かいご援助を賜った.特に,東京大学の室田一雄先生と杉原厚吉先生からは詳細なコメントをいただいた.また,京都大学の岩間一雄先生からの暖かい励ましがなければ,本書を完成することはできなかった.研究仲間の加藤直樹(京都大学),玉木久夫(明治大学),徳山豪(東北大学)の諸氏には有形無形の援助を得た.本書の話題のほとんどは4人での合宿における雑談から派生したものであり,持つべきは友である.共立出版社編集部の小山透氏にも細部にまで目を通していただき,拙著の中で最もミスの少ない本に仕上がったのではないかと信じている.以上,心からお礼を申し上げる次第である.
2006年2月
北陸先端科学技術大学院大学
浅野哲夫

-------------------------------------------------------------------------------------------------------

バグはないはずだったのですが、やはり見つかりました。(協力者:矢口裕君(JAIST))

72ページ 15行目 「b=c'b''」(誤)-->「n=c'b''」(正)
102ページ 最初の図 「s[ ]」(誤)-->「q[ ]」(正)
122ページ 16行目 「leap[ ]={0,0,0,0,1,1,0,0};」(誤)-->「leap[ ]={0,0,0,0,1,1,0,1};」(正)
122ページ 19行目 「d2=(199-x mod 100)/199;」(誤)-->「d2=(99-x mod 100)/199;」(正)

以上(2007年4月16日現在)