DAVIDマラン:すべての権利。 これはCS50であり、これは 今週3の始まり。 だから今まで、私たちはしました C言語でプログラムを書いて それが少し見える ここでこのようなもの。 だから私たちはのカップルを持っている シャープは、最上部に含まれています。 私たちは、int型のメインボイドんだ、と その後途中で何かする、 内のコードのいくつかのビット その関数の。 しかし、キーが事実であった ここでは、ボイド言ってきた。 そこで、ボイド、この時間のすべて、指定 このプログラムは、ときに実行すること、 その名前だけを経由して実行することができます。 あなたは他の単語を入力することはできませんか プログラム名の後の数字とき それを実行している。 そこで、例えば、プログラムはあたかも ハローと呼ばれるファイルにコンパイル、 あなたは./hello行うことができますが、それはそれである。 

唯一の方法は、あなたは可能性が このプログラムへの入力を提供 関数を呼び出すことである。 例えば、どのような機能 私たちはこれまで使用していた ユーザからの入力を取得するには? 

聴衆:文字列を取得します。 DAVIDマラン:文字列を取得するには、または int型を取得するか、他の人を見てきた、 あなたがそれらをまだ使用していない場合であっても、 のような、長い長いなどで取得します。 しかし、その私たちを想定 実際に起動したい もう少しあるプログラムを書く 汎用性、そして、率直に言って、もう少し あなたがしたコマンドのように うまくいけば、なってきて、 に慣れて少し。 CD·スペースのDropboxのように。 これは、もちろん、変化 ディレクトリ、と仮定すると あなたはジョン·ハーバードの家にいる あなたのDropboxフォルダへのディレクトリ、。 一方、このようなコマンド 、pset2という新しいディレクトリを作成します。 あなたが持つかもしれないとして、すでにか すぐに問題のために2を設定します。 こんにちはメイクはもちろん、コマンドです それはハローと呼ばれるプログラムを構築します ドットcのハローと呼ばれるファイルから。 そして、これらの各 ケースは、今、私たちは持っていた いわゆるオン引数を指定する コマンドライン、点滅プロンプト、 その結果、メイクはとても建設するかを知っており、 そのます。mkdirは、作成するためにどのようなフォルダを知っている、 そしてその結果、CDが知っている どこに行きたいです。 しかし、今まで、私たちは言い続ける その主、あなたのデフォルトの関数、 void式を持って これらの括弧の内側に、 それことを意味します 引数を取ることはできません。 

だから、今日から、 私たちがやろうとしている 私達が開始するつもりだ、である でも、このようなことをサポートしている。 実際に、この場合には、これを使用 通常は手動で入力しないでください、 これをやってきたことを確認 私たちのために、存在しない つを除く一つ、二つ、三つの追加 プログラムの名前の後に文字列 打ち鳴らす。 では、どのようにこれを達成するの​​ですか? 

さて、今日から、 私たちが望むのケースで を介して入力を提供するために コマンドライン、いわゆる 私たちは追加を開始するつもりだ ここyellow--に何 コンマARGC int型で、ボイドを置き換える 開き括弧閉じ括弧のargvストリング。 さて、これは面白いです いくつかの理由。 一方、それは私たちが書くようにするつもりだ もう少しダイナミックなプログラム。 しかし、より説得力、 それが開くことになるだろう に関して今の会話 本当に何の配列ができます 何の文字列を使用することが 本当にボンネットの下にある、 来週まで私たちはダイビングを開始したとき マシンがどのようにに関してより深い中 このようなもののすべての作業を行う。 しかし、今のところ、の描きましょう、 おそらく、絵。 

あなたがプログラムを書くとき メインで宣言された このように、例えばメインその 二つの引数、int型をとり and--どのようなデータ型 二番目の引数はありますか? 

聴衆:配列。 DAVIDマラン:配列。 それはだようなので、それは一目見ただけで見えます 文字列ではなく、角括弧に注意してください。 私たちが導入された最後の時間を思い出してください 配列の概念。 と配列は角括弧を使用する 文脈のカップルで。 あなたは、正方形を使用する場合があります 配列に行くためのブラケット とのように、特定の要素を取得 ブラケット0またはブラケット1またはブラケット2。 しかし、私たちは、もし簡単に言えば、見た 先週、そのまた これらの角括弧を使用する 配列のサイズを宣言し、 あなたが事前にわかっている場合はどのように多くのint またはどのように多くの文字列またはものは何でも 実際にしたい。 だから、ありますが判明 ここに第三のコンテキスト それは内部に番号がありません 角括弧の。 私がここに持っているとしてするときは、指定した、 argvのようなものの名前、 これだけの空想の方法です 引数ベクトルを、と言っている 別の空想の方法です 引数の配列を言って、 開き括弧閉じ括弧だけで あなたは必ずしもないことを意味します どのように大きな事前に知る アレイは、あることを行っている しかし、あなたはそれが配列になるだろう知っている。 だから、わからない場合 数は、そこに入れないでください 開き括弧クローズブラケットについて argvのが文字列でないことを意味し、 しかし文字列の配列。 だから文法的に、あなたの場合 先週戻って考えて、 それは言って非常によく似ています int型の年齢開き括弧のようなもの、 そして、何かその後。 それでは、これは次のように見えますか? それでは、実際に絵を描きましょう。 だから、メインでこのプログラムを実行すると 内部定義された2つの引数を持つ これらの括弧のあなた 本質的に、少なくとも2つのチャンクを持っている あなたに渡したメモリの ボンネットの下に。 一、この長方形として描画し、私はよように、 argcは呼ばれるようになるだろう。 そして、ちょうど簡単にまとめとして、 ARGCのデータ型は何ですか? だから、int型です。 だから数が起こっている argc--ターンに行くために 引数countの略でアウト。 一方、私は配列としてARGVを描いた。 そして、私は本当に知らない どのくらいの時間があることになるだろう、 そう、今日の目的のためにドットドットドット。 これは、いくつかの長さのものを得る可能性があります。 しかし、私はここに描かました 少なくとも四つの長方形。 店舗そのメモリの塊argvはそう 文字列の文字列stringドットドットドット、 とargcがひとつの塊である 整数のためのメモリの。 

