基本読書

基本的に読書のこととか書く日記ブログです。

読んだ直後から滅茶苦茶役に立つ──『アルゴリズム思考術:問題解決の最強ツール』

アルゴリズム思考術:問題解決の最強ツール

アルゴリズム思考術:問題解決の最強ツール

  • 作者: ブライアンクリスチャン,トムグリフィス,田沢恭子
  • 出版社/メーカー: 早川書房
  • 発売日: 2017/10/19
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
『アルゴリズム思考術:問題解決の最強ツール』とは個人的にそそられる書名ではなかったので(ほぼ原題「ALGORITHMS TO LIVE BY」通り。)なかなか手が出なかったのだが、さらっと読み流すか……と手を出してみたらおもしろくて、その上読んですぐに役に立つ内容が満載なのであっという間に最後まで読んでしまった。

基本的にはアルゴリズム──より具体的な言葉でいえば「計算によってあらかじめ算出された、最適な手順」を知っていることが、いかに現実的な問題を解決する役に立つのかを紹介した一冊なのだが、なにしろ単なる手順なので、準備も何もいらないし読んだだけで「おーそうなんだ」とすぐに使うことができる。その中には仕事の進め方など、無意識的にやっていることも多いだろうが、読んでアルゴリズム的なお墨付きを得られることで、「これでいいのかな」など悩む時間が削減されるだろう。

入居先を探す時は期限までの37%を探索に当てよ。

さて、それでは本書に載っている、具体的なアルゴリズムを幾つか紹介してみよう。たとえば引っ越しをする際に、出来るだけいい条件(家賃が安くて、家が広くて、設備が整っていて、駅から近くて、周りに施設が揃っている)を目指すのは当然のことだが、探しているうちに良い家ほど決まってしまうし、逆に探し続けても無限に良い場所が出てくるわけでもない。我々はどれだけ探し続けるべきなのだろうか。

そんな問いかけに答えはないと思われるかもしれないが、この問題についてはアルゴリズムによって「37パーセント」であると、証明可能な解として出ている。部屋探しに1ヶ月かけるつもりなら最初の11日間探索するのが最適解となる。『そう言えるのは、部屋探しは数学で「最適停止」問題と呼ばれるタイプの問題だからだ。』ここでいうところの最適停止問題とは、一つずつ順番に現れる選択肢に対して、選び取るか見送るかという状態のこと。たとえば家や車を売る時、どこで売るべきか。従業員をn人雇いたい時、いったい何人をみたときに採用を決定するべきなのか。

たとえば採用の応募に2人集まったとする。採用者は面接した場合その場で採用か非採用かを決定しなければならないとする。その場合、最良(応募者の中でよりよい労働者)の選択を引く可能性は50%である。3人になった場合は少し複雑になる。ランダムに選ぶと最良の労働者は33%の確率でしか引けない。しかし次のようにすれば50%の確率で最良の労働者を採用することができる。1.最初の応募者は情報がないので、スルー。2.1人目という基準値があるので、1人目より優秀なら採用し、優秀でなければ非採用とする。3.2で断った場合3がラストなので採用するしかない。

2人目を採用か非採用かの判断に当てられるので、50:50の確率が出せる。応募者数が4人の場合も2人目の応募者の段階で「採用か非採用か」の判断をし、6人では3人目までは見る、20人の場合は7人目までは見る、1000人の場合は369人目までは見る(その後それまでより優秀な人材が現れたらすかさず採用する)のが最良の応募者を採用できる確率を最大化できる。この「n人に対して何人目までを見るのか」の割合が、どれだけ数が増えても(100万人でも)最終的には37%付近に落ち着くのだ。

このアルゴリズムで素晴らしいのは候補者の人数だけでなく期限の決まっている探索時間にも適用できることで、最初に述べたように家の探索時間にも当てはまるし、結婚相手を探す際にも応用できる。たとえば18歳から40歳までを探索期間とするならば、26.1歳が「最良の相手を見つけたら結婚に踏み切るべき」タイミングだ。

多腕バンディット問題

もう一つ、汎用的なものとしては、多腕バンディット問題が存在する。これは「探索と活用」の問題で、たとえば夜ご飯を店で食べるとして、既知の店にいけば期待水準のサービスが得られるが、探索コストをかければ同じ値段でより高いサービスが得られる可能性もある。その時我々はどのようにしてそのバランス(探索コストをかけるのか、かけないのか。かけるとして、どこまでかけるのか)を決定すべきなのか。

これに関しては無数のアルゴリズムが存在する。たとえばスロットが二台あることのみを想定した「勝てばキープ、負ければスイッチ」アルゴリズムでは、(スロットで)勝ちが続く限りその台にいて、負けたら一方のマシンに切り替える。これは単純な戦略だが、偶然に頼るよりはいい結果が出る。また、このバリエーションの一つで実際に臨床試験で使われたものとしては、「ある治療法が成功すれば次にそれが使われる確率を上げ、失敗すれば使われる確率を下げる」ゼレンの方式がある。

たとえば二種類の治療法とそれに対応する二種類のボールを用意して、引いたボールを治療に適用するとする。片方の治療法が成功すればそれに対応したボールを一つ増やす。逆に失敗すれば、その逆のボールを一つ増やす。それによって次回に失敗した治療法が行われる確率を減らすのだ。一般的である「標準医療群」と「試験医療群」を50%ずつ分けた時、どちらかの群が不必要なまでに多く死亡してしまうケースがあることを考えると、こうしたアルゴリズムがもたらす威力はとてつもなく大きい。

仕事の進め方について

恐らく多くの人が知りたいのが仕事の進め方、スケジューリングについての最適アルゴリズムだろう。これについて一番わかりやすいのは「最早納期優先」戦略で、「そんなんいつもやっとるわ!」と思うかもしれないが、納期が早いものから順番に片付けていくものだ。ただこれは「最大納期遅れ時間を短縮する」目標の際に最適な戦略なのであって、別の目標の際には別のアルゴリズムが最適に変わってくる。

たとえば、「納期の遅れはある程度は仕方ないと許容して、納期の遅れる案件の最小化」を目指すこともあるだろう。そういう時はムーアのアルゴリズムを使えばいい。最初は最早納期優先で計画を立て、とても間に合いそうにないとわかったら計画を中断し、"最も作業日数のかかりそうな仕事を一つ放棄する"、そうすれば他の仕事に取り掛かることができる。"放棄"のコストが高い仕事では役立てられないかもしれないが、たとえば腐りかけた食材の管理などでは有効なアルゴリズムだ(消費期限が近い、もっとも消費するのに日数のかかりそうな食材を一つ廃棄すればよい。)

おわりに

と、ざっと紹介してきたが、「ソート(物を並び替える時、どのような手法が最も早いのか)」、「キャッシュ(ファイルをどんな順番で並び替えるのがもっとも探索時間が少ないのか)」などなど役立つ知見はこの記事で紹介した20倍ぐらいは本書の中に詰まっている。人生とは常に成功が約束されていることばかりではなく、不確定な決断をくださねばならないが、こうやってある程度はアルゴリズムに決断のコストを任せてしまうことで、少なくとも無駄な時間を最小化することができるのだ。