効果的な検死の実施方法
グループに何がうまくいかないかを聞かないでください
アルゴリズムとは、望ましい結果を得るためにたどるべき定義されたプロセスです。私たちの生活の多くはアルゴリズムによって決まります。どのアルゴリズムに従うべきかを知ることで、より効率的で効果的な意思決定が可能になります。
最近、ブライアン・クリスチャンとトム・グリフィスによる『Algorithms to Live By』という本を再読しました。この本は、アルゴリズムが私たちの生活をより効果的にする助けになる方法についてです。昨年プログラミングを始めてから、今回はより多くのことを得ました。
アルゴリズムはプロセスであり、あるタスクを完了するために従うべき指示と考えることができます。例えば、数字を足し算する方法を学ぶのは簡単なアルゴリズム1です。
より複雑な指示は、人生の他の問題に対しても結果を計算できます。金利、ウェブ検索ランキング、ソーシャルメディアのフィードはすべてアルゴリズムの出力に基づいています。本書は多くのそのようなアルゴリズムを紹介し、あなたが個人的に直面するかもしれない問題と関連付けています。
2言及されているすべてのアルゴリズムを説明するのは難しいので、代わりにいくつかのアルゴリズムの短いハイライトを紹介し、通常は定量的なポイントではなく質的なポイントに集中します。
また、ほとんどのアルゴリズムは特定の前提に依存しています。毎回それを指定するのではなく、読む際にはそれを前提としてください。興味のある方のために脚注にいくつかの仮定を追加します。
議論されている問題のいくつかは以下の通りです:
最初のアルゴリズムを見てみましょう。問題の取り組みをいつやめるべきかについてです。
選択肢(求職者、住宅のオファー、駐車スペースなど)を評価する場合、どれだけ時間をかけて選ぶかと、「最良の」選択肢を選ぶチャンスとの間にトレードオフがあります。これを「secretary problem」と呼びます。例えば秘書を雇う場合、最適な人を見つけるために何回面接すべきでしょうか?
この場合、使うべき正確なパーセンテージがあります。応募者の37%を見たら待ってから、次に良い応募者を選び3。例えば、100人の応募者がいた場合、最初の37人を見終えた後、これまで見た応募者よりも優れた次の応募者を選ぶと良いでしょう。
それが数学的に最適なポイントであり、最適な人材を選ぶ可能性が最も高いです。早すぎると、後で面接を受ける人を見逃すかもしれません。遅すぎると時間を無駄に4しまいます。

最適な停止状況と同様に、情報収集(探索)と楽しむ(エクスプロイト)の間にトレードオフがあります。例えば、カジノにいてどのマシンをプレイするか決めたいとします。勝ち金を最大化したいけれど、正確なマシンのオッズがわからなくても(もし知っていれば、最高のマシンをプレイするでしょう)。
この場合、Gittins Indexと呼ばれる数字があり、最適なマシンを5します。勝ち数や敗北数、将来の利益の価値が分かれば、各選択肢の正確な値を計算できます。興味深い性質:
その他の関連する含意:
本書にはプログラミングでよく使われるソートアルゴリズムのいくつかの例が紹介されています。例えば、検索結果を返すには、あなたにとって最も関連性の高いものを並べ替える必要があります。
アルゴリズムの詳細な議論は理解が必要なので、また別の機会に取っておきますtime complexity。以下は定性的に得られるポイントです:
キャッシュの考え方は、1) 小さくて高速なメモリ(ストレージ)セクション、2) 大きくて遅いメモリセクションを持つことです。その後、意図に応じてこの2つを交互に使います。これにより、望む活動に対してある程度の速度とサイズの両方を得ることができます。
例えば、お気に入りの服はクローゼットにあり、使っていない服は屋根裏に置いておくかもしれません。よく使ったものにすぐ取り出せますが、もし望めばあの醜いクリスマスセーターを入れるスペースも確保できます。キャッシュは複雑に聞こえますが、私たちは日常生活のほとんどで自然にそれを行っていることに気づくでしょう。
どのアイテムを速いセクションに入れ、どのアイテムを遅いセクションに入れるかはどう決めていますか?ランダムなアイテム、最新のアイテム、最大のアイテムなどを入れることができます。
この場合、最近使ったアイテムを小さくて速いセクションに置くのが最適です。これは「temporal locality」と呼ばれる機能があるためです。最近使ったものは再び必要になる可能性が高いです。例えば、Googleドライブは頻繁に使うファイルをハイライトして素早くアクセスできます。