だから今、のは、もう少し正確にしましょう​​。 もし、私が、文字列を持っているとき このアレイでは、と呼ばれる argvは、私は彼らに取得したい 個別に、先週のように、 私たちは表記を使用するつもりだ のargvブラケット0のような 最初の配列を取得します。 取得するARGVブラケット1 など第二のもの、と。 ここで重要なのは、私たちがまだいるという0 indexed--私達はまだ0からカウントしている。 だから今、実際にしてみましょう この中に何かを置く。 私はと呼ばれるプログラムをコンパイルした場合 ハローハロードットCというファイルから、 そして私はそのプログラムを実行する ドットで、ハロースラッシュ 私のコンピュータは、私のラップトップを何、 ボンネットの下に次のようになり 私はドットを実行した瞬間 こんにちはスラッシュと入力してEnterキーを押し? まあ、これはおそらくです 私たちが記述することができる お使いのコンピュータのの内容として メモリ、またはRAM--ランダムアクセスメモリ。 換言すれば、コンピュータ、 何とかあなたのための魔法のように、 argcは内数1を入れ、AKAのargcount、 そしてそれは、文字通りの文字列を入れます ./helloのargvブラケット0中。 私は何、率直に言って、全く分からない argvのブラケットの1又は2又は3、 ユーザはない持っている場合ため 、./hello以外に何かを入力した 私たちはこれらのことを前提とするつもりだ 最も可能性の高いごみ値であり、 いわば。 メモリのこれらのチャンク 存在するが、それは私たち次第ではありません ので、それらを見する argcountは唯一のものです。 

さて、一方で、私の場合 別のプログラムを実行して書き込み、 より適切にコマンドであり、CD、、 あなたの点滅prompt-- CD空間での 私はそれを実行したときに、効果的に、Dropbox-- CDのプログラムの実行時に、argcは、 私のコンピュータのメモリの内部で、ためのものです ほとんどの最も短い第2番。 そして、argvのブラケットoがあります CD、ARGVブラケット1は、Dropboxのを持ってい そして、もちろん、コマンド 完了するので、このメモリのすべて 基本的に消えて 何か他のものに使用されます。 そして、それは私が言う理由です ただ一瞬。 

一方、私たちはは、mkdir pset2を行う場合、 画像は、ほとんど同じに見えます しかしargvの内側の異なる文字列を持つ。 私はハロー打ち鳴らすダッシュを行う場合 ハロードットcの、同じ考え。 より多くのものをするために入力されます のargv、およびargcが、もちろん、4である。 そのように、換言すれば、 でも、この配列も いくつかのドットのドットを、ドットかもしれない 可変長、いわば、 あなたはいつもどこでそれの終わりを知る ARGCはあなたを教えしようとしているので、ある どの時点でいったん停止する必要が ARGVの要素を見ている。 あなたは4つしか見ることができ この場合の合計。 

それでは、今を見てみましょう おそらく、簡単なプログラム。 ただ挨拶をワン Zamylaのような人に。 だから私は、私はプログラムを書くつもりだ主張 一瞬で、それを介して、私は何ができる その後./helloスペースZamyla、と私が欲しい 私のプログラムは、何かを印刷する 超簡単な「Zamyla、こんにちは。 "のような 今、過去に私たちはにgetStringを使用しました。 過去に、たとえそう あなたは、プログラミングの初心者 オッズはあなたがかき立てる可能性がある にgetStringを使用するプログラム そしてその後のprintfを使用しています Zamylaに挨拶します。 しかし、ここで今回のgetString使用しないようにしましょう​​。 私が代わりにAppliantへ行こう と標準I Oドットhを含まない。 私はまた、CS50ドットhを含んでみましょう。 さて、メインint型、そして今私は今 今日のボイドをするつもりはない。 その代わりに、私はint型のargcをするつもりだ 文字列のargv開き括弧閉じ括弧、 番号を指定していない。 そして今、ここに私の行う、いわゆるされている。 私が今やろうとしてるのは、私は今、ある 信仰の飛躍を少しやろうとして、 私は、ユーザーのことを前提とするつもりだ 正しくこのプログラムを使用するつもり、 と私は単純に行くよ 、ハローprintfの%SNを行う。 だから、何もそこに新しい。 しかし、私は今どのような言葉に置きたい プログラム名の後にユーザーの種類。 だから私はZamyla ./helloスペースをすれば、私 何とかプログラム的にアクセスしたい 引用終わり "Zamyla」を引用する私はそう 私の議論ベクターに行くことができ、 私の文字列の配列、およびコマンドであれば、 再び、./helloスペースZamylaだった 私は何番目たいですか ここにはargvに置くか? 聴衆:1。 DAVIDマラン:1、理由 ブラケット0が判明 になるだろう 私たちが見たように、プログラムの名前、。 だからブラケット1は、最初の単語である 私は、ユーザは、入力したもの。 私が先に行くと、これを保存するつもりです。 私は私のフォルダに行くつもりです 私は、このファイルを配置した場所。 私はハロー3を作るするつもりです。 コンプIOの[OK]をクリックします。 ./hello Zamylaを入力してください。 私は間違って何をした? 私は驚きによって逮捕された 私自身そこにちょうど一瞬。 私は間違って何をした? 

聴衆:名前。 

DAVIDマラン:ファイルの 実際にhello3.c呼んだ。 そして私はちょうどのためにそれをした 一貫性、私たちがしたので、 でhello.cを年代を持っていた オンラインコード内の過去。 それでは、この./helloを修正しましょう ブラケットダッシュ3 Zamyla。 入力してください。 そして今、私たちは、ハローZamylaを持っている。 一方、私は、これを変更することができます ロブ、または実際に他の語である。 

しかし、ここでコーナーケースを考えてみましょう。 あなたがあれば何が起こるかを期待するかもしれない 私はすべての人の名前を入力しないのですか? 

聴衆:エラー。 

DAVIDマラン:エラー おそらく、いくつかの並べ替えの。 見てみましょう。 入力してください。 ヌル。 だから、printfのは、実際にされている 私たちの小さな保護 ここで、文字通りオープンな括弧を印刷 ヌルが、さらに悪い事が起こる可能性があります。 そして、ちょうど実証する 何か絶対に すべきではない、の中で行ってみよう こことチャンスをうかがっ始める。 右? 私が知っている場合は、その写真の中の メモリは、基本的にこれです ARGVブラケット1がZamyla、ARGVを持って ブラケット0 ./helloがある場合、または./hello-3。 ブラケット2には何ですか? だから私はそれに答えることができます 右、自分自身に疑問? 私はちょうど2に1を変更することができます。 私は今、ハロー3を再コンパイルすることができます ./hello3のがズームEnterキーを押してみましょう。 おっと。 いいえ引用符はありません。 興味深い。 だから、種類のクールだ ここにある他に何を参照してください。 

だから、私のラップトップの中に他に何ですか? それではブラケット3で保存しましょう​​。 ./hello-3、hello3を行います。 おさる。 そして今のは本当にbold-- 50を紹介しています。 だから、深く、本当にダイビングだ 私のコンピュータのメモリに。 50のインデックス。 だからハロー3 ./hello-3を作る。 おさる。 すべての権利、今私はちょうどよ 無謀な取得するつもり。 それでは5000に行こう。 かしこまりました。 だから私は、再コンパイルしてみましょう。 ./hello-3、hello3を行います。 [OK]をクリックします。 今、あなたのいくつか、そこかもしれない オフに行く電球である。 どのように多くのあなたの持っている 前に、このメッセージを見たことある? [OK]をクリックします。 それでは、なぜ? 

