1 00:00:00,000 --> 00:00:12,040 >> [音楽再生] 2 00:00:12,040 --> 00:00:16,460 >> スピーカー1:すべての権利、これはCS50である、 これは週4の開始である、 3 00:00:16,460 --> 00:00:20,420 あなたが聞いたことがある可能性があるか 読んで、世界が終わるされています。 4 00:00:20,420 --> 00:00:23,520 インターネットのまわりのすべてに行く 知識と意識されている 5 00:00:23,520 --> 00:00:27,100 プログラムのバグ、Aの バッシュと呼ばれるプログラミング言語。 6 00:00:27,100 --> 00:00:32,729 これは素晴らしいブランドされました シェルショック、またはBashのドアなど、 7 00:00:32,729 --> 00:00:35,485 しかし、これらのような記事 珍しくはなかった。 8 00:00:35,485 --> 00:00:38,807 そして実際には、それらの多くは持参 Heartbleedの裏の思い出、 9 00:00:38,807 --> 00:00:41,640 これを使用してに気づいたかもしれません プレスバックこの春、 10 00:00:41,640 --> 00:00:43,980 同様にかなり劇的であった。 11 00:00:43,980 --> 00:00:47,110 今、あなたのそれらのここ 今日、どのようにあなたの多くがある、 12 00:00:47,110 --> 00:00:50,330 あなたは何を理解していない場合でも、 それはすべてのシェルショックのことを聞いた、についてです? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 すべての権利、そしてどのように多くのあなたの 脆弱なコンピュータを持っている? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 [OK]を、これまでのところ、はるかに多くの手があるはずです 今のところ、最大の理由のために私たちは見るであろう。 17 00:01:00,250 --> 00:01:02,580 >> それでは何を見てみましょう メディアで起こっれて 18 00:01:02,580 --> 00:01:05,304 し、それを少し説明して ここに私たちのために技術的に。 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> スピーカー2:セキュリティの専門家が持っている 重大な欠陥は可能性があると警告 21 00:01:11,250 --> 00:01:15,650 数百人に影響を与えることを約あること 世界のWebユーザの数百万。 22 00:01:15,650 --> 00:01:20,600 だから、正確になっていますバグは何ですか シェルショックと呼ば​​れ、それが何をするのでしょうか? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 さて、シェルショックとも呼ばれている bashのバグ、それが悪用ソフトウェア。 25 00:01:28,910 --> 00:01:33,230 ハッカーは脆弱スキャンするウイルスを使用 LinuxおよびUnixを実行しているシステム 26 00:01:33,230 --> 00:01:36,300 次に、オペレーティングシステムおよびそれらに感染する。 27 00:01:36,300 --> 00:01:38,730 bashはコマンドラインシェルである。 28 00:01:38,730 --> 00:01:43,460 これにより、ユーザーの問題が起動するようにコマンドをすることができます ソフトウェア内のプログラムと機能 29 00:01:43,460 --> 00:01:45,250 テキストで入力して。 30 00:01:45,250 --> 00:01:49,980 これは、典型的には、プログラマが使われている、と より広い世界に開かれてはならない、 31 00:01:49,980 --> 00:01:51,590 シェルショックはそれを変更するかの。 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> さて、worringly、一部のアナリスト それは大きな脅威である可能性が警告し、 34 00:01:57,910 --> 00:02:01,580 シェルショックは完了できるため、 感染したマシンの制御、 35 00:02:01,580 --> 00:02:06,030 Heartbleedのに対してのみ許可されて ハッカーはコンピューターをスパイする。 36 00:02:06,030 --> 00:02:09,130 それはだ、それほど深刻だ 10点10評価されて 37 00:02:09,130 --> 00:02:11,900 国民による重症度 脆弱性データベース。 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 すべてのWebサーバーの3分の2がでている 一部のMacコンピュータを含むリスク、。 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 さて、あなたを確認してください 今、あなたのシステムにパッチを適用。 42 00:02:25,600 --> 00:02:29,330 ウェブサイトの実行をホストしている誰 影響を受けるオペレーティングシステム 43 00:02:29,330 --> 00:02:31,800 できるだけ早く行動を取る必要があります。 44 00:02:31,800 --> 00:02:35,390 それはなります余裕が誰 その監視およびウェブアプリケーションへ 45 00:02:35,390 --> 00:02:37,355 ファイアウォールは、どんな攻撃に外を見るように。 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3:最悪の事 それが起こる可能性がある 48 00:02:41,770 --> 00:02:45,080 その誰かは、そのようなコードを記述します 自動的に移動して、スキャンする 49 00:02:45,080 --> 00:02:48,280 インターネットと影響を与える これらのコンピュータのすべて。 50 00:02:48,280 --> 00:02:50,710 そして、彼らはよく、それを行う後は、 彼らは何ができる最悪のこと 51 00:02:50,710 --> 00:02:53,300 ちょうどすべて削除され、 またはサイトをシャットダウンします。 52 00:02:53,300 --> 00:02:55,360 だから私たちは被害を見ることができました その観点から、 53 00:02:55,360 --> 00:02:58,300 私たちは、悪意のある人がいるだろう場所 誰がちょうど大混乱を起こすことにした 54 00:02:58,300 --> 00:03:02,534 システムをダウンさせたり削除することによって、 ファイル、およびそのようなこと。 55 00:03:02,534 --> 00:03:05,200 スピーカー2:いくつかは、これは1つであると言う 最も困難なの尺度を 56 00:03:05,200 --> 00:03:08,080 年のバグ、そしてそれ 週間かかるかさえも 57 00:03:08,080 --> 00:03:10,820 その最終的な影響を判断するために数ヶ月。 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> スピーカー1:だからすべてのことが真である、 しかし面白いことに、ほとんどすべての、ある 60 00:03:15,560 --> 00:03:18,330 あなただけの見た画像の、 多分キーボードを除き、 61 00:03:18,330 --> 00:03:20,930 とは何の関係もない いかなるバグ。 62 00:03:20,930 --> 00:03:23,960 サーバーおよびワイヤーなど、 それは一種の接線方向に関連しただ、 63 00:03:23,960 --> 00:03:27,410 が、コアでそれは実際にはかなりの おなじみの、ここで何が起こっているのか。 64 00:03:27,410 --> 00:03:30,050 実際に、私はに行ってみよう 私たちのCS50アプライアンス。 65 00:03:30,050 --> 00:03:32,910 私が先に行くと最大化してみよう ここでターミナルウィンドウを開きます。 66 00:03:32,910 --> 00:03:36,020 そして、あなたたちは、これを使用している またはその組み込みバージョン、 67 00:03:36,020 --> 00:03:39,460 プログラムを書くためにはgeditの中で、 、などのコマンドを入力し、 68 00:03:39,460 --> 00:03:43,690 これは、実際にあり、有し 週、バッシュ、B-A-S-Hのためにされて。 69 00:03:43,690 --> 00:03:46,890 これは、ボーン·再び、シェル これというのは変わった方法で、 70 00:03:46,890 --> 00:03:50,220 これは持ってのプログラムです 効果的に、プロンプトの点滅、 71 00:03:50,220 --> 00:03:51,970 それは待ってそこに座っ あなたのための入力用。 72 00:03:51,970 --> 00:03:53,920 そして、それは命令だ ラインインタフェース、それを介して 73 00:03:53,920 --> 00:03:57,650 あなたたちは、コマンドを実行してきたと 最終的にコンパイルしてから実行している 74 00:03:57,650 --> 00:03:58,400 プログラム。 75 00:03:58,400 --> 00:04:01,320 >> しかし、bashは、プログラミングです 以下の意味での言語。 76 00:04:01,320 --> 00:04:05,460 あなたのようなコマンドがあることを知っている CDおよびlsも打ち鳴らすなど、 77 00:04:05,460 --> 00:04:09,580 しかし、あなたは、独自のコマンドを定義することができます バッシュでそれらを実装することによって。 78 00:04:09,580 --> 00:04:11,420 今、私たちはするつもりはない 非常に詳細に入る 79 00:04:11,420 --> 00:04:16,089 プログラミング言語をbashにように、しかし 、その時点で、例えば、知る 80 00:04:16,089 --> 00:04:17,607 呼ばないコマンドがない「ハローが。」 81 00:04:17,607 --> 00:04:19,440 だから、で見つけることができます これらのパッケージのいずれか。 82 00:04:19,440 --> 00:04:20,856 それは私のコンピュータにインストールされてないです。 83 00:04:20,856 --> 00:04:21,870 あなたの管理者にお問い合わせください。 84 00:04:21,870 --> 00:04:26,030 しかし、私はそこにしたい場合は、プログラムすることが バッシュにまたは私のプロンプトで「ハロー」と呼ばれる、 85 00:04:26,030 --> 00:04:30,810 私は実際の構文を使用できます かなりC.のようにそれは、全く同じではありません 86 00:04:30,810 --> 00:04:35,020 それはとかなり似ています 機能、いくつかの項目が欠落してもかかわらず。 87 00:04:35,020 --> 00:04:38,090 何も起きていないようにみえ、 今は「こんにちは」と入力すると 88 00:04:38,090 --> 00:04:40,960 あなたが実際に書くことができます プログラムではなく、C言語ではなく、Javaで、 89 00:04:40,960 --> 00:04:44,280 ではない、別のプログラミングで 言語が、バッシュ自体に。 90 00:04:44,280 --> 00:04:47,630 >> 今、ここで重要なのは、私が書いたということです 私はこの新しいコマンドを与えたいと思った名前を付け、 91 00:04:47,630 --> 00:04:50,820 括弧でもある 関数で、この象徴。 92 00:04:50,820 --> 00:04:54,010 余談として、あなたも楽しみを行うことができます 物事、そして実際には、でもMac OSでは、 93 00:04:54,010 --> 00:04:55,620 これはターミナルと呼ばれるプログラムです。 94 00:04:55,620 --> 00:04:58,800 それは誰の中に組み込まれています この部屋ではMacを持つコンピュータ、 95 00:04:58,800 --> 00:05:03,640 あなたは、Macで同じようなことを行うことができます OSが、あなたはそれを超えて多くを行くことができます。 96 00:05:03,640 --> 00:05:07,110 そして、これは、小さな接線方向である それは楽しみのようなものだ。 97 00:05:07,110 --> 00:05:09,715 私は今朝思い出した、 これを介して考えると、 98 00:05:09,715 --> 00:05:13,279 私が再生するために使用小さなゲームの CS50の元TFの一つと 99 00:05:13,279 --> 00:05:16,570 それによって、彼は離れてから歩くであろう任意の時間を 彼のスクリーンロックを解除して、彼のキーボード、 100 00:05:16,570 --> 00:05:23,611 私は、コマンドを実行するだろう this--ような「挨拶」 101 00:05:23,611 --> 00:05:26,610 そして今、彼は戻って彼に来て、いつでも キーボード私は画面をクリアした後、 102 00:05:26,610 --> 00:05:27,985 そして彼は、座るだろう いくつかの作業をしようと、 103 00:05:27,985 --> 00:05:29,250 彼directory--の内容を一覧表示 104 00:05:29,250 --> 00:05:29,510 >> [オーディオ再生] 105 00:05:29,510 --> 00:05:30,010 >> -Hello。 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 こんにちは。 108 00:05:32,120 --> 00:05:35,030 >> スピーカー1:だから、公平性において、 それは "こんにちは。"実際にはありませんでした 109 00:05:35,030 --> 00:05:36,894 これは通常、何かだった that--により類似 110 00:05:36,894 --> 00:05:37,560 [オーディオ再生] 111 00:05:37,560 --> 00:05:37,750 -Beep。 112 00:05:37,750 --> 00:05:39,320 スピーカー1:私はwould-- --that そう、彼のコンピュータは、だろう 113 00:05:39,320 --> 00:05:42,170 彼が実際に彼にいつでも誓う 彼のキーボードに座った。 114 00:05:42,170 --> 00:05:46,265 そして、非常に迅速に彼は考え出した 彼の画面をロックせずに放置しない。 115 00:05:46,265 --> 00:05:48,730 しかし、これはソートを示唆している その愚かな楽しみの 116 00:05:48,730 --> 00:05:50,210 バッシュのようなもので持つことができます。 117 00:05:50,210 --> 00:05:52,770 しかし、それはもう少しだ それよりも、確かに、深刻な。 118 00:05:52,770 --> 00:05:57,235 実際に、これはの一つである 最も危険と長期的なバグ 119 00:05:57,235 --> 00:05:58,860 それは本当に世界的に世界を襲っている。 120 00:05:58,860 --> 00:06:02,060 このバグは、出回っている いくつかの20年、 121 00:06:02,060 --> 00:06:05,780 とするだけでは打たれるだろう その相対的なシンプルさによるモーメント。 122 00:06:05,780 --> 00:06:07,990 >> だから、これはイメージです。 コマンドであればあなたこと 123 00:06:07,990 --> 00:06:10,448 今は文字通り、マックを所有 あなたのふたが開いているとき、 124 00:06:10,448 --> 00:06:12,940 あなたはその中に入力して試すことができます ターミナルと呼ばれるプログラム。 125 00:06:12,940 --> 00:06:15,410 ターミナルの下にある アプリケーションUtilities-- 126 00:06:15,410 --> 00:06:18,790 一度のため、Windowsユーザは、する必要はありません この特定のthreat--を心配 127 00:06:18,790 --> 00:06:22,310 しかしMacにあなたのそれらを入力することができます この私がここでやるようなウィンドウに、 128 00:06:22,310 --> 00:06:24,210 あなたが入力しなければ このプログラムにその 129 00:06:24,210 --> 00:06:28,830 私は今やるように、ターミナルと呼ばれる、 あなたは言葉を見れば、「脆弱な」 130 00:06:28,830 --> 00:06:32,200 お使いのコンピュータは、 搾取を受けやすい。 131 00:06:32,200 --> 00:06:33,850 >> 今では実際に何を意味するのでしょうか? 132 00:06:33,850 --> 00:06:35,870 そして、これは確かにある かなりクレイジーな構文、 133 00:06:35,870 --> 00:06:39,050 しかしそれでは、少なくとも引き出してみましょう 興味深い側面の一部。 134 00:06:39,050 --> 00:06:42,567 だから、見えるいくつかの構文があります 少なくともCから、少し馴染み 135 00:06:42,567 --> 00:06:43,950 より一般的にプログラミングする。 136 00:06:43,950 --> 00:06:47,550 私はいくつかの括弧を参照してください。 セミコロン、中括弧、およびそのような、 137 00:06:47,550 --> 00:06:50,820 それは、このことが判明 ここに黄色愚かなこと 138 00:06:50,820 --> 00:06:53,580 本質的機能である それは何もしません。 139 00:06:53,580 --> 00:06:57,840 コロンは何もしないことを意味し、 セミコロンは、何もしない停止を意味します。 140 00:06:57,840 --> 00:07:00,250 したがって、これらの内側 中括弧、事実 141 00:07:00,250 --> 00:07:02,440 Iは等しいがあることを 左、これに署名する 142 00:07:02,440 --> 00:07:05,500 基本的に作成しています コマンド、または変数、 143 00:07:05,500 --> 00:07:09,520 xと呼ばれ、それを割り当てる そこにコードのその黄色の少し。 144 00:07:09,520 --> 00:07:14,040 つまり、エコー "のようなものかもしれない ビープ音」か何かを言うこんにちは」または「 145 00:07:14,040 --> 00:07:15,120 それに似て。 146 00:07:15,120 --> 00:07:17,780 しかし、あなたの目に入った場合に気づく さらに右にさまよい、 147 00:07:17,780 --> 00:07:22,150 よりも、このラインにそれだけではありません そのセミコロンの終了間際。 148 00:07:22,150 --> 00:07:25,160 その後、「脆弱なエコー」と それを超えてでもそれだけではありません。 149 00:07:25,160 --> 00:07:26,530 もう一つのセミコロン、bashの-c:。 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> だから長い話を短く、 このコード行は、 152 00:07:34,050 --> 00:07:36,660 説得力のための十分な のコンピュータ 153 00:07:36,660 --> 00:07:39,830 何かをするに脆弱 あなたはそれがやりたいことを、 154 00:07:39,830 --> 00:07:44,290 バグはバッシュとなるでありますので、 バッシュは停止するようになっていたにもかかわらず、 155 00:07:44,290 --> 00:07:48,980 コマンドの右のラインを読んで そこに黄色のテキストの後に、 156 00:07:48,980 --> 00:07:52,520 20プラス歳のバグのために、 bashは、実際に読んでいました 157 00:07:52,520 --> 00:07:56,780 そのセミコロンを越え、美しい ずっとそれが語られている何をして。 158 00:07:56,780 --> 00:07:59,070 >> だから、意味するところは何ですか それの究極? 159 00:07:59,070 --> 00:08:01,340 私はちょうど「ハローエコー」と述べ または "、脆弱エコー」 160 00:08:01,340 --> 00:08:05,449 しかし、あなたが何かをやった場合は、 * -rf RMのような、実際には悪質な、 161 00:08:05,449 --> 00:08:07,240 これを使用していないかもしれない これまで入力した、 162 00:08:07,240 --> 00:08:08,920 と率直におそらく あまりにもすぐにすべきで、 163 00:08:08,920 --> 00:08:10,700 あなたが行うことができますので、 それに多くのダメージ。 164 00:08:10,700 --> 00:08:11,210 なぜ? 165 00:08:11,210 --> 00:08:12,990 rmが、もちろん、何をしますか? 166 00:08:12,990 --> 00:08:14,270 削除します。 167 00:08:14,270 --> 00:08:15,930 *何を意味する? 168 00:08:15,930 --> 00:08:16,430 すべての。 169 00:08:16,430 --> 00:08:18,180 だから、いわゆるだ ワイルドカードなので、その意味 170 00:08:18,180 --> 00:08:20,410 ですべてを削除 現在のディレクトリ。 171 00:08:20,410 --> 00:08:23,379 -rは、再帰的な意味を起こる そのあなたが削除しているものかどう意味 172 00:08:23,379 --> 00:08:26,420 ディレクトリがあり、そこの内側 他のファイルや他のディレクトリで、 173 00:08:26,420 --> 00:08:28,950 再帰的にそこに飛び込む そしてそのすべてを削除します。 174 00:08:28,950 --> 00:08:31,040 そして-fはそれらすべての最悪です。 175 00:08:31,040 --> 00:08:32,580 誰もが-fがここで何を意味するか知っていますか? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 フォース。 178 00:08:34,360 --> 00:08:37,830 そうであっても、手段を強制 これは悪い考えであれば、 179 00:08:37,830 --> 00:08:40,939 私にプロンプ​​トを表示せずにそれを行う さらに確認のため。 180 00:08:40,939 --> 00:08:43,230 だから、あなたが知っている、私たちは笑う この、しかし率直に言って、おそらく私 181 00:08:43,230 --> 00:08:44,972 この複数回入力 当日、現実理由 182 00:08:44,972 --> 00:08:47,210 それはへの最速の方法ですです ものの全体の束を削除します。 183 00:08:47,210 --> 00:08:48,590 しかし、たとえ私はいくつかの損傷を行っている。 184 00:08:48,590 --> 00:08:53,100 >> しかし、あなたはコンピュータをだましていた場合は、 いくつかの愚かな変数を定義するに 185 00:08:53,100 --> 00:08:56,810 または関数は、xと呼ばれるが、その後、 実行中にコンピュータをだまし 186 00:08:56,810 --> 00:09:00,030 それの境界を越えて 関数、そのセミコロンを越えて、 187 00:09:00,030 --> 00:09:04,430 あなたが実際にコンピュータをだましことができ RMのようなものを実行に-rf 188 00:09:04,430 --> 00:09:07,810 またはEメールコマンド またはコピーコマンド。 189 00:09:07,810 --> 00:09:11,400 文字通りあなたが何かできること コンピュータ、それはファイルを削除するのかどうか、 190 00:09:11,400 --> 00:09:15,350 、ファイルの作成誰かをスパム、 リモートで一部のサーバーを攻撃し、 191 00:09:15,350 --> 00:09:17,190 あなたはそれを表現することができれば コマンドを使って、あなた 192 00:09:17,190 --> 00:09:19,120 それを行うにコンピュータをだましことができます。 193 00:09:19,120 --> 00:09:21,510 >> 今の例は何ですか あなたはこれをどのように行うのでしょうか? 194 00:09:21,510 --> 00:09:24,300 さて、コンピュータの多くがあります インターネット走行バッシュ上。 195 00:09:24,300 --> 00:09:26,390 私たちMacユーザーはすべて、それらの間にある。 196 00:09:26,390 --> 00:09:30,390 Linuxサーバーの多くは、間にある それらに加えて、UNIXサーバ。 197 00:09:30,390 --> 00:09:32,630 Windowsが再取得します 比較的オフフック 198 00:09:32,630 --> 00:09:34,590 あなたがインストールしている場合を除き 特別なソフトウェア。 199 00:09:34,590 --> 00:09:37,130 今のサーバーの多くは、のために インスタンスは、Webサーバーを実行、 200 00:09:37,130 --> 00:09:39,840 実際、Linuxは、おそらくです 最も人気のあるオペレーティングシステム 201 00:09:39,840 --> 00:09:43,060 インターネット上のコンピュータ上で実行するには それは、Webページを提供している。 202 00:09:43,060 --> 00:09:44,910 今、私たちは、後で説明するように 学期、中 203 00:09:44,910 --> 00:09:48,470 あなたがからのリクエストを送信する あなたのbrowser--クローム、 204 00:09:48,470 --> 00:09:50,790 Internet Explorerの、whatever-- リモートサーバへ、 205 00:09:50,790 --> 00:09:53,730 それはたとえていることが判明 あなただけの、www.example.comを入力 206 00:09:53,730 --> 00:09:59,590 お使いのブラウザは、メッセージを送信している それは次のように、もう少し難解だ。 207 00:09:59,590 --> 00:10:01,239 >> しかし、奇妙な少し何かに気づく。 208 00:10:01,239 --> 00:10:03,030 最初の二行 私は、前に見たことがない 209 00:10:03,030 --> 00:10:04,904 彼らは見ていない 特に脅迫。 210 00:10:04,904 --> 00:10:08,030 しかし、私が盗まれてきたものに気付く ここで3行目。 211 00:10:08,030 --> 00:10:13,390 悪者は、メッセージを送信した場合 自分のコンピュータからこのような 212 00:10:13,390 --> 00:10:17,270 脆弱なMacまたはAに 脆弱なLinuxサーバー、 213 00:10:17,270 --> 00:10:21,580 面白いことに、そのバッシュです そのシンプルで小さなコマンドプロンプト、 214 00:10:21,580 --> 00:10:27,450 遍在であり、多くの場合、ある 本質的に実行するために使用 215 00:10:27,450 --> 00:10:30,020 内容 それが受け取るメッセージ。 216 00:10:30,020 --> 00:10:33,490 そして、その論理によって、次のことができます そのため、Webサーバをだまし、 217 00:10:33,490 --> 00:10:36,370 のようなものを送信することにより、 通常、ユーザーエージェント、 218 00:10:36,370 --> 00:10:38,300 と言うことになっている お使いのブラウザの名前です。 219 00:10:38,300 --> 00:10:42,420 ユーザーエージェントクローム、ユーザエージェントインターネット エクスプローラー、ユーザーエージェントのFirefox、この 220 00:10:42,420 --> 00:10:44,590 ちょうどあなたのブラウザのです 自身を識別する方法。 221 00:10:44,590 --> 00:10:46,605 しかし、もし悪いやつが非常に 巧みにはMM-MM、私は言う、 222 00:10:46,605 --> 00:10:47,930 あなたに言うつもりはない 私のブラウザは何をされ、 223 00:10:47,930 --> 00:10:50,888 私の代わりにあなたにこのを送信するつもりです RMとの不可解なそうな事-rf 224 00:10:50,888 --> 00:10:55,840 *その中に、あなたは文字通りだますことができます インターネット上の脆弱なWebサーバ 225 00:10:55,840 --> 00:10:59,055 で、まさにそれを実行することに そこにすべてのファイルを削除するため。 226 00:10:59,055 --> 00:11:00,930 そして、率直に言って、それはありません それさえも最悪。 227 00:11:00,930 --> 00:11:01,763 あなたが何かを行うことができます。 228 00:11:01,763 --> 00:11:04,480 あなたが始めることができ、分散 サービス拒否攻撃 229 00:11:04,480 --> 00:11:07,030 あなたがこのメッセージを送信した場合 Webサーバの全房 230 00:11:07,030 --> 00:11:10,256 し、それらすべてがために、下降していた Harvard.eduサーバー上のインスタンス、 231 00:11:10,256 --> 00:11:12,130 あなたが強打の並べ替えることができます それらのうち、一体 232 00:11:12,130 --> 00:11:15,490 たネットワークトラフィックによって、 それ以外の場合は、この悪者によってトリガ。 233 00:11:15,490 --> 00:11:18,760 >> だから、長い話を短く、ほとんど マックを所有しているこの部屋の誰も 234 00:11:18,760 --> 00:11:20,240 これに対して脆弱です。 235 00:11:20,240 --> 00:11:24,100 銀の裏地を使用すると、している場合を除きということです あなたのラップトップ上のWebサーバを実行している、 236 00:11:24,100 --> 00:11:27,780 あなたが実際に設定していない限り それは、その中に、SSHのようなものを可能にする 237 00:11:27,780 --> 00:11:28,670 あなたが実際に安全です。 238 00:11:28,670 --> 00:11:31,710 それは脆弱ですが、あります 1、あなたのラップトップに取得しようとし、 239 00:11:31,710 --> 00:11:33,290 だから、ちょっと安心することができます。 240 00:11:33,290 --> 00:11:36,210 しかし、Appleはすぐになります このための修正をアップデートする。 241 00:11:36,210 --> 00:11:39,660 リナックスの世界は既にリリースしました FedoraとUbuntuのための修正の数 242 00:11:39,660 --> 00:11:43,790 確かにと他のLinuxのバージョン、および アプライアンス内の更新50を実行した場合、 243 00:11:43,790 --> 00:11:45,930 でも、あまりにもがされることを 更新され、修正しました。 244 00:11:45,930 --> 00:11:47,764 しかし、あまりにもいないことを 本当に脆弱なって、 245 00:11:47,764 --> 00:11:49,804 あなたはしていない限り理由 アプライアンスとティンカー 246 00:11:49,804 --> 00:11:52,770 公にあなたのラップトップを作った ではない、インターネット上でアクセス可能 247 00:11:52,770 --> 00:11:54,910 デフォルトでは、あなたがした 実際にので細かいれて 248 00:11:54,910 --> 00:11:56,890 ファイアウォールおよび他の技術。 249 00:11:56,890 --> 00:12:01,000 >> しかし、それはバグの極端な例だ 私たちは文字通り20のためにのために生きてきたこと 250 00:12:01,000 --> 00:12:04,050 年、誰が誰か知っているかどう すべてのこの時間は、それについて知っていた? 251 00:12:04,050 --> 00:12:06,300 実際に、これはの一つである 根本的な課題 252 00:12:06,300 --> 00:12:08,690 私たちは後半で表示されますことを セキュリティについて学期、 253 00:12:08,690 --> 00:12:13,020 それは、単に現実世界のようなものです 善玉は不利な立場にある。 254 00:12:13,020 --> 00:12:16,500 悪者を防ぐために、する必要が すべてのドアがロックされていることを確認して、 255 00:12:16,500 --> 00:12:20,340 すべてのウィンドウがあること、安全であることを 自宅へのエントリのすべてのポイント 256 00:12:20,340 --> 00:12:21,980 悪者が入らないように安全である。 257 00:12:21,980 --> 00:12:26,870 しかし、どのような悪いやつはする必要がない 実際にあなたの家を危険にさらすために行う 258 00:12:26,870 --> 00:12:28,200 そしてあなたから盗む? 259 00:12:28,200 --> 00:12:32,574 彼または彼女はちょうどロック解除ものを見つけなければならない ドア、1壊れた窓、または何か 260 00:12:32,574 --> 00:12:35,240 それらの線に沿って、それはだ コンピュータセキュリティにおける同じこと。 261 00:12:35,240 --> 00:12:37,660 私たちは、何百万ものを書くことができます プログラミングコードの行 262 00:12:37,660 --> 00:12:40,570 そして数百または数千を過ごす それが正しい取得しようとしている時間、 263 00:12:40,570 --> 00:12:43,370 しかし、あなただけのものを作る場合は、 正しさの誤り、 264 00:12:43,370 --> 00:12:47,030 あなたは、システム全体を置くことができますし、 確かにこの場合は、全体のインターネット 265 00:12:47,030 --> 00:12:48,660 そしてリスクのある世界。 266 00:12:48,660 --> 00:12:51,950 >> だから、もっと知りたい場合 このことについて、ここでは次のURLを参照してください。 267 00:12:51,950 --> 00:12:54,450 行動の必要はありません 今夜あなたがない限り 268 00:12:54,450 --> 00:12:57,116 そのより快適ものの中 独自のWebを実行してきた 269 00:12:57,116 --> 00:12:59,810 場合、あなたがしなければならないサーバ、 実際には、ソフトウェアを更新します。 270 00:12:59,810 --> 00:13:03,244 >> そして、これはあまりにものタイトルです スピーチ、そして今、紙、 271 00:13:03,244 --> 00:13:05,410 私たちは上のリンクされたこと 今日のためのコースのウェブサイト。 272 00:13:05,410 --> 00:13:07,600 それは仲間のよった ケン·トンプソン、誰が名付け 273 00:13:07,600 --> 00:13:10,120 非常に有名な受諾した コンピュータサイエンスの賞、 274 00:13:10,120 --> 00:13:13,495 そして彼は何年かこのスピーチを行いました 基本的にこの同じトピックで、前に。 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 皆さんに質問を質問、 本当にすべき 277 00:13:20,520 --> 00:13:23,480 信頼、最終的には、 ソフトウェアあなたが与えられてきた? 278 00:13:23,480 --> 00:13:26,100 たとえば、私たちは皆持っている プログラムを書いて、 279 00:13:26,100 --> 00:13:27,820 私たちは、コンパイルしてきた クラングと彼ら。 280 00:13:27,820 --> 00:13:31,830 そして、あなたの知る限り、あなたが書かれている CS50のための任意のプログラムがあります 281 00:13:31,830 --> 00:13:35,310 一種のバックドアは、方法があります 悪い男という、あなたのプログラムを実行している場合には、 282 00:13:35,310 --> 00:13:37,410 お使いのコンピュータを引き継ぐだろうか? 283 00:13:37,410 --> 00:13:38,310 おそらくないでしょ? 284 00:13:38,310 --> 00:13:40,180 マリオ、そして貪欲、およびクレジット。 285 00:13:40,180 --> 00:13:41,680 これらはすべて非常に小さなプログラムです。 286 00:13:41,680 --> 00:13:43,910 あなたはかなり必要があるだろう 実際にあれば悪い 287 00:13:43,910 --> 00:13:47,310 コンピュータ全体が脆弱製 コー​​ドの10または20行を書き込んだ後、 288 00:13:47,310 --> 00:13:49,690 いくつかのまたは少なくとも気付か セキュリティへの影響の。 289 00:13:49,690 --> 00:13:52,023 今、私は、その冗談を言う 私たちは、今日見ることになるだろう 290 00:13:52,023 --> 00:13:54,600 そして、今週はそれが実際の 本当に、本当に簡単に 291 00:13:54,600 --> 00:13:57,980 悪いことさえ作る 脆弱な短いプログラム。 292 00:13:57,980 --> 00:14:02,880 >> しかし、今のところ、少なくとも、実現 質問はここで求められていることを 293 00:14:02,880 --> 00:14:04,850 コンパイラでクラングについてです。 294 00:14:04,850 --> 00:14:08,360 なぜクラングを信頼されています 過去二、三週間? 295 00:14:08,360 --> 00:14:12,650 誰が誰をクラングを書いたと言うことだ そこに「IF」条件を持っていませんでした 296 00:14:12,650 --> 00:14:17,680 それは基本的にいくつかのゼロを注入し そしてすべてのプログラムへのものは、それがコンパイルされます 297 00:14:17,680 --> 00:14:21,180 それは彼または彼女のアクセスをさせたい お使いのコンピュータには、眠っているとき 298 00:14:21,180 --> 00:14:23,580 そしてあなたのラップトップのふたが開いている コンピュータが実行されている? 299 00:14:23,580 --> 00:14:24,080 右? 300 00:14:24,080 --> 00:14:28,350 私たちは名誉のシステム権のこの種を持っている 今、私たちは、クラングが合法であることを信頼してある。 301 00:14:28,350 --> 00:14:30,000 アプライアンスが合法であることを信頼しています。 302 00:14:30,000 --> 00:14:34,430 あなたが信頼し、その文字通りすべてのプログラム お使いのMacまたはPC上で信頼できる。 303 00:14:34,430 --> 00:14:37,510 そして、この単純なバグが示唆するように、 それは、悪意ではない場合であっても、 304 00:14:37,510 --> 00:14:40,580 それは絶対にありません ケースである可能性が高い。 305 00:14:40,580 --> 00:14:42,350 >> だから、地獄のように怖いでなければなりません。 306 00:14:42,350 --> 00:14:45,560 率直に言って、簡単なはありません この他の解決策 307 00:14:45,560 --> 00:14:48,185 社会意識のソートより 複雑化の 308 00:14:48,185 --> 00:14:50,310 私たちは上に構築していることを 当社のコンピュータ·システムの、 309 00:14:50,310 --> 00:14:53,740 とどのようにますます脆弱 私たちは非常によくあることかもしれません。 310 00:14:53,740 --> 00:14:55,570 >> 今ではブレイクアウトと言って。 311 00:14:55,570 --> 00:14:59,889 そうブレイクアウトであるという問題が三セット、および ブレイクアウトは、往年のゲームです 312 00:14:59,889 --> 00:15:02,180 あなたが思い出すかもしれないが、 私たちのために問題に3を設定し、 313 00:15:02,180 --> 00:15:04,450 それは私たちが取ることができます 物事は、ノッチをバックアップ 314 00:15:04,450 --> 00:15:08,880 私たちはプログラムを書いている時にするように、 でも、このようなターミナルウィンドウで、 315 00:15:08,880 --> 00:15:14,670 私たちは実際に、最終的には、実行することができます グラフィカルなプログラムはありません 316 00:15:14,670 --> 00:15:17,800 私達が持っていたものとは違って スクラッチ中へのアクセス。 317 00:15:17,800 --> 00:15:20,910 だから、これはスタッフのです ブレイクアウトの実施、 318 00:15:20,910 --> 00:15:23,930 ちょうどこのレンガ破りこれは ゲーム、あなたが戻ってあなたのパドルを移動していることを 319 00:15:23,930 --> 00:15:27,590 行ったり来たり、あなたはボールを打つ トップアップこれらの色のレンガに対して​​。 320 00:15:27,590 --> 00:15:30,020 だから、これは私たちをもたらしている ソートの裏どこへ 321 00:15:30,020 --> 00:15:33,180 私たちは非常に迅速にすることができました スクラッチと、そして今Cは、 322 00:15:33,180 --> 00:15:35,800 私たち自身を実装する グラフィカル·ユーザ·インタフェース。 323 00:15:35,800 --> 00:15:38,960 >> しかし、それよりもこの 問題のあるセットは、第1を表し、 324 00:15:38,960 --> 00:15:41,000 その中で私たちは与えている あなたのコードの束。 325 00:15:41,000 --> 00:15:43,940 そして実際には、私は、明示的な持参 これに注意、特に理由 326 00:15:43,940 --> 00:15:47,090 これらの少ない快適なために、この この問題は、少なくとも一見、設定 327 00:15:47,090 --> 00:15:49,170 のように感じるように起こっている 私たちはノッチそれを撮影した。 328 00:15:49,170 --> 00:15:51,540 私たちはあなたを与えてくれたので、 検索のいくつかについて 329 00:15:51,540 --> 00:15:54,930 およびプロセッサセットの問題をソート 私たちが書いたコードの束、 330 00:15:54,930 --> 00:15:56,680 とコメントのカップル それは、「実行する」と言う 331 00:15:56,680 --> 00:15:58,221 どこに空白を埋める必要があります。 332 00:15:58,221 --> 00:16:00,020 だからあまりにも怖くないが、 それが初めての 333 00:16:00,020 --> 00:16:03,370 私たちは、あなたがする必要があるコードを配っている まず、読んで理解し、[に追加 334 00:16:03,370 --> 00:16:04,290 そしてそれを完了。 335 00:16:04,290 --> 00:16:05,940 >> そしてブレイクアウトで、 私たちは、同じことをやろうとしている 336 00:16:05,940 --> 00:16:08,740 あなたに数十行以上を与える 率直に言って、あなたを与える、というのコード 337 00:16:08,740 --> 00:16:11,490 のためのフレームワークの多く ゲームが、短い停止 338 00:16:11,490 --> 00:16:14,304 レンガを実装する ボールとパドル、 339 00:16:14,304 --> 00:16:15,970 私たちは、いくつかの他の機能を実装します。 340 00:16:15,970 --> 00:16:18,280 とにもその一見、再び、 特にあまり快適であれば、 341 00:16:18,280 --> 00:16:21,480 特に困難に見えるかもしれませんし、 あなたは非常に多くの新機能があると思う 342 00:16:21,480 --> 00:16:24,070 あなたはあなたの心をラップする必要があり 周りに、それは本当だ。 343 00:16:24,070 --> 00:16:26,281 しかし、それはだ、覚えておいてください かなりスクラッチのような。 344 00:16:26,281 --> 00:16:28,780 オッズはあなたのすべてを使用していなかったです スクラッチでのパズルのピース。 345 00:16:28,780 --> 00:16:31,120 オッズあなたがラップする気にしませんでしたされている それらのすべての周りにあなたの心 346 00:16:31,120 --> 00:16:33,617 それは取ったすべてだったので、 理解するためにチラッ、ああ、 347 00:16:33,617 --> 00:16:35,450 それは私が何ができるかだ そのパズルピースを持つ。 348 00:16:35,450 --> 00:16:38,260 そして実際、問題にセット 3スペック、私たちはあなたを指すよ 349 00:16:38,260 --> 00:16:41,370 その意志のドキュメントで いくつかの新機能を紹介し、 350 00:16:41,370 --> 00:16:43,570 そして最終的にプログラミング お使い構築します。 351 00:16:43,570 --> 00:16:47,610 条件、ループ、 変数、および関数 352 00:16:47,610 --> 00:16:50,720 と同じになります 私たちは、これまで見てきました。 353 00:16:50,720 --> 00:16:53,560 >> だから確かに、私たちは何をあげる あなたはそのいくつかのサンプルコードです。 354 00:16:53,560 --> 00:16:56,110 ウィンドウを作成することができます それはこのとは違っていないに見えますが、 355 00:16:56,110 --> 00:16:59,540 そして最終的にそれを回す 非常にこのようなもの。 356 00:16:59,540 --> 00:17:02,250 そうCS50を活用、 営業時間などを議論し、 357 00:17:02,250 --> 00:17:05,290 そしてことに納得してピッチを取る あなたが書かなければならないコードの量 358 00:17:05,290 --> 00:17:06,760 すべてのことあまり、実際にはありません。 359 00:17:06,760 --> 00:17:10,359 最初の課題はただ順応することです 自分たちが書いたいくつかのコードに。 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> pset3上のご質問、 シェルショック、または別の方法で? 362 00:17:15,810 --> 00:17:19,226 >> 聴衆:それはのように思えた ブレイクアウトを経験して 363 00:17:19,226 --> 00:17:22,154 コー​​ドはほとんどであること オブジェクト指向のスタイル、 364 00:17:22,154 --> 00:17:24,675 しかし、私はCはと思った オブジェクト指向プログラム。 365 00:17:24,675 --> 00:17:26,050 スピーカー1:優秀な質問。 366 00:17:26,050 --> 00:17:28,258 だからを通して見るにおける 分配コード、コード 367 00:17:28,258 --> 00:17:30,180 私たちは、pset3のために書いた 慣れているため、それ 368 00:17:30,180 --> 00:17:32,230 それはだように見える 少しオブジェクト指向。 369 00:17:32,230 --> 00:17:33,800 短い答えは、それが、である。 370 00:17:33,800 --> 00:17:38,130 それはどのように近似だ 使用して、オブジェクト指向のコードをするかもしれない 371 00:17:38,130 --> 00:17:41,850 Cのような言語が、それはある それでも最終的に手続き。 372 00:17:41,850 --> 00:17:44,900 の内部には方法がありません 変数は、あなたが表示されますように。 373 00:17:44,900 --> 00:17:46,180 しかし、それはそれを彷彿とさせる。 374 00:17:46,180 --> 00:17:48,780 そして、私たちは再びその機能が表示されます 私たちは、PHPとJavaScriptを取得するとき 375 00:17:48,780 --> 00:17:49,946 最後の学期に向けて。 376 00:17:49,946 --> 00:17:53,667 しかし、今のところ、と考える 来て何のヒント。 377 00:17:53,667 --> 00:17:54,250 良い質問。 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 かしこまりました。 380 00:17:56,550 --> 00:17:59,730 だから、どうやってソートしたマージ 左物事前回。 381 00:17:59,730 --> 00:18:03,250 そして、ソートでクールだったマージ それはとても速かったという感覚、 382 00:18:03,250 --> 00:18:07,100 少なくともざっとテストに基づいて 私たちは、バブル、たとえば、より、先週やった 383 00:18:07,100 --> 00:18:08,710 ソート、選択ソート、挿入ソート。 384 00:18:08,710 --> 00:18:11,780 そして、何きちんとしたのはあまりにもわずかである どのように簡潔かつきれいに 385 00:18:11,780 --> 00:18:12,810 あなたはそれを表現することができます。 386 00:18:12,810 --> 00:18:15,840 そして、私たちはそれが上だったか言っていた マージの実行時間の下限 387 00:18:15,840 --> 00:18:16,340 並べ替え? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 うん? 390 00:18:18,495 --> 00:18:19,360 >> 聴衆:nのログn? 391 00:18:19,360 --> 00:18:20,819 >> スピーカー1:nは右、nはログインしてください。 nはn個を記録します。 392 00:18:20,819 --> 00:18:23,776 そして、私たちはどのようなものに戻ってくる 本当の意味やそれがどこから来るのか、 393 00:18:23,776 --> 00:18:25,570 これは良かった 時間を実行しているものよりも 394 00:18:25,570 --> 00:18:28,440 私たちは、バブルのために見た 選択と挿入ソート? 395 00:18:28,440 --> 00:18:30,610 だからnの二乗。 nの二乗 これよりも大きい、 396 00:18:30,610 --> 00:18:34,650 そしてそれはかなり明白でなけれあっても、 そのログnはnよりも小さい知って、 397 00:18:34,650 --> 00:18:36,910 ますので、n回を行う場合 nよりも小さいもの、 398 00:18:36,910 --> 00:18:38,680 それは、n乗よりも少ないことになるだろう。 399 00:18:38,680 --> 00:18:40,130 それはそこに勘のビットです。 400 00:18:40,130 --> 00:18:42,190 しかし、私たちは、このための代償を払った。 401 00:18:42,190 --> 00:18:47,000 それは速かったが、テーマが始めた 先週が出現するために、このトレードオフがあった。 402 00:18:47,000 --> 00:18:49,804 私はより良いパフォーマンスを得 時間賢いが、何 403 00:18:49,804 --> 00:18:52,470 私は他に費やす必要がなかった 手は、順番にそれを達成するには? 404 00:18:52,470 --> 00:18:53,591 >> 聴衆:メモリ。 405 00:18:53,591 --> 00:18:54,465 スピーカー1:もう一度言って? 406 00:18:54,465 --> 00:18:55,173 聴衆:メモリ。 407 00:18:55,173 --> 00:18:57,040 スピーカー1:メモリ、または スペースより一般的。 408 00:18:57,040 --> 00:18:59,040 そして、それは、スーパーではありませんでした 私達の人間との明白な、 409 00:18:59,040 --> 00:19:02,240 私たちのボランティアことを思い出す フォワードステッピングステッピングた 410 00:19:02,240 --> 00:19:04,780 バックアレイがありますかのように しかし、ここで、とあります 411 00:19:04,780 --> 00:19:07,130 ここでその二番目の配列 彼らは私たちので、使用することができます 412 00:19:07,130 --> 00:19:09,080 それらの人々をマージするどこかが必要でした。 413 00:19:09,080 --> 00:19:11,480 私達はちょうど場所でそれらを交換できませんでした。 414 00:19:11,480 --> 00:19:13,800 だから、ソートレバレッジをマージ より多くのスペースは、これは 415 00:19:13,800 --> 00:19:15,620 私たちはと必要はありませんでした 他のアルゴリズム、 416 00:19:15,620 --> 00:19:17,410 しかし利点は、それははるかに高速であるということです。 417 00:19:17,410 --> 00:19:20,780 そして、率直に言って、現実世界の空間で これらdays-- RAM、ハードディスクspace-- 418 00:19:20,780 --> 00:19:25,030 比較的安価であり、したがってそれはだ 必ずしも悪いことでは。 419 00:19:25,030 --> 00:19:28,320 >> それでは、少し簡単に見てみましょう より念入りに、私たちがやったことで 420 00:19:28,320 --> 00:19:30,220 なぜ私たちはそれがnログnと述べた。 421 00:19:30,220 --> 00:19:33,260 だからここに8の数字があり、 8人のボランティアたちは、最後の時間を過ごしました。 422 00:19:33,260 --> 00:19:35,718 そして、マージ最初 並べ替え何だった行うには私たちに語った? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 聴衆:二つに分割。 425 00:19:38,010 --> 00:19:38,663 スピーカー1:もう一度言って? 426 00:19:38,663 --> 00:19:39,650 聴衆:二つに分割。 427 00:19:39,650 --> 00:19:40,610 スピーカー1:二つに分割、右。 428 00:19:40,610 --> 00:19:42,818 これは非常に彷彿とさせる 除算の電話帳、 429 00:19:42,818 --> 00:19:44,220 より一般的に征服する。 430 00:19:44,220 --> 00:19:45,640 そこで、左半分を見た。 431 00:19:45,640 --> 00:19:48,700 そして、私たちは、ソート、言っ一度 要素の左半分、 432 00:19:48,700 --> 00:19:49,690 私たちは次は何を言ったの? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 左の左半分をソート 私たちがすることができ半分、、 435 00:19:54,860 --> 00:19:57,570 二つに分割した後、 4二つに焦点を当てています。 436 00:19:57,570 --> 00:20:01,280 >> どのようにに、今リストをソートするか サイズ2の、黄色、ソートマージご利用ですか? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 まあそれを半分に分割し、 左半分を並べ替える。 439 00:20:04,580 --> 00:20:07,100 そして、これはどこの事だった 少し愚かな簡単になった。 440 00:20:07,100 --> 00:20:10,720 あなたがのだリストをソートするにはどうすればよい サイズ1、ここでは、この数4のように? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 これは、ソートいます。 443 00:20:13,210 --> 00:20:14,200 あなたは完了です。 444 00:20:14,200 --> 00:20:17,300 >> しかし、その後、どのようにリストを並べ替えるか サイズ1は、2位ですか? 445 00:20:17,300 --> 00:20:21,640 まあ、同じことが、今何だった 第三およびマージソートの重要なステップ? 446 00:20:21,640 --> 00:20:24,020 あなたが左をマージする必要がありました 半分と右半分。 447 00:20:24,020 --> 00:20:26,580 私たちがいることをやったらと、私たちは見えた 4で、2つのを見た。 448 00:20:26,580 --> 00:20:28,750 私たちは、すべての権利を決定した 明らかに二人は、最初に来る 449 00:20:28,750 --> 00:20:31,840 私たちは、その中に2を入れて 4続い場所。 450 00:20:31,840 --> 00:20:35,010 そして今、あなたは巻き戻しの種類があり、 これは特性の一種である 451 00:20:35,010 --> 00:20:37,570 マージのようなアルゴリズムの 並べ替え、メモリ内に巻き戻し。 452 00:20:37,570 --> 00:20:40,240 物語の次の行は何でしたか? 453 00:20:40,240 --> 00:20:41,780 私は次は何に焦点を当てすべきですか? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 左の右半分 6および8で半分。 456 00:20:47,350 --> 00:20:50,320 >> だから私はちょうどこのステップスルーしましょう あまりにも多くのポイントをbelaboringせず。 457 00:20:50,320 --> 00:20:53,330 シックスと8、その後6です ソート、8がソートされます。 458 00:20:53,330 --> 00:20:57,190 そのようにそれらを一緒にマージ、 そして今、次の大きな一歩 459 00:20:57,190 --> 00:21:00,990 もちろん、から右半分をソートされている このアルゴリズムの非常に最初のステップ。 460 00:21:00,990 --> 00:21:02,870 そこで、1、3、7、5に焦点を当てる。 461 00:21:02,870 --> 00:21:04,540 次に、左半分に焦点を当てています。 462 00:21:04,540 --> 00:21:09,400 その左半分、右半分 それは、その後、1と3にマージします。 463 00:21:09,400 --> 00:21:13,100 そして、右半分、左半分 それは、それの右半分。 464 00:21:13,100 --> 00:21:15,985 ステップが残っているものそれを今でのマージ、および? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 大きな左半分と大きなマージ 右半分は、ので、1つは、そこにダウンした 467 00:21:22,460 --> 00:21:27,330 次いでその後、2つ、3つ、4つ、 次いで5つ、6つ、その後、7つ、8。 468 00:21:27,330 --> 00:21:31,990 >> だから今、なぜこれが最終的に明らかにされ、 特にnおよび対数の場合より 469 00:21:31,990 --> 00:21:35,487 一般的にはむしろ、あなたをエスケープ 少なくとも最近の記憶では? 470 00:21:35,487 --> 00:21:37,070 さて、この事の高さに注目してください。 471 00:21:37,070 --> 00:21:41,230 私たちは、8つの要素を持っていた、と私たち 2で、2で、2でそれを割った。 472 00:21:41,230 --> 00:21:44,590 だから、ベースのログを8の2は私達に3を与える。 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 そしてその上で、私を信頼している場合 その上で少しかすん。 475 00:21:48,540 --> 00:21:54,710 しかし、8のベース2が3でログインする 私たちは合併の三層をやった。 476 00:21:54,710 --> 00:21:57,170 そして、私たちは合併したとき 要素、どのように多くの要素 477 00:21:57,170 --> 00:21:58,950 私たちはそれらの行のそれぞれで見たのですか? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 合計n、右か? 480 00:22:01,437 --> 00:22:04,020 一番上の行をマージするので、 私たちは少しずつそれをやったとしても、 481 00:22:04,020 --> 00:22:05,990 私たちは最終的には一回数に触れた。 482 00:22:05,990 --> 00:22:09,054 そして、2行目の、へ サイズ2のそれらのリストをマージし、 483 00:22:09,054 --> 00:22:10,470 私たちは、かつて各要素に触れなければならなかった。 484 00:22:10,470 --> 00:22:12,690 そして、ここでは本当に 明らかに最後の行の、 485 00:22:12,690 --> 00:22:15,430 私たちは、これらのそれぞれをタッチしていた 一度、一度だけの要素、 486 00:22:15,430 --> 00:22:18,400 そうここに私達のn個のログnが、その後、位置しています。 487 00:22:18,400 --> 00:22:21,780 >> そして今、物事は少し作る よろしければ、ちょっとのためのより正式な 488 00:22:21,780 --> 00:22:24,260 今、これを分析することであった より高いレベルのようなもので、 489 00:22:24,260 --> 00:22:28,340 そしてどれだけ、決めるしよう あなたが表現について、行くかもしれない 490 00:22:28,340 --> 00:22:31,780 このアルゴリズムの実行時間 ちょうどそれを見て、しないことにより、 491 00:22:31,780 --> 00:22:33,590 不自然な例を使用して? 492 00:22:33,590 --> 00:22:36,590 さて、あなたはどのくらいの時間だと思います かかる黄色で次のように進み、 493 00:22:36,590 --> 00:22:37,173 N <2リターンたら? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 それは何の大きなOですか? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 だから私は、1、ので、1つのステップを見ている 多分二段階場合、それはだから 498 00:22:44,540 --> 00:22:47,110 してから返しますが、それはだ 一定の時間、右か? 499 00:22:47,110 --> 00:22:49,960 だから私たちはO(1)と述べ、それはだ どのように私はこれを表現します。 500 00:22:49,960 --> 00:22:51,480 Tは、ちょうど時間が実行されている。 501 00:22:51,480 --> 00:22:54,150 nは、入力のサイズです そう、T(n)は、変わった方法 502 00:22:54,150 --> 00:22:56,330 ランニングを言うの サイズnの時、指定された入力 503 00:22:56,330 --> 00:23:00,220 オーダーであることを行っている 一定の時間、O(1)。 504 00:23:00,220 --> 00:23:01,970 >> しかし、それ以外の場合は、このことについてどのような? 505 00:23:01,970 --> 00:23:05,660 どのように表現するだろう この黄色の線の時間を実行している? 506 00:23:05,660 --> 00:23:06,250 何のT? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 あなたはちょっとここでカンニングすることができ、 周期的に私の質問に答えます。 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 だから、実行時間内であれば 一般的な私たちは、T(n)は言う。 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 そして今、あなたはちょっと、ここでパンティングしていて、 と言って、よく、ちょうど左半分を並べ、 513 00:23:22,490 --> 00:23:23,920 し、右半分を並べ替える。 514 00:23:23,920 --> 00:23:27,520 どのように象徴的に表すことができ この黄色の線の運転時間? 515 00:23:27,520 --> 00:23:28,020 何のT? 516 00:23:28,020 --> 00:23:29,360 入力のサイズは何ですか? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 2オーバーのn。 519 00:23:31,057 --> 00:23:32,140 なぜ私はちょうどそれを言ってはいけない? 520 00:23:32,140 --> 00:23:36,449 そして、これは他のTは(n / 2)、次いで 再び、私は2つのソートの半分をマージした場合、 521 00:23:36,449 --> 00:23:38,615 私はどのように多くの要素をつもりです 総触れる必要はありますか? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 nは。 524 00:23:40,320 --> 00:23:42,790 だから私は、これを表現することができます だけの種類の空想であると、 525 00:23:42,790 --> 00:23:44,430 一般的に実行している時間など。 526 00:23:44,430 --> 00:23:51,140 T(n)は、T(n / 2)個だけの実行時間である T(π/ 2)、左半分と右半分、プラス 527 00:23:51,140 --> 00:23:55,360 プラスおそらくn個のステップではO(n)、、 多分、私は2本の指を使用している場合には、 528 00:23:55,360 --> 00:23:57,960 それは多くの倍の 手順が、それは線形です。 529 00:23:57,960 --> 00:24:00,440 これは、ステップのいくつかの数だ すなわち、n個の係数の 530 00:24:00,440 --> 00:24:02,270 私たちはこのようにこれを表現かもしれません。 531 00:24:02,270 --> 00:24:05,550 そして、これは私たちがパント満載の今である バック私たちの高校の数学の教科書の 532 00:24:05,550 --> 00:24:10,290 私たちは最終的に再発ことをしている この等しいしまう、n回のログインのn 533 00:24:10,290 --> 00:24:12,530 あなたが実際に行う場合 数学より正式に。 534 00:24:12,530 --> 00:24:13,950 >> だから、ちょうど2つの視点です。 535 00:24:13,950 --> 00:24:17,500 の一つの数値 ハードコードされた代表例 536 00:24:17,500 --> 00:24:21,140 8番号などを使用して、 私たちがそこに着いた方法で一般的な外観。 537 00:24:21,140 --> 00:24:25,670 しかし、ここで本当に面白いものだ サイクリングのこの概念は、再び、である。 538 00:24:25,670 --> 00:24:26,900 私は、forループを使用していないよ。 539 00:24:26,900 --> 00:24:29,860 私はこの種の定義よ 自体の面で何か、 540 00:24:29,860 --> 00:24:31,950 これでだけでなく、 数学関数、 541 00:24:31,950 --> 00:24:34,860 だけでなく、この擬似コードの面で。 542 00:24:34,860 --> 00:24:38,260 この擬似コードは再帰的です そのラインの2つの内 543 00:24:38,260 --> 00:24:42,310 本質的に行くためにそれを語っている 小さなを解決するために、それ自体を使用し 544 00:24:42,310 --> 00:24:45,400 小さいサイズの問題、 してから何度も何度も 545 00:24:45,400 --> 00:24:48,820 そして、再び私たちはそれを削る時まで このいわゆるベースケースまで。 546 00:24:48,820 --> 00:24:52,810 >> それでは、実際にはもっと説得力を描きましょう 持ち帰りこのことから、以下のように。 547 00:24:52,810 --> 00:24:58,420 私はgeditのに入り、見てみましょう 今日のソースコードの一部を見て、 548 00:24:58,420 --> 00:24:59,930 ここでは特にこの例。 549 00:24:59,930 --> 00:25:03,709 明らかに追加されますシグマ0、 数字nまで1。 550 00:25:03,709 --> 00:25:05,750 それでは、お馴染みのか見てみましょう ここと不慣れ。 551 00:25:05,750 --> 00:25:08,690 まず、いくつかあり 含まれているため、何も新しいそこに。 552 00:25:08,690 --> 00:25:09,190 プロトタイプ。 553 00:25:09,190 --> 00:25:11,370 私は上の少しかすんだ この数日後に、 554 00:25:11,370 --> 00:25:13,790 私たちは何を言ったの 関数のプロトタイプは? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 聴衆:[聞こえない]。 557 00:25:16,015 --> 00:25:16,905 スピーカー1:それは何ですか? 558 00:25:16,905 --> 00:25:17,800 聴衆:私たちはそれを発表する。 559 00:25:17,800 --> 00:25:18,883 スピーカー1:私たちはそれを発表する。 560 00:25:18,883 --> 00:25:22,290 だから、ちょっと、クラングを教えている 実際にこれをまだ実装していない、 561 00:25:22,290 --> 00:25:25,740 しかしどこかにこのファイル内の、おそらく、 何呼び出された関数になるだろう? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 シグマ。 564 00:25:27,540 --> 00:25:30,540 そして、これは単なる約束であること それはこのように見えるだろう。 565 00:25:30,540 --> 00:25:33,720 それはのように整数を取るために起こっている input--と私はより明確になることができます 566 00:25:33,720 --> 00:25:36,570 で、int nは - そしてそれはだと言う int型を返すつもり、 567 00:25:36,570 --> 00:25:39,900 しかしセミコロンは、ミリメートルを意味し、私の周り取得します 少し後にこれを実装する。 568 00:25:39,900 --> 00:25:40,989 ここでも、クラングはダムです。 569 00:25:40,989 --> 00:25:43,280 それだけで何を知っているために起こっている あなたは、上から下にそれを伝える 570 00:25:43,280 --> 00:25:45,765 私たちは、少なくとも与える必要が それは何のヒントが来ています。 571 00:25:45,765 --> 00:25:47,330 >> それでは、ここでの主を見てみましょう。 572 00:25:47,330 --> 00:25:50,040 それでは、ここで下にスクロールしてみようと やっていることの主な参照してください。 573 00:25:50,040 --> 00:25:53,780 これは、関数の長くないし、 実際には、ここで構築物は、よく知られている。 574 00:25:53,780 --> 00:25:57,590 私は、変数nを宣言し、 私は何度も何度もユーザーをせがむ 575 00:25:57,590 --> 00:26:01,880 getIntはを使用して正の整数のために、 そしてこのループのうち唯一の出口 576 00:26:01,880 --> 00:26:03,280 一旦ユーザが遵守している。 577 00:26:03,280 --> 00:26:05,670 、私たちが使ってきたと同時に、DO そのようにしてユーザーをせがむ。 578 00:26:05,670 --> 00:26:06,670 さて、これは面白い。 579 00:26:06,670 --> 00:26:08,510 私はと呼ばれるint型の宣言」の答えを。 " 580 00:26:08,510 --> 00:26:11,420 私はそれを戻り値を代入 呼び出された関数の「シグマ」 581 00:26:11,420 --> 00:26:15,200 私はそれがまだ何を知っているが、しないでください 私は一瞬前にそれを宣言覚えています。 582 00:26:15,200 --> 00:26:18,310 そして私は渡しています ユーザーが入力した値、nは、 583 00:26:18,310 --> 00:26:20,420 そして私は答えを報告している。 584 00:26:20,420 --> 00:26:22,260 さてそれではスクロールバックしましょう ただちょっと。 585 00:26:22,260 --> 00:26:28,620 それでは、このディレクトリに先に行ってみよう、作る σ0、実際にこのプログラムを実行する 586 00:26:28,620 --> 00:26:30,490 何が起こるかを参照してください。 587 00:26:30,490 --> 00:26:35,930 私が先に行くと、実行のであれば このプログラムは、./sigma-0、 588 00:26:35,930 --> 00:26:40,139 と私はポジティブに入力する 2のような整数、シグマ、 589 00:26:40,139 --> 00:26:43,180 ギリシャのシンボルが意味するように、ちょうどある からのすべての数字を追加しよう 590 00:26:43,180 --> 00:26:44,320 最大2つのゼロ。 591 00:26:44,320 --> 00:26:46,560 だから0プラス1プラス2。 592 00:26:46,560 --> 00:26:48,830 だから、これがうまくいけば、私に3を与える必要があります。 593 00:26:48,830 --> 00:26:49,750 つまり、やっているだけです。 594 00:26:49,750 --> 00:26:52,690 そして同様に、私はこれを実行した場合、再び そして私はそれを数3を与え、 595 00:26:52,690 --> 00:26:56,721 のように、それは、3 +2だ 5、プラス1は私に6を与える必要があります。 596 00:26:56,721 --> 00:26:59,470 そして、私は本当にクレイジー取得する場合と 大きな数字で入力を開始、 597 00:26:59,470 --> 00:27:01,290 それは私を与える必要があります どんどん大きく和。 598 00:27:01,290 --> 00:27:02,250 だから、それがすべてです。 599 00:27:02,250 --> 00:27:04,010 >> だから何シグマは次のようにしますか? 600 00:27:04,010 --> 00:27:05,430 まあ、それは非常に簡単です。 601 00:27:05,430 --> 00:27:08,940 それは私たちが実装しているかもしれない方法です この数週間のために。 602 00:27:08,940 --> 00:27:11,120 "int型"は、戻り値の型であることを行っている。 603 00:27:11,120 --> 00:27:14,330 シグマは、名前であり、それはとり 代わりに、nの変数m。 604 00:27:14,330 --> 00:27:15,940 私はトップそれを変更します。 605 00:27:15,940 --> 00:27:17,340 その後、これはただの健全性チェックです。 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 私たちは、一瞬でその理由が表示されます。 608 00:27:19,950 --> 00:27:24,220 今、私は別の変数を宣言し、 合計は、ゼロに初期化します。 609 00:27:24,220 --> 00:27:28,140 それから私はループでは、これを持っている どうやら明確にするため、繰り返し処理、 610 00:27:28,140 --> 00:27:33,810 i = 1から上のアップ= mに、これは ユーザーがタイプ入力してから、私は何でも 611 00:27:33,810 --> 00:27:35,690 このような合計をインクリメントします。 612 00:27:35,690 --> 00:27:37,360 そして、合計を返す。 613 00:27:37,360 --> 00:27:38,440 >> だから、質問のカップル。 614 00:27:38,440 --> 00:27:42,370 一つは、私はこのことを、私のコメントで主張 無限ループの危険を回避できます。 615 00:27:42,370 --> 00:27:45,620 なぜ負の数を渡すことになる 、潜在的に、無限ループを引き起こす? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> 聴衆:あなたがmに達することは決してないだろう。 618 00:27:51,290 --> 00:27:52,880 >> スピーカー1:Mに到達することはありません。 619 00:27:52,880 --> 00:27:55,880 しかし、mが渡され、そうしてみましょうされている 簡単な例を考えてみましょう。 620 00:27:55,880 --> 00:27:58,510 mは、によって渡された場合 負の1としてユーザー。 621 00:27:58,510 --> 00:28:00,059 にかかわらず、メインの。 622 00:28:00,059 --> 00:28:01,850 主から私たちを保護します これも、私はちょうどよ 623 00:28:01,850 --> 00:28:04,680 本当に肛門である シグマも確認します 624 00:28:04,680 --> 00:28:06,540 入力が負にすることはできませんことを。 625 00:28:06,540 --> 00:28:10,130 そのように、mが負の場合、 負の1のようなもの。 626 00:28:10,130 --> 00:28:11,930 何が起こるだろう? 627 00:28:11,930 --> 00:28:14,390 まあ、私はしようとしている 1に初期化さ、 628 00:28:14,390 --> 00:28:19,060 そして私はあることを行っている m以下? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> スタンバイ。 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 つまり、のがないようにしましょう​​was-- それではこの話をニックスましょう。 633 00:28:29,370 --> 00:28:32,780 私がいるので、その質問をしませんでした 私はをほのめかしていますリスク 634 00:28:32,780 --> 00:28:38,360 私であるために発生するつもりはない 常に、[OK]をthan--大きいことだろう 635 00:28:38,360 --> 00:28:39,871 私はその質問を撤回。 636 00:28:39,871 --> 00:28:40,370 [OK]をクリックします。 637 00:28:40,370 --> 00:28:42,030 それではここでの唯一のこの部分に焦点を当ててみましょう。 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 なぜ私はいくつかを宣言しなかった ループの外? 640 00:28:48,830 --> 00:28:52,010 ライン私がした49に関するお知らせ 私は、ループの中で宣言 641 00:28:52,010 --> 00:28:54,950 しかし、オンライン48、私がした いくつかの外側を宣言した。 642 00:28:54,950 --> 00:28:55,695 うん。 643 00:28:55,695 --> 00:28:56,611 聴衆:[聞こえない]。 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 スピーカー1:確かに。 646 00:28:59,400 --> 00:29:03,360 だから、何よりもまず、私は確かにない 和を宣言し、初期化したい 647 00:29:03,360 --> 00:29:06,130 内部ゼロに 各反復では、ループ、 648 00:29:06,130 --> 00:29:09,370 これは明らかにそぐわないため 数字を合算する目的。 649 00:29:09,370 --> 00:29:11,770 私は、変化し続けるだろう ゼロに戻る値。 650 00:29:11,770 --> 00:29:17,992 そしてまた、別のより難解なものだ その同じ設計上の決定の理由? 651 00:29:17,992 --> 00:29:18,954 うん。 652 00:29:18,954 --> 00:29:20,279 >> 聴衆:[聞こえない]。 653 00:29:20,279 --> 00:29:21,070 スピーカー1:その通りです。 654 00:29:21,070 --> 00:29:24,060 私は外にアクセスしたい あまりにも何行にループの? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 53について。 657 00:29:26,400 --> 00:29:29,910 と親指の私たちのルールに基づいて、 講義前のカップルから、 658 00:29:29,910 --> 00:29:33,680 変数がに、本当に、スコープさ それらを包含し、中括弧。 659 00:29:33,680 --> 00:29:38,190 だから私は、内部の和を宣言しない場合は、 これらの外側の中括弧の、 660 00:29:38,190 --> 00:29:40,250 私はライン53でそれを使用することはできません。 661 00:29:40,250 --> 00:29:43,160 私は宣言した場合、別の言い方をすれば ここでの、あるいは内合計 662 00:29:43,160 --> 00:29:45,410 ループのために、私は53にそれにアクセスすることができませんでした。 663 00:29:45,410 --> 00:29:47,150 変数は、効果的に行ってされることになる。 664 00:29:47,150 --> 00:29:48,579 だから、いくつかの理由。 665 00:29:48,579 --> 00:29:50,370 しかし、今の前に戻ってみましょう 何が起こるかを参照してください。 666 00:29:50,370 --> 00:29:51,730 だからシグマに呼び出されます。 667 00:29:51,730 --> 00:29:55,640 それは、1プラス2、または1プラス2を加算 プラス3、その後、値を返し、 668 00:29:55,640 --> 00:29:59,660 答えに格納し、ここでのprintf 私は画面上に見ている理由である。 669 00:29:59,660 --> 00:30:03,079 だから、これは私たちが、反復と呼ぶことにしますものです アプローチ、反復するだけ 670 00:30:03,079 --> 00:30:03,870 ループを使用することを意味します。 671 00:30:03,870 --> 00:30:06,900 Forループ、Whileループ、実行(Do)しながら ループが、もう一度何かをやって 672 00:30:06,900 --> 00:30:08,380 そして何度も何度も。 673 00:30:08,380 --> 00:30:13,505 >> しかしシグマはきちんとした関数内の一種である 私は違ったそれを実装できるという。 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 これについてはどのような、これ ただ、ちょっとクールに 676 00:30:19,120 --> 00:30:21,880 私は本当に取り払うましょう 気晴らしの多くの 677 00:30:21,880 --> 00:30:24,380 この機能のため 実際にはかなり簡単です。 678 00:30:24,380 --> 00:30:27,780 レッツ削るそれをただ その4つのコアラインに 679 00:30:27,780 --> 00:30:30,410 とすべてを取り除く コメントや中括弧。 680 00:30:30,410 --> 00:30:34,334 これはショッキングの一種である 代替実装。 681 00:30:34,334 --> 00:30:37,250 すべての権利、多分気に吹きません、 それは、すべてが右、ちょっとセクシーだ 682 00:30:37,250 --> 00:30:39,920 そんなにより簡潔にこれを見ている。 683 00:30:39,920 --> 00:30:43,120 コー​​ドのわずか4行では、 私が最初にこの健全性チェックを持っている。 684 00:30:43,120 --> 00:30:45,732 mは以下である場合 ゼロ、シグマは意味がありません。 685 00:30:45,732 --> 00:30:48,190 にのみにあることになっている 正の数については、この場合、 686 00:30:48,190 --> 00:30:50,340 私はちょうどに行くよ 任意にゼロを返す 687 00:30:50,340 --> 00:30:53,210 私たちは、少なくとも有するように、 いくつかのいわゆる基本ケース。 688 00:30:53,210 --> 00:30:54,430 >> しかし、ここの美しさだ。 689 00:30:54,430 --> 00:30:59,930 このアイデアの全体、加算 1からnまでの数字、この場合におけるm、 690 00:30:59,930 --> 00:31:02,630 降圧を渡すの種類によって行うことができる。 691 00:31:02,630 --> 00:31:04,947 さて、mの1の合計は何ですか? 692 00:31:04,947 --> 00:31:05,780 さて、あなたは何を知っていますか? 693 00:31:05,780 --> 00:31:11,949 これは、mの合計と同じです プラス1〜mのマイナス1の合計。 694 00:31:11,949 --> 00:31:12,740 さてあなたは何を知っていますか? 695 00:31:12,740 --> 00:31:13,940 m個のマイナス1シグマは何ですか? 696 00:31:13,940 --> 00:31:17,860 さて、あなたはちょっとこれを従っている場合 論理的に、それはmのマイナス1と同じです 697 00:31:17,860 --> 00:31:21,415 プラスMマイナス2シグマ。 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 だから、ちょっとjust--缶 あなただけのなら、これは、ようなものです 700 00:31:26,012 --> 00:31:28,220 友人を困らしよう 彼らはあなたに質問をする、 701 00:31:28,220 --> 00:31:31,344 あなたはこの種の問題で応答し、 あなたはこの種の降圧を渡す維持することができます。 702 00:31:31,344 --> 00:31:34,560 しかし、何がキーなのはあなたが続ければということです 質問はますます小さくなっ 703 00:31:34,560 --> 00:31:36,910 小さい、あなたがしている シグマは何求めていない 704 00:31:36,910 --> 00:31:39,116 n個の、シグマは何ですか nは、n個のシグマは何ですか? 705 00:31:39,116 --> 00:31:40,990 あなたが何を求めている n個のシグマ、シグマは何ですか 706 00:31:40,990 --> 00:31:42,839 nのマイナス1、n個のマイナス2シグマは何ですか? 707 00:31:42,839 --> 00:31:44,880 最終的にはあなたの質問 何になろうとしているのですか? 708 00:31:44,880 --> 00:31:50,250 一つ以上のシグマとは何ですか ゼロ、いくつかの非常に小さな値、 709 00:31:50,250 --> 00:31:52,220 とすぐとして つまり、あなたの友人を得る 710 00:31:52,220 --> 00:31:54,350 あなたが求めるつもりはありません 再び同じ質問、 711 00:31:54,350 --> 00:31:55,975 あなただけのああそれがゼロだ、と言うつもりです。 712 00:31:55,975 --> 00:31:58,490 私たちは、この種の再生を行っている 愚かな循環的なゲームの。 713 00:31:58,490 --> 00:32:02,950 >> だから、再帰はプログラミングの行為である 自分自身を呼び出す関数の。 714 00:32:02,950 --> 00:32:06,630 コンパイルして実行すると、このプログラムは、、です まったく同じように動作するつもりは、 715 00:32:06,630 --> 00:32:09,620 しかし、何のキーだと、その内側にある シグマ呼び出された関数の、 716 00:32:09,620 --> 00:32:13,150 コー​​ド記載の行があります 私たちは、自分自身を呼んでいる 717 00:32:13,150 --> 00:32:14,980 これは、通常は悪いだろう。 718 00:32:14,980 --> 00:32:21,160 例えば、どのような最初のI場合 これをコンパイルしたので、作るsigma-- 719 00:32:21,160 --> 00:32:22,710 シグマ1 ./sigma-1を作る。 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 正の整数、お願い、50 1275。 722 00:32:27,690 --> 00:32:30,810 それではこの関数はいるようだ 正しいテストに基づいて、あること。 723 00:32:30,810 --> 00:32:34,917 しかし、私は少し危険なものを手に入れる場合には いわゆる基本ケースを削除し、 724 00:32:34,917 --> 00:32:37,750 ちょうどよく私はちょうど作ってるんだ、と言う それはよりも、このより複雑。 725 00:32:37,750 --> 00:32:42,450 ちょうどシグマを計算してみましょう mは服用してから添加することにより 726 00:32:42,450 --> 00:32:44,564 m個のマイナス1シグマでの? 727 00:32:44,564 --> 00:32:45,980 さて、ここで何が起こるだろう? 728 00:32:45,980 --> 00:32:47,140 それではズームアウトしてみましょう。 729 00:32:47,140 --> 00:32:52,920 それでは、プログラムを再コンパイルしてみましょう、 それを保存し、プログラムを再コンパイルし、 730 00:32:52,920 --> 00:33:00,450 ./sigma-1はズームインしてから準備ができて、 、50は正の整数を入力してください。 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 どのように多くのあなたのは喜んでいる それを見ることに白状するには? 733 00:33:04,430 --> 00:33:04,950 >> [OK]をクリックします。 734 00:33:04,950 --> 00:33:06,690 だから、これはために発生する可能性が 多くの理由から、 735 00:33:06,690 --> 00:33:09,148 率直に言って、今週私たちはしている あなたにそれらの多くを与えることについての。 736 00:33:09,148 --> 00:33:11,780 しかしこの場合、試して 後方推論する 737 00:33:11,780 --> 00:33:14,430 ここで何が起こっている可能性があります? 738 00:33:14,430 --> 00:33:17,400 セグメンテーションフォールト、私たちは最後の言った 時間は、メモリのセグメントを意味する。 739 00:33:17,400 --> 00:33:18,690 何かが悪い起こった。 740 00:33:18,690 --> 00:33:21,550 しかし、それは何だったの 機械的にゆがんで行ったこと 741 00:33:21,550 --> 00:33:25,000 こちらの私の除去 その、いわゆる基本ケースの、 742 00:33:25,000 --> 00:33:26,870 私はハードコードされた値を返しどこ? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 あなたは何を間違っていたと思いますか? 745 00:33:30,460 --> 00:33:31,219 うん。 746 00:33:31,219 --> 00:33:32,135 >> 聴衆:[聞こえない]。 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 スピーカー1:ああ。 749 00:33:36,970 --> 00:33:37,550 良い質問。 750 00:33:37,550 --> 00:33:39,508 数の大きそう 私は、合計したことを 751 00:33:39,508 --> 00:33:41,920 それを超えていることをとても大きくなった メモリ空間のサイズ。 752 00:33:41,920 --> 00:33:44,640 良いアイデアではなく、根本的に クラッシュを引き起こすだろう。 753 00:33:44,640 --> 00:33:48,230 つまり、整数オーバーフローが発生する可能性があり、 ビットがちょうど裏返し場所 754 00:33:48,230 --> 00:33:51,760 そして、私たちは本当に大きな間違い 負の数などの番号、 755 00:33:51,760 --> 00:33:53,260 それ自体はクラッシュが発生しないこと。 756 00:33:53,260 --> 00:33:55,509 そのための最後に 当日int型は32ビットです。 757 00:33:55,509 --> 00:33:57,640 あなたはするつもりはない 誤って33番目のビットを盗む。 758 00:33:57,640 --> 00:33:58,431 しかし、よく考えて。 759 00:33:58,431 --> 00:33:58,984 うん。 760 00:33:58,984 --> 00:33:59,900 >> 聴衆:[聞こえない]。 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 スピーカー1:メソッド 実行を停止することはありません、 763 00:34:02,300 --> 00:34:06,658 そして実際、それは再び自分自身を呼び出し そして何度も何度も何度も 764 00:34:06,658 --> 00:34:08,449 そして再び、とのいずれも 今までにそれらの機能 765 00:34:08,449 --> 00:34:13,310 彼らの唯一の行のための仕上げ コー​​ドが何度も何度もその人自身を呼び出す 766 00:34:13,310 --> 00:34:14,219 そして再び。 767 00:34:14,219 --> 00:34:16,080 そして、実際に何が ここで起こって、今、私たち 768 00:34:16,080 --> 00:34:18,100 種類の絵でこれを描くことができます。 769 00:34:18,100 --> 00:34:20,899 私はに引き継が行こう ちょっと絵。 770 00:34:20,899 --> 00:34:22,940 これはという、絵です 最終的に肉付けします 771 00:34:22,940 --> 00:34:26,336 より詳細に、何が起こっているの コンピュータのメモリの内部。 772 00:34:26,336 --> 00:34:28,460 そして、それはその上に判明 この写真の一番下 773 00:34:28,460 --> 00:34:29,709 スタックと呼ば​​れるものです。 774 00:34:29,709 --> 00:34:31,920 これはの塊です メモリ、RAMの塊、 775 00:34:31,920 --> 00:34:33,920 それはただの時間を使われています 関数が呼び出されます。 776 00:34:33,920 --> 00:34:36,239 いつでもあなたは、プログラマ、 関数を呼び出し、 777 00:34:36,239 --> 00:34:38,860 オペレーティングシステム、等 Mac OSでは、Windows、またはLinuxで、 778 00:34:38,860 --> 00:34:41,920 多分、バイトの束をつかむ 数キロバイト、多分数メガバイト 779 00:34:41,920 --> 00:34:44,590 メモリを、それらを手 あなたに、そして、その後することができます 780 00:34:44,590 --> 00:34:47,650 あなたが使用して関数を実行 どんな変数があなたが必要です。 781 00:34:47,650 --> 00:34:50,699 そして、あなたは、別のを呼び出す場合 関数と別の関数、 782 00:34:50,699 --> 00:34:53,590 あなたは、メモリの別のスライスを取得 およびメモリの別のスライス。 783 00:34:53,590 --> 00:34:57,090 >> そして実際に、これらの緑のトレイの場合 アネンバーグから、そのメモリを表す 784 00:34:57,090 --> 00:34:59,870 ここで最初に何が起こるかだ ファンクション·シグマを呼び出す時。 785 00:34:59,870 --> 00:35:04,510 それはこのようにトレーを置くようなものだ 最初は空のスタック何上。 786 00:35:04,510 --> 00:35:07,142 しかし、そのトレーの場合 いわば、自身を呼び出し、 787 00:35:07,142 --> 00:35:08,850 別のインスタンスを呼び出す シグマの、それはだ 788 00:35:08,850 --> 00:35:11,640 オペレーティング·システムを尋ねるように、 ああ、少しより多くのメモリを必要とする、 789 00:35:11,640 --> 00:35:12,520 私にそれを与える。 790 00:35:12,520 --> 00:35:14,840 そして、それは上に上に積まれます。 791 00:35:14,840 --> 00:35:18,030 しかしここで重要なのはということです 第一のトレーは、まだそこにある 792 00:35:18,030 --> 00:35:20,620 彼は、この第2のトレイを起動しているため。 793 00:35:20,620 --> 00:35:23,500 さて一方、シグマ、シグマを呼ぶ それはより多くのメモリを要求するようなものだ。 794 00:35:23,500 --> 00:35:25,830 こっちでの積み上げを取得します。 795 00:35:25,830 --> 00:35:29,350 シグマは、それはまた別のだが、シグマを呼び出す ここでの積み上げれますトレイ。 796 00:35:29,350 --> 00:35:32,942 そして、あなたはこれをやり続ける場合、 最終的に、この種のこのビジュアルにマップ 797 00:35:32,942 --> 00:35:35,525 そのグラフに、に何が起こっている トレーのスタックで発生? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 それは量を超えることが起こっている メモリのコンピュータがあります。 800 00:35:41,160 --> 00:35:45,790 そして、すぐにこの緑色のトレイなど 水平線を越えて 801 00:35:45,790 --> 00:35:49,410 スタック上でその単語ヒープ上で、 その私たちは将来的にに戻ってくるだろう、 802 00:35:49,410 --> 00:35:50,410 それが悪いことだ。 803 00:35:50,410 --> 00:35:52,810 ヒープは異なっている メモリのセグメント、 804 00:35:52,810 --> 00:35:55,190 そしてこれらを聞かせている場合 上のトレーの山と山、 805 00:35:55,190 --> 00:35:57,800 あなたが超過するつもりだ メモリの独自のセグメント、 806 00:35:57,800 --> 00:36:00,420 プログラムは、実際にクラッシュしようとしている。 807 00:36:00,420 --> 00:36:02,930 >> さて余談ですが、このアイデアとして 再帰のため、 808 00:36:02,930 --> 00:36:06,500 明らかに問題が発生する可能性がありますが、 それは必ずしも悪いことではありません。 809 00:36:06,500 --> 00:36:08,840 検討しているので、後に すべての、多分how--と 810 00:36:08,840 --> 00:36:11,700 これは、いくつかは慣れが必要 --howするエレガントなまたはどのように単純な 811 00:36:11,700 --> 00:36:14,890 シグマの実装があった。 812 00:36:14,890 --> 00:36:17,440 そして、私たちは使用するつもりはない CS50内のすべてのそれほど再帰、 813 00:36:17,440 --> 00:36:20,780 しかしCS51において、本当に任意のクラス あなたがデータ構造を操作する場合、 814 00:36:20,780 --> 00:36:23,640 樹木、または家族の木のように、 それはいくつかの階層があり、 815 00:36:23,640 --> 00:36:26,000 それは超便利、スーパーだ。 816 00:36:26,000 --> 00:36:29,750 さて、余談ですが、あなたがそのように コンピュータ科学者を志望として 817 00:36:29,750 --> 00:36:33,180 Googleのいくつかに精通している あなたはGoogleに行けば内側ジョーク、 818 00:36:33,180 --> 00:36:36,345 あなたが何であるかを調べる 、の定義はたとえば、再帰、次のように入力します。 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 うん。 821 00:36:41,110 --> 00:36:42,670 余談として、私はいくつかをプルアップされています。 822 00:36:42,670 --> 00:36:45,470 これは10分のようだった 先延ばし今朝。 823 00:36:45,470 --> 00:36:52,890 もしあなたもGoogleの「斜めに」予告 あなたの頭を傾けてslightly-- 824 00:36:52,890 --> 00:36:55,120 そして、この1は、おそらくです すべての中で最も凶悪な 825 00:36:55,120 --> 00:36:57,286 誰かは次のように過ごしているので その日これを実装 826 00:36:57,286 --> 00:36:59,880 何年かが点灯ago--。 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 ああ、wait--それはバグです。 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> だから、のいずれかで実行されている 世界最大のウェブサイト 831 00:37:11,410 --> 00:37:13,510 これらの愚かな小さなイースターエッグです。 832 00:37:13,510 --> 00:37:16,690 おそらく彼らは消費する コー​​ドの行数は自明でない 833 00:37:16,690 --> 00:37:19,280 ちょうど私達が持つことができるように そのような小さな楽しいこと。 834 00:37:19,280 --> 00:37:22,140 しかし、少なくとも今あなたが得る これらの内部のジョークのいくつか。 835 00:37:22,140 --> 00:37:28,330 >> それでは、いくつかを見てみましょう 私たちは後半の言ってきた白い嘘、 836 00:37:28,330 --> 00:37:30,707 そして戻って剥離し始める いくつかの層、技術的に 837 00:37:30,707 --> 00:37:32,790 あなたが本当に理解しているので、 何が起こっているされています 838 00:37:32,790 --> 00:37:34,860 あなたが理解することができます 脅威のいくつかの、 839 00:37:34,860 --> 00:37:38,060 シェルショックのような、その 今になって始めている 840 00:37:38,060 --> 00:37:41,110 皆のの最前線について 少なくともメディアで注目、。 841 00:37:41,110 --> 00:37:45,810 だからここに非常に単純な関数である それは、ボイド、何も返しません。 842 00:37:45,810 --> 00:37:46,790 その名は、スワップです。 843 00:37:46,790 --> 00:37:50,880 それは、2つの変数を取り込み そしてそれは何も返しません。 844 00:37:50,880 --> 00:37:52,260 aとbを取り込む。 845 00:37:52,260 --> 00:37:53,337 だから、簡単なデモ。 846 00:37:53,337 --> 00:37:54,170 当社は、これらを育てた。 847 00:37:54,170 --> 00:37:56,100 私たちは同様に少しかかることがあります ちょっとここで破る 848 00:37:56,100 --> 00:37:57,250 そして飲む少し何かを持っている。 849 00:37:57,250 --> 00:38:00,120 誰かが参加する気にしないだろう場合は ここでちょっと私をバックアップします。 850 00:38:00,120 --> 00:38:01,830 どのようにえび茶色のシャツでのあなたは? 851 00:38:01,830 --> 00:38:02,335 アップさあ。 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 ちょうど1今日。 854 00:38:05,260 --> 00:38:06,251 しかし、ありがとうございます。 855 00:38:06,251 --> 00:38:08,000 すべての権利、私たちは持っている 誰がここに来る? 856 00:38:08,000 --> 00:38:08,660 あなたの名前は? 857 00:38:08,660 --> 00:38:09,360 >> スピーカー4:ローラ。 858 00:38:09,360 --> 00:38:09,740 >> スピーカー1:ローラ。 859 00:38:09,740 --> 00:38:10,370 アップさあ。 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 だからローラ、非常に単純な挑戦今日。 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 ヨーヨーはじめまして。 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 かしこまりました。 866 00:38:16,910 --> 00:38:21,179 だから私たちはここと比べていくつかの牛乳を持っている 私たちはここに比べていくつかのオレンジジュースを持っている 867 00:38:21,179 --> 00:38:23,345 私たちいくつかのカップを 今日アネンバーグから借りた。 868 00:38:23,345 --> 00:38:24,178 >> スピーカー4:借用。 869 00:38:24,178 --> 00:38:27,240 スピーカー1:そして、先に行くつもり そしてあなたにこの半分のガラスを与える。 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 かしこまりました。 872 00:38:28,800 --> 00:38:30,750 そして、私たちはあなたに半分あげる 牛乳のガラス。 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 ああ、ちょうどあなたができるように、 このようなものだったか覚えて、 875 00:38:35,890 --> 00:38:38,860 私が持って思い出した このアップ今日について。 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 わかりました。 878 00:38:42,530 --> 00:38:45,470 あなたが気にしないのであれば、見てみましょう、私たち あなた自身のメガネの上にそれらを置くことができます 879 00:38:45,470 --> 00:38:46,560 あなたがしたい場合。 880 00:38:46,560 --> 00:38:48,710 これはローラの目から世界になるでしょう。 881 00:38:48,710 --> 00:38:49,210 かしこまりました。 882 00:38:49,210 --> 00:38:53,820 だからあなたの目標は、2杯を与えられ ここでは、液体、ミルク、オレンジジュース、 883 00:38:53,820 --> 00:38:58,370 2つのコンテンツを交換されるので、 オレンジジュース、ミルクカップに入る 884 00:38:58,370 --> 00:39:00,710 そしてミルクに入る オレンジジュースカップ。 885 00:39:00,710 --> 00:39:02,359 >> スピーカー4:私は別のカップを取得していますか? 886 00:39:02,359 --> 00:39:05,650 スピーカー1:でも、私はあなたが尋ねたうれしい それははるかに良い映像だっただろう 887 00:39:05,650 --> 00:39:06,710 あなたが持っていたかどうか尋ねていない。 888 00:39:06,710 --> 00:39:10,620 しかし、はい、私たちはあなたにサードを提供することができます もちろん、空のコップ。 889 00:39:10,620 --> 00:39:11,120 かしこまりました。 890 00:39:11,120 --> 00:39:12,300 だから内容を入れ替える。 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 非常に素晴らしい。 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 非常に良い。 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 あなたは著しく、慎重にこれをやっている。 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 そして、ステップ3。 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 かしこまりました。 901 00:39:31,350 --> 00:39:31,930 優秀。 902 00:39:31,930 --> 00:39:33,930 大きな拍手 ローラのために良いでしょう。 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 かしこまりました。 905 00:39:37,000 --> 00:39:40,790 私たちは、少し別れの贈り物を持っている あなたのために、しかし、私はこれらを取りましょう。 906 00:39:40,790 --> 00:39:42,620 どうもありがとうございました。 907 00:39:42,620 --> 00:39:46,170 だから簡単な例は、しかし、 これを行うとすることを実証するために 908 00:39:46,170 --> 00:39:48,300 内容を入れ替えたい 二つの容器の、 909 00:39:48,300 --> 00:39:52,360 またはの変数にそれらを呼ぶことにしましょう​​、 あなたは、いくつかの一時的なストレージが必要 910 00:39:52,360 --> 00:39:56,710 そこらでコンテンツのいずれかをステージに あなたが実際にスワップを行うことができます。 911 00:39:56,710 --> 00:40:01,790 ここでそのように確かに、このソースコードアップ Cは、まさにそれを表している。 912 00:40:01,790 --> 00:40:06,340 オレンジジュースは、Aと牛乳だった場合 、Bだった、と私たちは2を交換したかった 913 00:40:06,340 --> 00:40:08,990 あなたは創造的な何かを試みることができる 他に1を注ぐことにより、 914 00:40:08,990 --> 00:40:11,031 それはおそらくないだろう 特によく終わる。 915 00:40:11,031 --> 00:40:15,260 そして、私たちは第三のカップ、呼び出しを使用 それtmpに、慣例により、T-M-P、 916 00:40:15,260 --> 00:40:19,370 との内容を入れ OJはその中で、片方のカップを交換し、 917 00:40:19,370 --> 00:40:22,610 その後にOJを入れる それによってオリジナルのカップ、 918 00:40:22,610 --> 00:40:25,320 まったく同じように、達成する ローラは、スワップをしました。 919 00:40:25,320 --> 00:40:26,850 >> それでは、正確にそれを行うことができます。 920 00:40:26,850 --> 00:40:30,110 私が先に行くと開いてみましょう だ例アップ 921 00:40:30,110 --> 00:40:32,720 実際にノー」と呼ばれる スワップ、「これではありませんので、 922 00:40:32,720 --> 00:40:36,180 あなたが考えるほど単純に行わ。 923 00:40:36,180 --> 00:40:41,190 したがって、このプログラムの中で、あることに気付く 私はstdio.hに、私たちの古くからの友人を使用しています。 924 00:40:41,190 --> 00:40:43,130 私は試作品を持っている そこスワップアップのため、これ 925 00:40:43,130 --> 00:40:45,450 その実装の意味 おそらくダウン下の、 926 00:40:45,450 --> 00:40:48,050 と見てみましょうメイン何この プログラムは、私のために何をするつもりだ。 927 00:40:48,050 --> 00:40:52,020 私は最初のint xが取得する宣言 一方、yは二つ取得int型。 928 00:40:52,020 --> 00:40:54,930 だから、OJとしてそれらを考える それぞれ、牛乳、。 929 00:40:54,930 --> 00:40:57,100 そして私はちょうど持っている printfのxがこれですと言って 930 00:40:57,100 --> 00:41:00,120 yはちょうどので、私ができる、これです 視覚的に起こっているのかを見る。 931 00:41:00,120 --> 00:41:03,810 それから私は主張しているのprintf 私は2つを交換していることを、 932 00:41:03,810 --> 00:41:07,100 そして私はプリントアウト 彼らが入れ替わっていると主張している、 933 00:41:07,100 --> 00:41:09,300 そして私は再び、xとyをプリントアウト。 934 00:41:09,300 --> 00:41:13,010 だから、ここでダウンスワップ中です 正確にローラが何をしたか、 935 00:41:13,010 --> 00:41:16,240 そして私たちが見たかを正確に 先ほどの画面。 936 00:41:16,240 --> 00:41:19,380 >> それでは、先に行くとしましょう 痛んでがっかりする。 937 00:41:19,380 --> 00:41:24,690 何スワップを作るようにし、決してスワップを実行していない、 ここで、出力にズームイン。 938 00:41:24,690 --> 00:41:28,320 xは1で入力し、yはスワップスワッピング、2である。 939 00:41:28,320 --> 00:41:32,700 xは依然として1であり、yはまだ2である。 940 00:41:32,700 --> 00:41:37,630 だからにもかかわらず、率直に言って、これが見える 正確に、より技術的にではあるが、好き 941 00:41:37,630 --> 00:41:40,730 ローラが何をしたか、動作していないようでした。 942 00:41:40,730 --> 00:41:42,130 では、なぜそのようになるのですか? 943 00:41:42,130 --> 00:41:46,630 まあ、それは時にあることが判明 私たちはこのようなプログラムを書く 944 00:41:46,630 --> 00:41:51,590 それは、両方のメイン、ここで強調している、 し、別の機能、スワップのような、 945 00:41:51,590 --> 00:41:54,230 、ここで強調される それは世界呼び出し 946 00:41:54,230 --> 00:41:57,030 のような少し何かに見える 少し前これらのトレイ。 947 00:41:57,030 --> 00:42:00,440 メイン1は、呼び出されると、 それは、オペレーティングシステムを尋ねるようなものだ 948 00:42:00,440 --> 00:42:04,030 任意のローカルのためのメモリのビットのために 主が持っているxとyのような変数、 949 00:42:04,030 --> 00:42:05,660 彼らはすぐそこに終わる。 950 00:42:05,660 --> 00:42:10,920 しかし、主な通話は交換し、メインあれば 二つの引数aとbを交換することに渡し、 951 00:42:10,920 --> 00:42:16,410 オレンジジュースと牛乳、それはようではありません オレンジジュースと牛乳を渡す 952 00:42:16,410 --> 00:42:17,500 ローラへ。 953 00:42:17,500 --> 00:42:21,300 どんなコンピュータ、それはありませんです。 オレンジジュースのコピーを渡します 954 00:42:21,300 --> 00:42:27,110 ローラへのミルクのコピー、その結果 このトレイの中に、最終的に何が 955 00:42:27,110 --> 00:42:32,510 値1および2、またはOJです 牛乳はなく、そのコピーを、 956 00:42:32,510 --> 00:42:34,790 その結果、この時点で 物語の中で、そこに 957 00:42:34,790 --> 00:42:36,930 これらのトレイのそれぞれにおけるOJとミルクです。 958 00:42:36,930 --> 00:42:39,260 1と2があります これらのトレイのそれぞれにおいて、 959 00:42:39,260 --> 00:42:41,720 およびスワップ機能は確かに動作しています。 960 00:42:41,720 --> 00:42:46,090 これは、内部​​のそれらを交換することだ 第二一番上のトレイ、 961 00:42:46,090 --> 00:42:48,147 それスワッピングは影響はありません。 962 00:42:48,147 --> 00:42:49,980 そして、ちょうどいくつかに基づいて、 私たちがした基本原則 963 00:42:49,980 --> 00:42:52,970 前の話、そして実際に ほんの数分前に、どのような 964 00:42:52,970 --> 00:42:58,770 変更する理由を説明するかもしれない スワップの内側とb 965 00:42:58,770 --> 00:43:05,560 にもかかわらず、xおよびyに影響を及ぼさない 私は、スワップ機能にxとyを可決した。 966 00:43:05,560 --> 00:43:08,750 ここでそのキーワードは何ですか 単純化して説明するかもしれない? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 私はここでそれを聞いたと思いますか? 969 00:43:12,627 --> 00:43:13,335 聴衆:リターン。 970 00:43:13,335 --> 00:43:14,085 スピーカー1:戻る? 971 00:43:14,085 --> 00:43:14,590 返さない。 972 00:43:14,590 --> 00:43:15,895 それでは、他のものに行きましょう。 973 00:43:15,895 --> 00:43:16,395 なにそれ? 974 00:43:16,395 --> 00:43:17,080 >> 聴衆:[聞こえない]。 975 00:43:17,080 --> 00:43:20,000 >> スピーカー1:OK、私たちはできるreturn-- 物語の中でリターンを機能させる、 976 00:43:20,000 --> 00:43:21,914 それでも簡単な説明があります。 977 00:43:21,914 --> 00:43:22,580 聴衆:範囲。 978 00:43:22,580 --> 00:43:23,288 スピーカー1:範囲。 979 00:43:23,288 --> 00:43:24,300 私は、スコープを取るよ。 980 00:43:24,300 --> 00:43:27,290 だからスコープ、場所を覚えて 私たちのx、yは宣言した。 981 00:43:27,290 --> 00:43:30,840 彼らは、内部に宣言されている メインの右ここまで。 982 00:43:30,840 --> 00:43:33,200 aおよびbは、一方で、ある 効果的に宣言された 983 00:43:33,200 --> 00:43:35,930 スワップの内側ではなく、かなり 中括弧それでも 984 00:43:35,930 --> 00:43:37,690 スワップの一般的な領域にある。 985 00:43:37,690 --> 00:43:40,560 だから確かに、aとb これだけのトレイ内に存在する 986 00:43:40,560 --> 00:43:44,850 アネンバーグから、この コー​​ドの第2のチャンク。 987 00:43:44,850 --> 00:43:49,500 だから私たちは確かにコピーを変更しているが、 それは本当にすべてが有用ではありません。 988 00:43:49,500 --> 00:43:52,190 >> それでは見てみましょう この小さな低いレベル。 989 00:43:52,190 --> 00:43:55,430 私はに戻って行くつもりです ソースディレクトリ、 990 00:43:55,430 --> 00:43:58,330 と私は最初に行くよ ここでのズーム、ちょうど 991 00:43:58,330 --> 00:44:02,290 私はこの中にいることを確認するために、 大きなターミナルウィンドウ、 992 00:44:02,290 --> 00:44:04,430 プログラムは、まだそのように振る舞うだ。 993 00:44:04,430 --> 00:44:06,840 今ではこの仮定 意図的ではありません。 994 00:44:06,840 --> 00:44:10,090 明らかに、私はへのスワップを望んでいた 作業は、ので、それはバグのように感じている。 995 00:44:10,090 --> 00:44:12,780 今、私は追加を開始できた 私のコードへのprintfのたくさんの、 996 00:44:12,780 --> 00:44:16,010 、yはこっちのxの上にプリントアウト ここでは、こっち、こっちB。 997 00:44:16,010 --> 00:44:18,220 しかし、率直に言って、それはおそらく何 あなたは数週間行ってきた 998 00:44:18,220 --> 00:44:20,190 今、業務時間中に 自宅で作業するとき 999 00:44:20,190 --> 00:44:22,150 いくつかのバグを見つけようとのpset上。 1000 00:44:22,150 --> 00:44:25,560 あなたは既にいない場合しかし、あなたは、表示されます、 その問題は、三つを紹介設定 1001 00:44:25,560 --> 00:44:31,630 GDBと呼ばれるコマンドに、 ここで、GDB、GNUデバッガ、 1002 00:44:31,630 --> 00:44:34,040 それ自体の全体の束を持ってい 特徴はそれが実際にできます 1003 00:44:34,040 --> 00:44:38,160 私たちは状況を理解してみましょう このような、より説得力、 1004 00:44:38,160 --> 00:44:39,940 問題を解決し、バグを見つける。 1005 00:44:39,940 --> 00:44:40,940 だから私は、これを行うつもりです。 1006 00:44:40,940 --> 00:44:44,770 その代わり./noswap、私は代わりによ GDBの./noswapを実行するつもり。 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 言い換えれば、私は私のを実行するつもりです プログラムではなくbashで、私たちの新しい友人 1009 00:44:51,200 --> 00:44:51,850 今日。 1010 00:44:51,850 --> 00:44:53,970 私は自分を実行するつもりです 内部のプログラムNOSWAP 1011 00:44:53,970 --> 00:44:56,900 と呼ばれるこの他のプログラムの デバッガですGDB、その 1012 00:44:56,900 --> 00:45:01,035 助けるように設計されていますプログラムです あなたが見つけたバグを取り除く人間。 1013 00:45:01,035 --> 00:45:03,410 私がここに実行しヒットのであれば、あります テキストの凶悪な量 1014 00:45:03,410 --> 00:45:04,868 あなたは本当に読む必要がないこと。 1015 00:45:04,868 --> 00:45:07,290 それは本質的に気晴らしだ これは、プロンプトから 1016 00:45:07,290 --> 00:45:10,030 私は、コントロール-Lをヒットするつもりです そこに一番上に立ち上がった。 1017 00:45:10,030 --> 00:45:11,800 これは、GDBのプロンプトです。 1018 00:45:11,800 --> 00:45:15,550 私は今、このプログラムを実行する場合は、 今日の上のこの小さなチートシートとして 1019 00:45:15,550 --> 00:45:21,860 スライドは、実行して、最初に、示唆している 私たちがご紹介するためのものというコマンド。 1020 00:45:21,860 --> 00:45:25,150 そして私はちょうどタイプするつもりだ GDBの内部で、ここまで実行し、 1021 00:45:25,150 --> 00:45:26,811 そして実際、それは私のプログラムを実行しました。 1022 00:45:26,811 --> 00:45:29,310 今、いくつかの追加があります このような画面の出力は、 1023 00:45:29,310 --> 00:45:31,910 それは、GDBだけであること肛門です そして何が起こっているかを告げて。 1024 00:45:31,910 --> 00:45:34,451 あなたは本当に心配する必要はありません 今、これらの詳細についての。 1025 00:45:34,451 --> 00:45:36,890 しかし、何がについては本当にクールだ 私がしなければGDBは、これがagain-- 1026 00:45:36,890 --> 00:45:42,100 コントロール-Lは、私が行かせscreen--クリアする 先とタイプ、それにより「メイン破る " 1027 00:45:42,100 --> 00:45:45,743 私は何の設定、Enterキーを押したとき noswap.cでのブレークポイントと呼ばれる、 1028 00:45:45,743 --> 00:45:51,270 GDBであるライン16、 実際に私のプログラムを考え出し 1029 00:45:51,270 --> 00:45:53,070 私の機能は、実際には、である。 1030 00:45:53,070 --> 00:45:55,070 これは、私たちは今のところ無視するよ それは、アドレスです 1031 00:45:55,070 --> 00:45:57,310 特にこの関数のメモリ内。 1032 00:45:57,310 --> 00:46:00,240 だから今、私が入力したときに実行すると、 ここにクールだ何に気づく。 1033 00:46:00,240 --> 00:46:05,650 線Iでの私のプログラムが壊れ で実行を一時停止するGDBを語った。 1034 00:46:05,650 --> 00:46:09,850 だから私は今、私のコードを変更する必要はありません、 、いくつかのprintfのを追加し、それを再コンパイルし、再実行 1035 00:46:09,850 --> 00:46:13,300 それは、変更、いくつかのprintfのを追加し、 それを保存し、それを再コンパイルし、実行します。 1036 00:46:13,300 --> 00:46:18,100 私はちょうど私のプログラムの中を歩くことができます 人間の速さで一歩一歩一歩、 1037 00:46:18,100 --> 00:46:20,880 ではないスピードのインテル内部親切で。 1038 00:46:20,880 --> 00:46:24,580 >> だから今この行に気付く ここに表示され、私は戻ってしまったら 1039 00:46:24,580 --> 00:46:27,800 geditの中で私のプログラムに、 それが実際にあることに注意してください 1040 00:46:27,800 --> 00:46:29,280 コー​​ドの最初の行。 1041 00:46:29,280 --> 00:46:31,240 16行目は、geditの中にあります。 1042 00:46:31,240 --> 00:46:34,610 あり16行目は、GDBの中だ、とさえ この黒と白のインターフェースも 1043 00:46:34,610 --> 00:46:37,760 ほとんどのユーザーとしてではありません 優しい、この手段 1044 00:46:37,760 --> 00:46:41,680 そのライン16が実行されていない まだ、それがあることが約だ。 1045 00:46:41,680 --> 00:46:46,220 だから、確かに私は印刷と入力した場合 のx、printfの、ちょうど、xが印刷されない 1046 00:46:46,220 --> 00:46:50,730 私は、ゼロのそこにいくつかの偽の値を取得 xがまだ初期化されていないので。 1047 00:46:50,730 --> 00:46:54,760 あなたのであれば、私は、次を入力しようとして、またはよ すぐ隣のためのN、空想になりたい。 1048 00:46:54,760 --> 00:46:59,090 私は、次の入力したときにしかし、今、次のように入力します それは17行に移る気づく。 1049 00:46:59,090 --> 00:47:02,840 だから論理的に、私が実行してしまった場合 ライン16と私は今、プリントxを入力し、 1050 00:47:02,840 --> 00:47:03,640 私は何が表示されるはず? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 一つ。 1053 00:47:05,520 --> 00:47:07,820 >> そして今、これは確かに混乱しています。 1054 00:47:07,820 --> 00:47:11,260 $ 2、の変わった方法でよろしければ 後でその値を参照したい場合は、 1055 00:47:11,260 --> 00:47:12,510 あなたは「ドル記号2 "を言うことができます 1056 00:47:12,510 --> 00:47:13,480 これは、後方参照のようなものだ。 1057 00:47:13,480 --> 00:47:14,570 しかし、今のところ、それを無視してください。 1058 00:47:14,570 --> 00:47:17,070 面白いのは、何である 等号の右側にある。 1059 00:47:17,070 --> 00:47:21,000 そして今、私は、次の入力した場合、再び と印刷yは、私は2が表示されるはずです。 1060 00:47:21,000 --> 00:47:23,870 私も今印刷することができます のxを再び、と率直に言って、 1061 00:47:23,870 --> 00:47:27,130 私はに関して少し混乱取得していた場合 私はどこで、私は、リストのためのリストを入力することができます 1062 00:47:27,130 --> 00:47:30,590 ちょうど周りにいくつかのコンテキストを参照してください。 ポイントは、私は実際にいる。 1063 00:47:30,590 --> 00:47:35,180 そして今、私が入力することができます 次の、そしてそこに、xは1である。 1064 00:47:35,180 --> 00:47:36,300 今、私は、次の入力します。 1065 00:47:36,300 --> 00:47:37,710 ああ、yは2である。 1066 00:47:37,710 --> 00:47:40,750 そして再び、それは混乱して、 GDBの出力理由 1067 00:47:40,750 --> 00:47:43,044 私自身の出力と混合されています。 1068 00:47:43,044 --> 00:47:45,710 しかし、あなたが心に留めておく場合には、バイ あなたのコードで前後かすめる 1069 00:47:45,710 --> 00:47:47,740 または側面を、それをレイアウトする おそらくサイドすることで、よ 1070 00:47:47,740 --> 00:47:51,020 本当に私はちょうど私がわかり 私のプログラムをステップ実行する。 1071 00:47:51,020 --> 00:47:54,620 >> しかし、文字通り、次に何が起こるかわかります。 1072 00:47:54,620 --> 00:47:56,380 ここでは22行です。 1073 00:47:56,380 --> 00:48:01,315 私はその上に行ってみよう、それによって先に進む 23に、そして私は今、まだ一つのX印刷する場合。 1074 00:48:01,315 --> 00:48:03,890 そして、私は今のyを印刷する場合、まだ1つ。 1075 00:48:03,890 --> 00:48:05,820 だから、これは便利な練習ではありません。 1076 00:48:05,820 --> 00:48:07,450 それでは、これをやり直してみましょう。 1077 00:48:07,450 --> 00:48:10,069 私はまで戻りましょう トップと再度実行タイプ。 1078 00:48:10,069 --> 00:48:12,110 そしてそれは、プログラムを言っている それがデバッグされています 1079 00:48:12,110 --> 00:48:14,109 すでに始まっている、 最初から始めた。 1080 00:48:14,109 --> 00:48:15,420 はい、それでは再びこれをやらせる。 1081 00:48:15,420 --> 00:48:22,000 そして、この時間は、の次やらせる 次、次、次、次、 1082 00:48:22,000 --> 00:48:24,180 今は物事が面白く。 1083 00:48:24,180 --> 00:48:27,760 今、私は足を踏み入れるしたい スワップので、私は、次の入力しないでください。 1084 00:48:27,760 --> 00:48:34,380 私はそれに気づくようになりましステップを入力し、 noswap.c 33行に私をジャンプした。 1085 00:48:34,380 --> 00:48:37,240 私はgeditのに戻った場合は、33行は何ですか? 1086 00:48:37,240 --> 00:48:40,500 すなわち、まず、実際の スワップの内のコードの行。 1087 00:48:40,500 --> 00:48:44,150 どの今私ができるので、いいです 種の周り突くと好奇心を取得 1088 00:48:44,150 --> 00:48:46,052 そこに本当に何が起こっているのかに関して。 1089 00:48:46,052 --> 00:48:46,760 私はTMPを印刷してみましょう。 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 おっと。 1092 00:48:48,800 --> 00:48:51,438 なぜtmpがいくつかを持っていない クレイジー、偽のごみ値? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 聴衆:それは初期化されていません。 1095 00:48:56,120 --> 00:48:57,150 SPEAKER 1:それは初期化されていない。 1096 00:48:57,150 --> 00:49:00,270 そして実際、あなたがプログラムを実行すると、 あなたは、メモリの全体の束を与えられている 1097 00:49:00,270 --> 00:49:03,392 オペレーティングシステムによってではなく、あなた すべての値を初期化していないが、 1098 00:49:03,392 --> 00:49:05,600 そう何ビットあなたがしている それはだとしても、ここで見て 1099 00:49:05,600 --> 00:49:07,770 このクレイジーな大きな負 番号は、単に意味 1100 00:49:07,770 --> 00:49:10,750 それらはからの名残であることを そのRAMはいくつかの以前の使用状況、 1101 00:49:10,750 --> 00:49:13,050 私は持っていないにもかかわらず、 私はまだそれを必要としていました。 1102 00:49:13,050 --> 00:49:17,086 だから今、私は先に行くと入力するつもりだ 次の、そして私は今、印刷tmpを入力した場合、 1103 00:49:17,086 --> 00:49:17,835 私は何が表示されるはず? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 どのような値であった、 ただ、最初の引数である 1106 00:49:23,360 --> 00:49:25,550 xが最初だったように 事が渡されて、 1107 00:49:25,550 --> 00:49:30,450 従って、xは、同じであるべき これで印刷tmpが私にものを印刷する必要があります。 1108 00:49:30,450 --> 00:49:36,360 >> だから、何を問題のあるセットに表示されます 3は、GDB上の一種のチュートリアルです、 1109 00:49:36,360 --> 00:49:40,020 しかし、これは始まりであることを認識 その実際にするツールを見ての 1110 00:49:40,020 --> 00:49:42,774 あなたが問題を解決するのに役立つ そんなにより効果的。 1111 00:49:42,774 --> 00:49:44,690 私たちは最終的に何をしている 水曜日に何をするつもり 1112 00:49:44,690 --> 00:49:48,180 数層をバック剥離を開始されている といくつかの補助輪を外します。 1113 00:49:48,180 --> 00:49:50,496 そのことと呼ばれる文字列その 私たちはしばらくの間使ってきた、 1114 00:49:50,496 --> 00:49:53,370 私たちは、ゆっくりとそれを奪うようになるだろう あなたからとについて話し始める 1115 00:49:53,370 --> 00:49:55,725 何かもっとesoterically はchar *として知られている、 1116 00:49:55,725 --> 00:49:59,550 私たちはこの素敵なをやろうとしていると 優しくしてもポインタも、最初は、 1117 00:49:59,550 --> 00:50:02,730 彼らが呼ばしているように、いくつかを行うことができます 虐待を受けた場合に、非常に悪い、 1118 00:50:02,730 --> 00:50:06,040 から少しクレイメーションを見ることによって、 スタンフォードから私たちの友人ニックParlante 1119 00:50:06,040 --> 00:50:09,670 大学、コンピュータ教授 このプレビューをまとめる科学 1120 00:50:09,670 --> 00:50:11,075 この水曜日来て何の。 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [ビデオ再生] 1123 00:50:13,400 --> 00:50:13,900 -Hey、Binky。 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 目を覚ます。 1126 00:50:15,780 --> 00:50:17,240 これは、ポインタの楽しみのための時間です。 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> それは - 何ですか? 1129 00:50:19,350 --> 00:50:21,150 ポインタについて学ぶ? 1130 00:50:21,150 --> 00:50:22,050 ああ、グッディ! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END VIDEO再生] 1133 00:50:23,730 --> 00:50:25,396 スピーカー1:水曜日にあなたをお待ちしております。 1134 00:50:25,396 --> 00:50:26,440 次に、お会いしましょう​​。 1135 00:50:26,440 --> 00:50:27,106 [ビデオ再生] 1136 00:50:27,106 --> 00:50:30,420 - そして今、ディープ思考、 祈るファーナムによる。 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> - なぜ私たちは、Cを学んでいる? 1139 00:50:35,900 --> 00:50:36,785 どうして+? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [笑い] 1142 00:50:40,910 --> 00:50:42,160 >> [END VIDEO再生]