ほとんどの人は、やることリストの優先順位を決めなければなりません。これは通常、レスポンシブネス(対応の速さ)とスループット(どれだけの作業量を達成できるか)とのトレードオフを要求します。
スケジューリングと優先順位付けの重要なポイントは、目標指標の定義です。なぜなら、それがどのアルゴリズムを使うかを決めるからです7。レスポンシブ性を最大化するには、どれだけ多くのことを成し遂げられるかが犠牲になります:
すべての8プロジェクトの最大遅延を最小限に抑えたい場合は、Earliest Due Dateアルゴリズムは最も早い締め切りから始めるように指示します。
総完成時間を最小限にしたいなら、Shortest Processing Timeアルゴリズムは最も早いタスクを優先するように指示します。
タスクの重要度が同じでない場合は、各タスクに重みを付け、必要な時間の重み比率を計算することで、どのタスクをやるべきか決めやすくなります。時間の重みが最も大きいプロジェクトを選びましょう。
実際には、チームがこのトレードオフについてどう考えているか、そしてどの方法を採用してほしいかをマネージャーと話し合う価値があるでしょう。
スケジューリングにはもう一つ重要な概念があります。それは「context switching」という考え方です。タスクを切り替えるたびに。コンテキスト切り替えは実際の作業ではないので時間の無駄ですが、時間と労力を要します。
例えば、メールを書いているときにSlackのメッセージで中断された場合、返信するのと、メールで何をしたいかを思い出すのに時間がかかります。
最悪の場合、コンテキスト切り替えがスラッシュに変わり、スイッチだけに忙しくて生産的な作業ができないことがあります。スラッシュを避ける方法には以下があります:
ベイズの法則を説明するには記事一本分の記事が必要になるので、単に何かが起こる可能性を予測するのに役立つルールとして捉え9。著者たちが強調したいのは、これはあなたの事象がどの分布から来ているかによって異なるということです。主に考慮すべき分布は3つあります:

多くの人はおそらくゲーム理論を聞いたことがあるでしょう。これはゲームをプレイする際の最適な戦略を考える方法の一つです。いくつかのハイライト:
上記のアルゴリズムに加え、著者たちは以下の点も検討しています:
全体的に、アルゴリズムが人生にどのように現れるのかを概観するために読む価値があると思いました。ただ、コンピュータサイエンスを少し学んでからより理解しやすくなったので、その点は覚えておいてください。また、もっと実践的な例10入れてほしかったです。なぜなら、異なる前提に基づいて研究結果を生活に応用しようとするのは難しいからです。
子どもたちに計算を覚え、いつ数字を入れるかを教えれば簡単に教えられますが、コンピュータで実装しようとすると意外にもわかりにくいです。参照full adder logic gate ↩
説明する頃には、もう終わったと言えるかもしれませんwritten the entire book ↩
The percentage is 1 divided by e, euler’s number. 応募者の数が増えても確率は変わりませんが、得られる情報州によって変わります ↩
基地書記の問題は、見送った候補者に戻れないという前提ですが、現実に近いバリエーションもあります。 ↩
この問題は、機械での報酬の確率が時間とともに変化する場合、解決困難と言えます。つまり、本質的に解決不可能であることを意味します。解決困難な問題もあります。このような場合、いくつかの制約を緩和し、「十分に近い」解決策を受け入れることで、問題の構造化に大いに役立ちます。 ↩
アメリカ人にとってはマーチマッドネス ↩
スケジューリング問題のうち効率的に解決できるのはわずか9%です。 ↩
つまり、遅延しているプロジェクトをすべて、その最大値を取るということです。それが最小限に抑えたい指標です。 ↩
ベイズについて説明している記事はhereを参照してください。ベイズは直感的ではありません(少なくとも私にとっては)ので、知っておくと良いことです ↩
公平に言えば、脚注にはさらに詳述する情報がかなりあります ↩