オッズはare--と異なるあります これを引き起こすことができるもの、 と明らかにあなたは良いにしている 私たちは、明らかに持っているcompany-- と呼ばれるものが原因 セグメンテーションフォールト。 そして今日のための長い話を短く、私 メモリのセグメントを触ってきた 私が持っているべきではないこと。 セグメントは、ちょうどチャンクを意味する 私が持っているべきではないメモリ。 今、コンピュータは、もし私がいることを保証します 私はARGVに触れることができることを./helloZamylaを実行 ブラケット0とargvブラケット1である。 しかし、argcが値2である、それは私は意味 唯一それが名誉のようなものだallowed-- 触れることsystem-- ブラケット0とブラケット1。 私は遠くに行く場合は、あります 絶対にそこにメモリになるだろう。 私のRAMは物理的に存在している コンピュータ。 しかし、誰が何があるか知っている? 確かに、私は、複数を実行している 一度プログラム。 私はなかった場合、私はseen--場合があります Appliantでこれをやって 私のMacまたはPC--に私が持っているかもしれません 電子メールの内容を見た。 私は瞬間を見たかもしれない 私が最近送ったメッセージ。 かもしれない何でも メモリに周り長引く を介してアクセスされた可能性が この任意角括弧表記。 あるいは、さらに悪いことに、あなたが持っているかもしれません 私のパスワードのいずれかを発見した 私は最近、タイプ入力することだろうと ようにプログラムがメモリに保存されていた 私を認証すると、 その後だけの種類のそれを残し 私はそのプログラムを終了するまでRAMに。 

そして実際に、これはの一つである 危険と1の力 Cのような言語を使用しての あなたは自由なアクセスを持っている 全体の内容へ プログラムのメモリの、 何悪者はできる でも、それらのcases--の観光 特に私たち Webプログラミングに到達 学期の終わりに向かって、私たちはよ 周り突くこのtopic--を再訪、 潜在的に、誰かのコンピュータの メモリおよびそのような好奇心のものを見つける 私たちはそこに見たように。 またはさらに悪いことに、まだ、パスワード、彼 または彼女はそれから悪いことをするために使用することができます。 

だから、明らかに私は、これを行っているべきではありません 奇妙なことが起こるを開始するので。 実際、このプログラムがクラッシュする。 これは等価である のMac OSやWindowsでの ただ消えてプログラムウィンドウ。 予期しないエラーが発生しました。 コマンドライン環境で 私たちはこのようなものを参照してください。 しかし、それは、なぜ、私は単に触れてよさだ 私に属していないメモリ。 

それでは、このAを防御しましょう 別の方法で少し ここでこのプログラムを見ることによって。 そこで、再び、スケルトン 私たちはearlier--見た そして今回はint型を強調しました。 そして、メインのすべてのこの時間はあります 実際に値を戻しました。 といっても私たちの講義のほとんどにおいて 私たちは、一度使ったことがない例 主に何かを返す。 私達はちょうどのprintfクローズを書く 中括弧とそれはそれだ。 しかし、自由のため、どのような コンパイラは、あなたのために行ってき 効果的に、あなたのために0を返している。 ゆうパックになり、それは少しだ 0が良好であることをcounterintuitive--。 それは、それ自体が誤った意味ではありません。 0が良好であり、任意の非0 値、世界が決定しました、 エラーを表すことができます。 あなたは今までめちゃめちゃにしたのであれば お使いのコンピュータ上で何かアップ、 またはプログラムはあなたに死亡しており、 あなたは、いくつかの誤ったウィンドウを得ている 画面上の、というエラー 負の49ま​​たはエラー23-- のいくつかの一見任意value-- プログラマは、ハードコードされているため、 49負または正のような値 23は、任意の数を表すために、あえて言う、 40億の可能なものの それはプログラムの中でうまくいかないかもしれない。 

だから私はどのようにかかることがあります この利点自身? さて、私はプログラムを開いてみましょう 私は事前に書いた、 とハロー4と呼ばれるオンラインつつく。 そして、それはことを除いて、ほとんど同じだ そのエラー·チェックの少しを得た。 この場合、私は再び宣言した 二つの引数を取るように、メイン、 今回、17行上、予告 私は、健全性チェックを少しやってる。 私は確信していることを作ってるんだ argcが2に等しい等しい。 それがある場合なので、その 私は無事にできることを意味します だけではなくブラケット0が、ブラケット1をタッチします。 そして、私は、先に行くと、プリントアウト この場合には、Zamylaやロブ または私は型指定されたどのような言葉。 そして今、ちょうど取得する もう少し適切、 私は明示的に返すつもりだ 0すべてを示すために順調です。 悪い何も起こらなかった。 

しかし、慣例により、私はするつもりだ 1、または率直に言って、任意の非0値を返す、 何かが間違っていた場合。 今、ユーザーはするつもりはない 本当に何が起こっているのに気づく。 確かに私は、このディレクトリに行けば、 私たちは、ズームインおよびハロー4を作るのですか ./hello-4 Zamylaは私が期待どおりに動作します。 しかし、私は代わりに入力しない場合は、 何も、何も起こらないようだ、 それはクラッシュしない。 そして、私は代わりに何かをしている場合 ロブは試験監督官であるように Thayer--共有中 任意の情報。 しかし、通知、argvの1、2、3、4、および 5今メモリ内に存在する必要があります。 それは、あまりにも、ものではありません 私のプログラムは、期待して 私がいるかどうかチェックしましたので、 argcが2かに等しい等しい。 だから私は今、この防御だ。 

さて、余談として、私たち users--をprogrammer--というより、私たち 0または1であるが、使用していることを見ることはない このツールは、デバッガ、またはその他のツールと​​呼ばれる 私たちは前に表示されますように 長い、あなたプログラマ 実際にかもしれないものを見ることができます あなたのプログラムの中に間違って。 

だから、argcは上の任意の質問は? うん。 

聴衆:私は彼らを見てきました 文字を持っていなかった、[聞き取れない] ちょうどのような文字列のスターdを、言った 文字のアスタリスクカンマ。 彼らはここと同等か? 

DAVIDマラン:それらは。 そこで問題は、あなたが持っている、である 時折見られるプログラム そうでないこのような 文字列のargvブラケットを言う その代わりに何かを言う チャースターのargvブラケット等を挙げることができる。 そして、さらには他のあります あなたが見るかもしれない変異体が含まれる。 彼らは確かに等価である。 今のところ、私たちはこれらを持っている 補助輪のようなもの CS50内の文字列の形で上 図書館が、ちょうど一週間以上での または私たちはそれを削除しようとしている 完全に、実際に障害物 何char型と星を見て であり、それらをメモリに関連する方法 より一般的な表現。 だから私たちは戻ってそれに来る。 

