1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN:あなたかもしれない最初の事 検索についての通知があることを、我々はすでに 3 00:00:13,120 --> 00:00:14,520 コー​​ドは、私たちのために書かれている。 4 00:00:14,520 --> 00:00:16,219 これは、ディストリビューションのコードと呼ばれています。 5 00:00:16,219 --> 00:00:19,060 だから我々は、単に我々自身を書いていない もう一からコーディングします。 6 00:00:19,060 --> 00:00:23,870 むしろ、我々は、空隙に充填している いくつかの既存のコードで。 7 00:00:23,870 --> 00:00:28,860 >> find.cプログラムは、番号の入力を要求 干し草の山を埋めるために、検索し 8 00:00:28,860 --> 00:00:33,260 針を送信したユーザーのための干し草の山、 それはソートを呼び出すことによってこれを行う 9 00:00:33,260 --> 00:00:36,660 定義された検索、関数 helpers.c中。 10 00:00:36,660 --> 00:00:38,740 そうfind.cはすでに書かれています。 11 00:00:38,740 --> 00:00:41,840 あなたの仕事は、ヘルパーを書くことです。 12 00:00:41,840 --> 00:00:42,940 >> だから我々は何をしているの? 13 00:00:42,940 --> 00:00:45,270 我々は2つ​​の機能を実装している。 14 00:00:45,270 --> 00:00:50,110 値trueを返し、検索、 帰国、干し草の山で発見されている 15 00:00:50,110 --> 00:00:52,430 偽の値である場合 いない干し草の山の中。 16 00:00:52,430 --> 00:00:59,060 そして、我々はまた、ソートを実装している、 その値と呼ばれる配列をソートします。 17 00:00:59,060 --> 00:01:01,120 それでは、検索に取り組むみましょう。 18 00:01:01,120 --> 00:01:04,550 >> 検索は、現在実装されている 線形探索など。 19 00:01:04,550 --> 00:01:06,620 しかし、あなたはそれよりもはるかに良いを行うことができます。 20 00:01:06,620 --> 00:01:11,610 線形探索は、NのOに実装されています かなり遅い時間、それものの 21 00:01:11,610 --> 00:01:14,920 それに与えられた任意のリストを検索することができます。 22 00:01:14,920 --> 00:01:21,190 あなたの仕事は、バイナリサーチを実装することです、 ログnの時のOを実行している。 23 00:01:21,190 --> 00:01:22,200 これはかなり速いです。 24 00:01:22,200 --> 00:01:24,240 >> しかし、規定があります。 25 00:01:24,240 --> 00:01:28,910 バイナリサーチは、検索することができます 事前にソートされたリストをスクロール。 26 00:01:28,910 --> 00:01:31,450 これはなぜですか? 27 00:01:31,450 --> 00:01:33,690 さて、例を見てみましょう。 28 00:01:33,690 --> 00:01:37,350 値の配列を指定して、干し草の山、 我々は見ているつもりです 29 00:01:37,350 --> 00:01:41,510 針のため、この中 たとえば、整数3。 30 00:01:41,510 --> 00:01:45,220 >> バイナリ検索が動作する方法はある 我々は中間の値を比較 31 00:01:45,220 --> 00:01:49,430 多くの針状に配列、どのように 我々は、中に電話帳を開いた 32 00:01:49,430 --> 00:01:51,720 週0ページ。 33 00:01:51,720 --> 00:01:55,710 そうするための中間値を比較した後 針は、次のいずれか破棄することができます 34 00:01:55,710 --> 00:01:59,620 左または配列の右半分 あなたの境界を締めて。 35 00:01:59,620 --> 00:02:04,450 この場合、3は、我々の針であり、 10未満、中間値、 36 00:02:04,450 --> 00:02:07,060 右バウンドが低下する可能性があります。 37 00:02:07,060 --> 00:02:09,470 >> しかし、あなたの境界を作ってみる できるだけタイト。 38 00:02:09,470 --> 00:02:12,690 中間値は、針でない場合には、 あなたはあなたがする必要がないことを知っている 39 00:02:12,690 --> 00:02:14,070 検索に含める。 40 00:02:14,070 --> 00:02:18,390 だから、バインドユーザの権利が締めることができます ほんの少し検索限度、 41 00:02:18,390 --> 00:02:22,840 などなど、時まで あなたの針を見つける。 42 00:02:22,840 --> 00:02:24,580 >> それでは、擬似を行います コー​​ドは次のように? 43 00:02:24,580 --> 00:02:28,980 さて、我々はまだを通して見ている間 リストと、まだ持っている 44 00:02:28,980 --> 00:02:33,540 中を見ての要素が、我々​​は真ん中を取る リストとそれを比較する 45 00:02:33,540 --> 00:02:36,020 私たちの針への中間値。 46 00:02:36,020 --> 00:02:38,380 それらが等しいならば、それは我々がしたことを意味 針を見つけ、我々はできる 47 00:02:38,380 --> 00:02:40,160 trueを返します。 48 00:02:40,160 --> 00:02:43,940 >> そうでなければ、針は未満である場合 中間値、そしてそれは我々を意味します 49 00:02:43,940 --> 00:02:48,350 ちょうど半​​分を破棄することができ 配列の左側を検索する。 50 00:02:48,350 --> 00:02:51,860 そうでなければ、我々は、検索します 配列の右側。 51 00:02:51,860 --> 00:02:55,470 そして、最後には、いずれかを持っていない場合 以上の要素を検索するために残されますが 52 00:02:55,470 --> 00:02:58,030 まだあなたの針を見つけていない、 あなたはfalseを返します。 53 00:02:58,030 --> 00:03:02,960 間違いなく針理由 干し草の山ではありません。 54 00:03:02,960 --> 00:03:06,200 >> さて、この疑似約1きちんとした事 バイナリサーチのコードは、それができることです 55 00:03:06,200 --> 00:03:11,000 反復いずれかとして解釈される または再帰実装。 56 00:03:11,000 --> 00:03:14,900 あなたが呼ばれるのであれば、それは再帰的になる 検索中の検索機能 57 00:03:14,900 --> 00:03:18,400 配列のどちらか半分に機能します。 58 00:03:18,400 --> 00:03:20,750 私たちは、再帰を少し取り上げます 後でコース。 59 00:03:20,750 --> 00:03:23,210 しかし、それがオプションであることを知っていますか あなたは試してみたい場合。 60 00:03:23,210 --> 00:03:24,460