私たちはargvやargcは上の他の質問は? うん。 聴衆:なぜそれが返した エラー[聞き取れない]? DAVIDマラン:なぜそれをした ああonly--エラーを返す! 前のケースでは、とき、私たち メモリの周りいじくった、 なぜそれが唯一のエラーを返しました 私は本当に大きな数を入力すると? 短い答えは、私たちが単に幸運です。 一般的に言えば、コンピュータ チャンクでメモリを割り当て、 そしてそれは私に十分な大きさのチャンクを与えた 私は気づかれることなく、離れて得た、 ブラケット2に触れた、ブラケット3、 ブラケット50、しかし、すぐに私はプッシュとして 私の運は、私が過ぎた メモリのチャンクの境界線 オペレーティングシステムは、私を与えていた。 そして、それはときにそれをです 弾圧のない、と述べた。 セグメンテーションエラー。 うん。 

聴衆:どのようにコンピュータが行う ARGCの値を知っていますか? 

DAVIDマラン:どのように コンピュータはARGCの値を知っていますか? あなたがプログラムを実行すると、そのプログラム、 点滅プロンプトの性質上、 の配列が渡され 型指定された言葉 プロンプトで、それがあった プロンプトに入力。 そしてそれは、オペレーティングある システム基本的にその あなたのために主の主張を移入します。 だから、サービスの一つだ あなたが得ることを、ソートの密か のボンネットの下に オペレーティングシステム。 その他の質問は? うん。 

聴衆:コアダンプはどういう意味ですか? DAVIDマラン:コアダンプはどういう意味ですか? だから、それは良い質問ですね。 そして、私はに戻ってみましょう ここでは、このディレクトリ。 そして、あなたはそれをわかります 私はそこに新しいファイルを持っている。 それは、確かにコアと呼ばれ、それがだだ 実際に一般的にまともなサイズのファイル。 それは本質的にスナップショットです 私のプログラムのメモリの内容 それがクラッシュした場合、またはRAM。 そして、これは有用であろう、 潜在的に、診断的に、 今後の講義で話すいったん およびデバッグに関するセクション、 あなたが実際に行うことができますので、 デジタル剖検相当 そのファイルに把握を支援する あなたはあなたのプログラムで間違って何をしたか。 うん。 

聴衆:コマンドのargcです それ自体、または、あなたはそれを任意の名前を付けることができますか? 

DAVIDマラン:良い質問。 それ自体はコマンドのargcである、 またはあなたはそれを任意の名前を付けることができますか? それは間違いなく、コマンドではありません。 それは単に変数のだ 名前や引数の名前、 したがって一切お このfooという呼び出すことができ、 私達は傾向がある、このバーを呼び出すことができます ゴーカートにコンピュータの言葉であると 科学者に送られます。 しかし、慣例により、私たちはargcとargvを使用してください。 しかし、それはちょうど人間だ コンベンション、何よりも。 かしこまりました。 だから結局のところ、私がしてきた 白lie--のビットを伝える と率直に言って、将来的には、次のように表示されます 私たちは、他の白い嘘を言ってきた。 しかし、今のところ、私たちはつもりだ これらのいずれかをバック剥離する。 時以前に私がここに。この場合、 ./helloまたは./hello-3のようなプログラムを実行した Zamyla、私たちは私のコンテンツを持っていた おおよそのように見て、コンピュータのメモリ この。 しかし、文字列が何であるかを思い出してください。 私たちは一週間前に何A何と言った 文字列は、実際にはボンネットの下にある? 聴衆:文字の配列です。 DAVIDマラン:それは 文字の配列、右か? だから私たちはの配列を持っているかもしれません 文字列が、今度は、文字列 文字の配列です。 だから私は本当になりたい場合は、 私はこの絵を描く肛門、 私は実際に描画されるべきである もう少しこのようなこと、 それによってこれらのそれぞれで 私のargv配列のインデックス、 文字列全体は、それ自体がある それ自体が配列であること。 そして今、白い嘘 今日は言っている 絵にはないということです 非常にこのように見えます。 実際には、小さな正方形がある 大きな長方形の一般的に外に そこ。 しかし、私たちはずっと前に戻ったのと来る。 しかし、これは、バックスラッシュ./hello 0です それは、その特殊文字であること 文字列の終わりを画定する、 私たちは後に別のものを持っている Zamylaの名前。 だから、これは何を意味するのでしょうか? 

さて、私が先に行く聞かせて 他の二つの例を開く オンラインで利用可能であることを。 一つはargv1.cと呼ばれている 他方はargv2ある。 それは、その超簡単なプログラムです 過去の番組とは異なります その中で今私が使用しています argcとargvをここに。 そして今、私はforループと統合してい argcは、最大上のi = 0のから、18行中。 そして、何私はするつもりです ここでのコード行で? 英語で。 これは明らかには、argcの使用方法を示します。 しかし、英語では、どのようなことを行い 私はこのプログラムを実行する場合、それは何? うん? 

聴衆:それはあなたを印刷するために起こっている あなたが好きな回数だけ画面。 DAVIDマラン:その通りです。 だから、どんな言葉I プロンプトで、それはだ 逆流しよう 私のこと、それらを1行に1つずつ。 それでは、先に行くと、これをやらせる。 私のディレクトリに行こう とargv1 ./argv1を作るのですか。 そして今、のはそれをシンプルに保つみましょう。 それでは、最初は何もしませんしましょう​​。 それは一つのことをプリントアウトしたし、 それは確かにプログラムの名前ですが、 それは、ブラケット0でだからです。 私は今のfooと言うなら、それはどうするつもりだ これら二つの、そして私がfooバーを言えば、 それはこれらの3つのことを言おうとしています。 今では多分、やや興味深い。 しかし、それはargvをリコール 文字列の配列である、 が、文字列は文字の配列である、 私たちは、ノッチ物事を取ることができます その基本を適用 ロジックとコードを作ること 確かに、もう少し不可解に見える。 しかし、入れ子になったことで 似ループ、何か あなたはマリオを思い出しかもしれないものを、 例えば、あなたはこのようにそれをした場合。 

だから今私は、19行目に気付く 再び私の引数を反復、 0からのargcまでの上。 そして今、ライン21--に私は今 最後week--からトリックを借りる 私は何であるかチェックしております argvはブラケット、iの長さ。 私はn個でその答えを保存するよ。 そして私はjから上に統合してい jが0に初期化されるまでのn、。 だから、カウントするための規約。 あなたが持っている場合は、私が使用したら ネストされたループは、あなたが再び私を使用することはできません そうしないと、潜在的に、壊します、 内側のループの外の値。 だから私は、慣例によりJを使用しています。 私たちは、Kを使用する場合があります。 おそらく、あなたがkよりも多くを持っている場合は、 一般的に、あまりにも多くのネストを持っている。 しかし、今、私のprintfに気付く ラインが​​少し異なります。 私は私は今、%sが印刷されないよ もちろん、印刷%cが、 char型のプレースホルダです。 

そして今、この構文に注目してください。 新しい。 私たちは前にそれを見ていない。 しかし、論理的に、これはただの意味 ARGV内のi番目の文字列を取得 何j番目のですか? 聴衆:文字。 DAVIDマラン:その文字列の文字。 だから、角括弧を使用することにより 角括弧が続く、 これは最初のダイビングです argvは文字列への、 その後、第2 jに角括弧 の文字にダイビングです argvの中で、特定の文字列。 そして、ちょうど良い測定のために、 私はここに新しい行を印刷しています。 だから今私が先に行くと、開いてみましょう 大きめ窓アップ 私たちはこの動作を確認することができます。 私はそのフォルダに行きましょう。 そして今、作るのですかargvは、2  -  ARGV-2を作るwhoops--、./argv 2。 入力してください。 そして、それは少し難しい 縦に読むため、 それは確かに名だ 空白行に続くプログラム。 今、私が先に行くとfooをやらせる。 同様に読みにくいが、それはだ 確かに1行に1つの文字を印刷する。 そして、私はバーをすれば、それは今だ 行して、これらの行を印刷する。 だからここにお持ち帰りはあまりありません うわー、この巧妙な新しいトリックを見て、あることを どこに内容を得ることができます 配列の特定の文字の、 むしろどうやってこれらの基本を取っている 配列にインデックス付けするようなアイデア、 そして、その後にインデックスを付ける その配列にあった配列、 ちょうど同じ考えを適用する もう少し洗練された例。 しかし、基本は本当に持っていない でも、先週から、変更しました。 

さて、これは、一種のタイムリーである その中で、0週目になり、リコール 私たちはこのような電話帳と共演。 そして、これは明らかであるにもかかわらず、 紙の物理的な作品、 あなたが親切なのを考えることができます 配列として電話帳。 確かに、あなたがいた場合には再実装する この紙片これらの作品 コンピュータ内の、おそらく あなたが何かを使用します それらのすべてを格納する配列のような すべての方法から名前と番号 Z.を通してだから、これはあるため、いいです それは私たちに機会を可能にし、 おそらく、どのように考慮すべきかもしれない 実際にそのようなものを実装しています。 ここで、ドアのシリーズと同様に。 私はcould--のであれば私たちはいずれかが必要 アップ時に来てボランティア。 見てみましょう。 おそらくなじみのない顔、 おそらくなじみのない顔。 どのようにオレンジ色はどうですか? ここに。 オレンジシャツは、アップ時に来る。 

それでは、先に行こうと移動 側へのオーバーこれらのドア、 ちょっと邪魔にならないように、これらを移動します。 あなたの名前は? 

AJAY: 

DAVIDマラン:アジャイ。 デビッド。 よろしくね。 かしこまりました。 だから私たちは、これら6つの後ろに持っている screen--上にデジタルドア または、むしろ、7戸 数字の全体の束をscreen--。 そして、私はあなたに何も言わなかったしました advance--で合意された? AJAY:事前に何もない。 DAVIDマラン:私はあなたがしたいすべて 今の私を見つけることであり、私たちのために、 本当に、数50、 一歩ずつ。 

AJAY:ナンバー50? 

DAVIDマラン:ナンバー50。 そして、あなたは何を明らかにすることができます これらの各ドアの後ろに 単純に指で触れることによって。 ちくしょう。 [笑い] 

[拍手] 

非常によくやった。 [OK]をクリックします。 私たちは素敵な贈り物を持っている ここにあなたのための賞。 映画のお好きなものたち 先週議論した。 

AJAY:ああ、男。 ああ、私はスペースボールを見たことがない。 

DAVIDマラン:スペースボール。 かしこまりました。 だから一瞬で開催しています。 How--のはこれを作ってみよう 教えやすいmoment-- あなたはどのように行くのでした 番号50を見つける? AJAY:私はランダムに選んだ。 DAVIDマラン:だからあなたが選んだ ランダムに幸運。 AJAY:はい。 DAVIDマラン:わかりました。 優秀。 だから今、あなたをしていなかった 他に何、幸運得 これらのドアの後ろに起きているのでしょうか? だから私は先に行くとした場合 ここでこれらの数字を明らかにし、 彼らは実際にランダムな順序である。 そして、最高のは、あなたは可能性があり 行われ、率直に言って、最終的には、することです、 最悪の場合には、それらをすべてチェックする。 だから、超幸運れる 私たちはアルゴリズムを呼びたいものではありません。 はい、おめでとう。 あなたができればしかし、今、ユーモアに私をlet's--。 それではここで、このタブに行きましょう。 そして、ここでの数字は明らかにしている ランダムな順序であると思われるもの、 彼らはいた。 しかし、今私が代わりに主張した場合 これらのドアの後ろにその ソートされている数である。 目標は、今までにもあり 私たちに数50を見つける。 しかし、アルゴリズム的にそれを行うと、 あなたはそれについてどのように行っている私たちに教えてください。 あなたがそれを見つけた場合、あなたは映画をキープ。 あなたは、あなたがそれを返して、​​それを見つけることはありません。 AJAY:だから私は両端をチェックするつもりだ まず、there's--かどうかを判断する [笑いと拍手] DAVIDマラン:ここに行く。 それでは1を見てみましょう アジャイの前任者、 それほど幸運ではなかったショーン。 [OK]を、ここにあなたの仕事ので、 ショーンは、以下の通りである。 私はこれらの背後に隠されている ドア数7、 しかし、これらのドアのいくつかで隠れて 同様に他の非負の数である。 そして、あなたの目標は、この考えることです ちょうど配列として数字の一番上の行。 私たちは作品のちょうど順序だ その背後にある番号の紙の。 そして、あなたの目標は、上部のみを使用して、ある ここでアレイは、私に番号7を見つける。 そして、私たちはそれから批評しようとしている どのようにあなたがそれをやって行く。 、私たちに数7をお願いして下さい。 いいえ 5、19、13。 それはトリックの質問ではありません。 1。 この時点で、あなたのスコアは非常にではありません 良いので、あなたにも続けるかもしれません。 3。 進んでください。 率直に言って、私は助けることは不思議ではないことができ 何をしても考えている。 

ショーン:私は一番上の行から取ることができます。 DAVIDマラン:唯一の一番上の行。 だから、3左を持っている。 だから私7見つける。 

[観客は提案を叫ぶ] だから、それらの両方が驚くべきだった 非常に異なった理由のために。 だから、これはどこに私たち 先ほど中断し、 そしてここで重要な洞察力 これらのドアは番号を有していた その背後に、理想的に分類したもの あなたができることであるためにお持ち帰り 根本的に、より良い この第二のexample-- そして、確かに、それはショーンのだった 乱数で最初の試み とすぐに同じようにbefore--が、 これらの番号がソートされているように、 電話帳のような多く、 あなたは明らかに何ができますか? またはどのようにあなたはその知識を活用することができますか? うん。 

聴衆:あなたは[聞こえない]途中で行く。 DAVIDマラン:うん。 その通り。 だから、アジャイの初期本能だった 今思い出すと、両端をチェックする、 そして、私たちは、ソートの仕上がり すぐに例。 しかし、私たちはこれより多くのことを行うために開始した場合 念入りにそれらの線に沿って、 しかし中におそらく始まる 真ん中、彼らはソートしているので、 とすぐに私たちが明らかにしたよう 数16、したがって、私たちknow-- との私たちthat--正確にやらせる 従って、今日の場合には、その50を知っている、 右になるように持っている。 だから様、0週目における 私たちは半分に電話帳を引き裂いた との半分を投げた 問題離れて、ここに同じ考え。 私たちは、この半分を投げることができる 問題の離れ。 そして、おそらく何 アルゴリズム的に行う可能性があり、 あなたは50でなければならないことを知っていたら、 右側に、それはどこでもだ場合、 真ん中に、そこに試している 残りのドア。 もちろん、50はより高い 42よりも、私たちはすることができます この残りを投げる 問題の四分の一の距離、 そして、最後に、同定 50のようなもの。 しかし、単にと同様 電話帳、これらの数字 すでに私たちに与えられた ソート順、私たちを残し あなたがどの​​ように疑問を持つ ソートされた順序に事を得る? そして、率直に言って、どのようなコストで? それはあることが一つのことだ 電話帳を手渡した してから見つけることによってあなたの友人を感心 本当にすぐに電話番号、右? 見つけて32ページを引き裂く 40億のページのうち一人、 私たちは極端な例であると述べた。 しかし、それはどのくらいの時間がかかりました Verizonは、その電話帳をソートするには? どのくらいの時間、それは私たちを取るんでした これらの7つの数字を並べ替えるには? それが私たちがした質問です これまで完全に無視。 

それでは、今、この質問に答えてみましょう。 そして、私たちは、今、すべての映画の外出 私たちは、いくつかのストレスボールを持っている。 たとえば、もし、8人のボランティア ここに私たちを結ぶ気にしないだろう? それでは先に行くとしましょう​​、方法について あなたの4、ここでの3? いくつかの新しい顔を取得します。 そして、そこには4? そしてhere--しないバイアスしてみましょうとnow-- ここで端のオーバー数8。 アップさあ。 かしこまりました。 だから、私たちがここに持っているもの あなたのそれぞれは数値です。 あなたが行きたい場合は 先に、この数値を取る。 あなたの名前は? 

ARTIE:アーティ。 

DAVIDマラン:アーティ、大丈夫。 あなたが1番だ。 

AMIN:アミン。 DAVIDマラン:アミン。 デビッド。 あなたはナンバー2だ。 そして、私の手のように、先に行く あなた用紙、 音楽の前で自分をラインアップ そこに同じ順序で立っている。 

ANDY:こんにちは、アンディ。 

DAVIDマラン:アンディ、それはあなたを見てうれしいです。 ナンバー3。 

JACOB:ジェイコブ。 

DAVIDマラン:ヤコブ、番号4。 ご搭乗ありがとうございます。 GRANT:グラント。 DAVIDマラン:グラント。 番号5。 

アラナ:アラナ。 

DAVIDマラン:アラナ、番号6。 

FRANCES:フランシス。 DAVIDマラン:フランシス、7番。 と? 

レイチェル:レイチェル。 

DAVIDマラン:レイチェル、8番。 かしこまりました。 先に行くと、この順序で自分自身を取得。 私は残りの1を入れてみましょう 音楽は場所に立つ。 どこでスタンドが必要なのですか? [OK]をクリックします。 先に行くとちょうどあなたの数字を入れて 観客はそれらを見ることができ、 音楽は外側を向く立つ。 うまくいけば、私たちの最初の 健全性チェックhere-- 4,2、6。 ああ、ああ。 ちょっと待ってください。 私たちは、8を持っていません。 私はからあなたを立ち退かする必要がある 何とか例。 いいえ いいえ、それはOKです。 見てみましょう。 私たちは、これを行うことができます。 スタンバイ。 そうしよう。 正しい。 かしこまりました。 だから、今私たちは8,1、3〜7、5を持っている。 [OK]をクリックします。 優秀。 

だから手元に疑問がでている どのコスト、およびどのような方法を経由して、 私たちは実際に、ここでこれらの数値を並べ替えることができます 私たちは親切の後方に働くことができるように、 最終的に、そしてdecide--それは本当にある 印象的な、それは本当に効率的である、 私が分裂することができることと 電話帳を征服? その本当に効率的です 私は分割し、征服することができます これらのデジタル作品 ボード上の紙、 多分それは私達にコストになるだろう場合は、 時間やエネルギーやCPUサイクルで占い 実際に私たちのデータを取得する いくつかのソートされた順番に? それでは、その質問をしましょう​​。 

したがって、最初のオフ、これらの数字は、 かなりランダムな順序で、 と私は提案するつもりです つのアルゴリズム、またはプロセス それによって、私たちは、これらの人たちを並べ替えることができます。 私はアプローチするつもりです これはかなり単純に。 そして、私は認識するつもりです それは私のためにたくさんのようなものだという まわりで私の心をラップする 全データを一度に設定してください。 しかし、あなたは何を知っていますか? 私はいくつかをするつもりだ 非常にシンプルな限界の修正。 場合4および図2は、順不同である 目標は、最大8に1から行くことです。 それで、あなたは何を知っていますか? 私はあなたを持っているつもりです あなたが切り替えるとみんな、スワップ 物理的な位置と 紙のあなたの作品。 今、図4及び図6に、これらは順序である。 私はそれらのことを残すつもりです。 図6及び図8に示すように、それらが順序である。 あること、それらを残して行く。 順不同8 AND1、。 次の2つのスワップを気にしないだろう場合は。 今、8および図3に示すように、君たちは入れ替えることができれば。 8,7、君たちは入れ替えることができれば。 そして8および図5に示すように、君たちは入れ替えることができれば。 

今、私は行っています? いや、明らかではない。 しかし、私が作った より良い状況、右か? 8番、もう一度お名前は何でしたか? 

レイチェル:レイチェル。 DAVIDマラン:だからレイチェルが持っている 効果的にかなり遠くまで泡立て、 の最後にすべての方法 ここで数字の私の配列。 そしてその結果、問題は解決の一種である。 さて、明らかに、2はまだする必要があります 少し移動し、4と6と1。 しかし、私は得ているように見える ソリューションにもう少し近く。 それでは、この同じを適用できます 再びナイーブヒューリスティック。 2及び図4に示すように、[OK]をクリックします。 4および図6に示すように、[OK]をクリックします。 6、1、MM-mmである。 のスワップをしてみましょう。 6と3、MM-mmである。 のスワップをしてみましょう。 図6、図7はOKです。 7,5、いや。 のスワップをしてみましょう。 そして今、7と8。 そして、あなたの名前が再び何ですか? FRANCES:フランシス。 DAVIDマラン:フランシス。 だから今フランシスはさらに良いです 位置、今7と8理由 正しく頂上まで泡立てている。 だから2及び図4に示すように、[OK]をクリックします。 4と1、交換しよう。 4,3、交換しよう。 4と6、あなたは大丈夫。 6,5、交​​換しよう。 そして今、それらの人が良いです。 私たちはほとんどがしています。 2と1、順不同で、そのように交換します。 そして今、私は健全性チェックを行うことができます。 2及び3,3及び4,4及び 5,5及び6,6及び7,8。 [OK]を、私たちは完了です。 

しかし、どのようなコストで私でした ここでこれらの数字を並べ替える? さて、どのように多くの手順は、潜在的に私をしました これらの人たちをソートするとき取る? さて、私たちは戻ってその質問へ来る。 しかし、率直に言って、あなたが得た場合 それはだ、少し退屈 これではなかったという点で明らかにするようなもの 多分、最も効率的なアルゴリズム。 そして実際、率直に言って、私は汗をかいています すべてのより多くの前後に歩く。 つまり、特に効率感じませんでした。 それでは、何か他のものを試してみましょう。 君たちはリセットができれば これらの8つの値に簡単です。 よくできました。 

ちょうどのために、デジタル的に見てみましょう 私たちが何かをしようとする前に一瞬、 ちょうど何が起こったかで。 ここまでは、次のように表示しようとしている これらの8つの人間の視覚化 これにより、青と赤 バーは、数を表す。 背の高いバー、 数より大きい。 バーが短いほど、 数が小さい。 そして、何を見に行くているのはである そのうちの8よりもランダムな順序。 あなたは、これらのバーを参照してくださいとしている その同じアルゴリズムでソートさばかり、 あるいは、説明書のセットを 私たちは、バブルソート以後呼ぶことにします。 だから、第二またはので、すべて、気付く 二つのバーは、赤で点灯している コンピュータによって比較されている。 そして、もし大きなバーと 小さなバーは、順不同です 彼らは私のために交換されている。 

さて、これは信じられないほど退屈です 確かに、これを見て、 非常に長いために、しかし気付く 、右に移動する大きな棒をtakeaway-- 左に移動する小さなバー。 では、このプロセスを中断しましょう これをスピードアップ はるかに高速であるので、缶に 何の高レベルの感覚を得る、 確かに、バブルソートをやっている。 実際、最大バブリングだ リストの右側に、 または配列、大きなバー。 逆に、小さなバーがある ダウン左に自分の道をバブリング、 速いペースではあるが 私たちは以前と比べて。 だから、人間と見ることが難しく、 しかし、視覚的にそれは確かに何 起こっていた。 

しかし、ここでは基本的に試してみましょう 異なるアプローチになりました。 それでは別のを試してみましょう 私たちはあなたを持っていることによって、アルゴリズム 人はこれらのオリジナルでスタート この順序がここにいた位置。 そして今度は、先に行きましょう。 そして、私は何かをするつもりだ さらに簡単な、右か? 振り返ってみると、再びペアワイズスワッピング そして再び、ほとんど少し賢い。 さんはもっと単純に物事をやってみましょう、 どこに私はこれらの人たちをソートする場合、 私は見ているだけキープしましょう 最小の要素のために。 だから今は、4です 私が見てきた最小数。 私はそれを覚えているつもりです。 いいえ、2が優れている、それを覚えています。 図1はさらに小さい。 3、7、5。 [OK]をクリックします。 選ぶ - あなたの名前は再び何ですか? 

ARTIE:アーティ。 

DAVIDマラン:アーティ。 だから、アーティは、先に行く。 私はラインのあなたを引っ張るつもりです。 あなたがここに戻ってくることができれば。 そして、私は彼のためにスペースを作る必要があります。 ここでは決定点を持っている。 どうやってここにアーティための余地を作るかもしれない 数字の1が所属先頭に? 

聴衆:シフト。 

DAVIDマラン:OK、私たち 皆をシフトできた。 しかし、最適化を提案する。 それはちょっと迷惑な感じ 私は4人に依頼するための すべての方法を下に移動します。 私は他に何ができますか? 

聴衆:それらを切り替えます。 

DAVIDマラン:それらを切り替えます。 そして、あなたの名前が再び何ですか? 

JACOB:ジェイコブ。 DAVIDマラン:ヤコブは、移動します。 はるかに効率的なだけで持っている アーティとジェイコブスワップの場所、 強制とは対照的に、 これらの人たちの4つのすべての、 に、どうもありがとうございました それらの正しい位置。 今何アーティ約うれしいです、 彼は正しい位置にあります。 それでは、もう一度、これをやってみましょう。 2、それは私が見てきた最小数です。 3、7、5。 [OK]をクリックします。 2は間違いなく最も小さい。 すべての作業を行う必要はありません。 それでは、もう一度それをやってみましょう。 6。 最小? 8。 いや。 4? ああ。 私は4を覚えてみましょう。 3。 私は3を覚えてみましょう。 7,5。 私がした最小数 このパスで見は3です。 あなたが出来ると思います。 どこであなたを置くつもりですか? そして、あなたの名前は何ですか? 

アラナ:アラナ。 

DAVIDマラン:アラナ、私たちはしている あなたを立ち退かしているつもり。 しかし、それは、より効率的である 2人だけを交換するために、 複数の人を持っているよりも、 実際にオーバー回避する。 それでは、もう一度これをやらせる。 私は4を選択し、そのように出来るつもりです。 誰が移動するために起こっているの? もちろん、数字の8、。 私は今、5番を見つけた場合は、出来る。 ナンバー8は再び追い出さを取得するつもりだ。 私は今場所で6番を見つけるつもりです。 代わりに7。 代わりに8。 

私たちが今やったことある 選択ソートと呼ばれるもの、 私たちはこれを視覚化した場合と、それはだ ちょっと違う感じだろう。 それでは先に行こうと、これから ここではメニュー、このvisualization-- それでは、Firefoxを是非to--これを変更してみましょう。 それでは選択ソートにこれを変更してみましょう。 そして、それでは前と同じように、それをスピードアップさせ、 そして今可視化を開始します。 そして、このアルゴリズムはあります それとは異なる感触。 各反復では、率直に言って、 それはさらに簡単です。 私は最小の要素を選択することだ。 今、率直に言って、私はその小さな幸運 時間、という点では、超高速にソート。 要素がランダムであった。 私たちは最終的にはよようにそれは、ありません 基本的に速く、ご覧ください。 しかし、ここで3番目と最後を見てみましょう 何が起こっているのかを、ここでアプローチする。 それでは、先に行くとあなたたちをリセットしてみましょう 最後に1回はここで、この順になるように。 

そして今、私はするつもりだ もう少し賢いこと、 ちょうど私たちのアルゴリズムを完成します。 私はこれを行うつもりです。 私は行かないつもりです 前後にそんなに。 率直に言って、私は疲れている このすべてトラバース。 私はちょうど私がものを取るつもりだ リストの最初に与えられた、 と私はソートするつもりです その場で、その。 そこでここでは、ある。 番号4。 私は番号を挿入するつもりです ソートされたリストに4。 完了。 私は今主張し、ちょうどこの多くを作るために 明確な、私のリストのこの部分がソートされます。 それは確かに愚かな主張のようなものだが、 4は、サイズ1のリストにソートされます。 今、私は2番を取るつもりです。 ナンバー2は、私は今に行くよ 適切な場所に挿入する。 だからここで図2は、属しているのでしょうか? 明らかに、こっちに。 だから先に行くと、あなたは可能性があれば、戻って移動。 そして、なぜあなたたちはただ取ることはありません あなたの音楽はあなたと、この時間を立っている。 そして、強制的にしてみましょうあなたを挿入 リストの先頭に。 だから、もう少し作業。 私の周りヤコブを移動しなければならなかった、 そしてあなたの名前は何ですか? 

AMIN:アミン。 

DAVIDマラン:アミン。 しかし、少なくとも、私は前後に行きませんでした。 私が行くように私は物事を取っている。 私はそれらを挿入しています 適切な場所にある。 図6に示すように、これは実際には非常に簡単です。 あなたがいる場合のは、あそこにあなたを挿入してみましょう 少しだけ上に移動したかった。 数字の8、また非常に簡単。 右あそこ。 ちくしょう。 ナンバー1私達はできないだけで ここではアミンとのスワップ、 それが起こっているので、 台無し次まで。 だから私たちはもう少し賢い必要があります。 だから、アーティ、あなたができれば 一瞬にバックアップします。 それでは先に行くと、今シフトしましょう​​、 これまでのアルゴリズムとは異なり、 アーティの余地を作るために 右ここ先頭に。 だから、一日の終わりに、私は一種の私 私が前に避けたいことやって。 だから、私のアルゴリズムでは、ソートされ の、知的に、逆に それは、もともとあったものから。 私はちょうどシフトをやってる 別のポイントで。 今私は3にいる。 いまいましい、ああ。 私たちは、再び多くの作業を行う必要があります。 それでは、あなたを押し出してみましょう。 OH  - ああ4--、6、の8を動かしてみようと 図3は、すぐそこに行くつもりされている。 だから、少なくとも若干の節約今回。 7、あまりにも多くの仕事を行うことができます。 あなたがポップしたいのであれば 背中のはあなたを挿入してみましょう。 そして最後に、5、よろしければ バックポップしたい、私たち あなたをシフトする必要がある、あなた、 5時までには、所定の位置にある。 

だから今でこれを見るために グラフィカルにハイレベル、 それでは、このアルゴリズムをやらせる ビジュアつの追加の時間。 だから、これは私たちは挿入​​ソートを呼び出すものとします。 私たちは、同じようにそれを実行しよう 高速で、ここでそれを起動してください。 そして、それは、あまりにも、別の感じを持っています。 これは、一種の良くなってきたと より良いが、それは完璧ということはない 私はで行くと、これらのギャップを滑らかになるまで。 ので、もう一度、私は取っているもの 私は右に左から与えられています。 だから私はそれほど幸運で取得していない そのすべてが完璧だった。 私たちは、これらの小さなを持っていた理由です 私たちは時間をかけて固定mispositions。 

だから、これらのアルゴリズムのすべてがいるように見える わずかに異なるペースで走行。 実際には、これを使用して、と言うだろう 最高やこれまでの最速? バブルソート、最初の? 選択ソート、第二? 挿入ソート、第三? 私はいくつかの選択ソートを聞く。 その他の考え? 

だから、ことが判明 これらのアルゴリズムのすべて として基本的に同じように効率的である 同じように、逆に、各other--か 、互いに同じ非効率 私たちは基本的に行うことができますので、 すべての3つのよりはまし これらのアルゴリズム。 そして、それはあまりにも、白い嘘のビットです。 私は効率的と言うとき あるいは非効率的として、 それは、少なくとものためだ n個の超大型値。 ここではわずか8人を持っている場合、 画面上または多分50かそこらのバー、 あなたは絶対に違いがわかります これらの3つのアルゴリズムの中で。 しかし、nは、人の数は、 または番号の数、 または電話の人数 ブック、またはWebページの数 Googleのデータベースにある 、どんどん大きくなっ 私たちは、これらの3つのすべてがわかります アルゴリズムは、実際にはかなり劣る。 そして、私たちは基本的に行うことができます それよりも優れています。 

それでは最後に、見てみましょう、 何これらのアルゴリズムはともかくで のように聞こえる いくつかの他の状況 同様にこの経由で ここで可視化 それが私たちをご紹介します 多くのアルゴリズム。 それでは先に行くとお祝いしましょう ここに私たちの参加者、その全員 非常によく自分自身を選別した。 あなたが別れの贈り物を考えているなら。 あなたにもあなたの番号を維持することができます。 そして、あなたは何が表示されます、 というか、今、聞く として私たちは音を置くということです これらのバーのそれぞれに そして、ソフトウェアに関連付けます 音の異なる周波数、 あなたはより多くのaudiolyあなたの心をラップすることができます これらのものの何それぞれの周りに のように見える。 挿入ソートで最初のもの 

[TONES] 

これはバブルソートです。 

[TONES] 

選択ソート。 

[TONES] 

マージソートと呼ばれるもの。 

[TONES] 

Gnomeのソート。 

[TONES] 

つまり、CS50はこれで終わりです。 私たちは、水曜日にお会いします。 

ナレーター:そして今、「ディープ 祈るファーナムによる思考」。 なぜループのため? どうしてそれを改善する? 私は5ループを作ると思います。 

[笑い]