1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID Malan: Được rồi. 3 00:00:11,940 --> 00:00:16,470 Vì vậy, đây là CS50, và đây là nay là đầu tuần ba. 4 00:00:16,470 --> 00:00:19,960 >> Vì vậy, cho đến bây giờ, chúng tôi đã được viết chương trình trong C 5 00:00:19,960 --> 00:00:23,210 mà nhìn một chút một cái gì đó như thế này đây. 6 00:00:23,210 --> 00:00:25,470 Vì vậy, chúng tôi đã có một vài sắc nét bao gồm ở đầu trang. 7 00:00:25,470 --> 00:00:28,490 Chúng tôi đã có int, chính, bãi bỏ, và sau đó cái gì để làm ở giữa, 8 00:00:28,490 --> 00:00:30,590 một số bit của mã bên trong các chức năng đó. 9 00:00:30,590 --> 00:00:34,170 Nhưng quan trọng đã được thực tế là chúng tôi đã nói rằng khoảng trống ở đây. 10 00:00:34,170 --> 00:00:39,320 Vì vậy, có hiệu lực, tất cả các thời gian này, quy định cụ thể rằng chương trình này, khi chạy, 11 00:00:39,320 --> 00:00:41,300 chỉ có thể chạy thông qua tên của nó. 12 00:00:41,300 --> 00:00:46,330 Bạn không thể gõ bất kỳ từ nào khác hoặc số sau khi tên của chương trình khi 13 00:00:46,330 --> 00:00:46,830 chạy nó. 14 00:00:46,830 --> 00:00:51,200 Vì vậy, ví dụ, nếu chương trình là biên soạn thành một tập tin gọi là xin chào, 15 00:00:51,200 --> 00:00:53,480 bạn có thể làm ./hello, nhưng đó là nó. 16 00:00:53,480 --> 00:00:56,750 >> Cách duy nhất mà bạn có thể cung cấp đầu vào cho chương trình này 17 00:00:56,750 --> 00:00:57,960 là bằng cách gọi một hàm. 18 00:00:57,960 --> 00:00:59,790 Ví dụ, những gì chức năng chúng tôi đã được sử dụng cho đến nay 19 00:00:59,790 --> 00:01:00,950 để có được đầu vào từ người sử dụng? 20 00:01:00,950 --> 00:01:02,117 >> TƯỢNG: Lấy chuỗi. 21 00:01:02,117 --> 00:01:04,700 DAVID Malan: Để có được chuỗi, hoặc int có được, hoặc bạn đã nhìn thấy những người khác, 22 00:01:04,700 --> 00:01:07,630 ngay cả khi bạn không sử dụng chúng nữa, như được dài, và muốn. 23 00:01:07,630 --> 00:01:09,380 Nhưng giả sử rằng chúng ta thực sự muốn bắt đầu 24 00:01:09,380 --> 00:01:12,760 viết các chương trình có nhiều hơn một chút linh hoạt, và, thẳng thắn, nhiều hơn một chút 25 00:01:12,760 --> 00:01:15,090 như các lệnh mà bạn đã đã nhận được, hy vọng, 26 00:01:15,090 --> 00:01:16,550 một chút quen với. 27 00:01:16,550 --> 00:01:18,560 Giống như cd không gian Dropbox. 28 00:01:18,560 --> 00:01:20,800 Điều này, tất nhiên, những thay đổi thư mục của bạn, giả sử 29 00:01:20,800 --> 00:01:23,590 bạn đang ở trong nhà John Harvard thư mục, vào thư mục Dropbox của bạn. 30 00:01:23,590 --> 00:01:27,380 Trong khi đó, một lệnh như thế này tạo ra một thư mục mới được gọi là pset2, 31 00:01:27,380 --> 00:01:30,290 như bạn có thể đã hoặc sẽ sớm cho vấn đề đặt hai. 32 00:01:30,290 --> 00:01:33,970 Hãy Xin chào, tất nhiên, là một lệnh mà xây dựng một chương trình gọi là chào 33 00:01:33,970 --> 00:01:35,770 từ một tập tin hello điểm c. 34 00:01:35,770 --> 00:01:39,140 Và trong mỗi trường hợp, bây giờ, chúng tôi đã có 35 00:01:39,140 --> 00:01:43,620 cung cấp một cuộc tranh cãi về cái gọi là dòng lệnh, dấu nhắc nhấp nháy, 36 00:01:43,620 --> 00:01:48,540 để làm cho mà biết những gì để xây dựng, và như vậy mkdir mà biết những gì để tạo ra các thư mục, 37 00:01:48,540 --> 00:01:51,110 và như vậy cd mà biết nơi bạn muốn đi. 38 00:01:51,110 --> 00:01:54,720 Nhưng cho đến bây giờ, chúng tôi tiếp tục nói rằng chính, chức năng mặc định của bạn, 39 00:01:54,720 --> 00:01:58,500 có một biểu hiện trống bên trong những dấu ngoặc đơn, 40 00:01:58,500 --> 00:02:01,250 có nghĩa là nó không thể lấy bất kỳ đối số. 41 00:02:01,250 --> 00:02:03,240 >> Vì vậy, bắt đầu từ ngày hôm nay, những gì chúng ta sẽ làm 42 00:02:03,240 --> 00:02:06,270 được, chúng ta sẽ bắt đầu hỗ trợ điều như thế này, ngay cả. 43 00:02:06,270 --> 00:02:08,990 Trong thực tế, trong trường hợp này, mà bạn thường không tự nhập, 44 00:02:08,990 --> 00:02:11,130 Làm được việc này cho chúng ta, không có 45 00:02:11,130 --> 00:02:15,840 một trong nhưng một, hai, ba thêm chuỗi sau của chương trình có tên là 46 00:02:15,840 --> 00:02:16,850 kêu vang. 47 00:02:16,850 --> 00:02:18,240 Vì vậy, làm thế nào để chúng ta đạt được điều này? 48 00:02:18,240 --> 00:02:20,260 >> Vâng, bắt đầu từ ngày hôm nay, trong trường hợp chúng ta muốn 49 00:02:20,260 --> 00:02:22,855 để cung cấp đầu vào thông qua cái gọi là dòng lệnh, 50 00:02:22,855 --> 00:02:24,980 chúng ta sẽ bắt đầu thêm ở đây những gì trong yellow-- 51 00:02:24,980 --> 00:02:30,520 thay thế khoảng trống với int argc dấu phẩy chuỗi argv mở khung khung gần. 52 00:02:30,520 --> 00:02:32,520 Bây giờ đây là thú vị cho một vài lý do. 53 00:02:32,520 --> 00:02:35,690 Một, nó sẽ để cho chúng tôi viết chương trình có nhiều hơn một chút năng động. 54 00:02:35,690 --> 00:02:37,570 Nhưng, compellingly hơn, nó sẽ mở ra 55 00:02:37,570 --> 00:02:40,340 tại một cuộc trò chuyện như những mảng có thể thực sự 56 00:02:40,340 --> 00:02:43,300 được sử dụng, cho những gì một chuỗi thực sự là dưới mui xe, 57 00:02:43,300 --> 00:02:47,320 đến tuần sau khi chúng tôi bắt đầu lặn trong thậm chí sâu hơn như thế nào là máy 58 00:02:47,320 --> 00:02:48,590 làm cho tất cả các công việc công cụ này. 59 00:02:48,590 --> 00:02:51,920 Nhưng hiện nay, chúng ta hãy vẽ, có lẽ, một bức tranh. 60 00:02:51,920 --> 00:02:54,950 >> Khi bạn viết một chương trình với chính tuyên bố 61 00:02:54,950 --> 00:02:58,810 theo cách này, như vậy là chính mất hai đối số, một int 62 00:02:58,810 --> 00:03:03,233 và- loại dữ liệu là tham số thứ hai? 63 00:03:03,233 --> 00:03:04,529 >> TƯỢNG: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID Malan: Array. 65 00:03:05,320 --> 00:03:09,170 Vì vậy, có vẻ ở cái nhìn đầu tiên như đó là một chuỗi, nhưng nhận thấy các dấu ngoặc vuông. 66 00:03:09,170 --> 00:03:12,760 Nhớ lại lần cuối cùng chúng tôi giới thiệu khái niệm về một mảng. 67 00:03:12,760 --> 00:03:16,210 Và mảng sử dụng dấu ngoặc vuông trong một vài trường hợp. 68 00:03:16,210 --> 00:03:19,160 Bạn có thể sử dụng các hình vuông dấu ngoặc để đi vào một mảng 69 00:03:19,160 --> 00:03:22,710 và có được một yếu tố đặc biệt, giống như khung 0 hoặc 1 khung hoặc khung 2. 70 00:03:22,710 --> 00:03:25,500 Nhưng chúng ta đã thấy, nếu một thời gian ngắn, Tuần trước, bạn cũng có 71 00:03:25,500 --> 00:03:28,790 sử dụng các dấu ngoặc vuông để khai báo kích thước của một mảng, 72 00:03:28,790 --> 00:03:31,790 nếu bạn biết trước có bao nhiêu int hoặc có bao nhiêu dây hoặc bất cứ điều gì bạn 73 00:03:31,790 --> 00:03:32,630 thực sự muốn. 74 00:03:32,630 --> 00:03:34,790 Vì vậy, nó quay ra có của một bối cảnh thứ ba ở đây 75 00:03:34,790 --> 00:03:37,890 mà không có số bên trong trong dấu ngoặc vuông. 76 00:03:37,890 --> 00:03:41,920 Khi bạn chỉ định, như tôi đã ở đây, tên của một cái gì đó giống như argv, 77 00:03:41,920 --> 00:03:44,550 mà chỉ là một cách ưa thích của nói vector tham số, mà 78 00:03:44,550 --> 00:03:47,750 là một cách ưa thích của nói một mảng các đối số, 79 00:03:47,750 --> 00:03:50,870 mở khung khung gần chỉ có nghĩa là bạn không nhất thiết phải 80 00:03:50,870 --> 00:03:52,960 biết trước như thế nào lớn mảng là có được, 81 00:03:52,960 --> 00:03:55,070 nhưng bạn biết nó sẽ là một mảng. 82 00:03:55,070 --> 00:03:57,320 Vì vậy, nếu bạn không biết số không đặt nó ở đó, 83 00:03:57,320 --> 00:04:01,160 để mở khung khung gần có nghĩa là argv không phải là một chuỗi, 84 00:04:01,160 --> 00:04:03,124 nhưng một mảng các chuỗi. 85 00:04:03,124 --> 00:04:05,040 Vì vậy, cú pháp, nếu bạn nghĩ lại tuần trước, 86 00:04:05,040 --> 00:04:09,460 nó rất giống với nói một cái gì đó giống như int tuổi mở khung, 87 00:04:09,460 --> 00:04:10,984 và sau đó một cái gì đó sau đó. 88 00:04:10,984 --> 00:04:12,150 Vì vậy, điều này như thế nào? 89 00:04:12,150 --> 00:04:13,399 Hãy thực sự vẽ một bức tranh. 90 00:04:13,399 --> 00:04:18,756 Vì vậy, khi bạn chạy chương trình này với chính có hai đối số định nghĩa bên trong 91 00:04:18,756 --> 00:04:21,339 những dấu ngoặc đơn, bạn về cơ bản có ít nhất hai khối 92 00:04:21,339 --> 00:04:23,560 bộ nhớ giao cho bạn bên dưới mui xe. 93 00:04:23,560 --> 00:04:26,550 Một, như tôi sẽ rút ra như hình chữ nhật, sẽ được gọi là argc. 94 00:04:26,550 --> 00:04:30,645 Và cũng giống như một bản tóm tắt nhanh chóng, kiểu dữ liệu của argc là gì? 95 00:04:30,645 --> 00:04:31,270 Vì vậy, nó là một int. 96 00:04:31,270 --> 00:04:33,480 Vì vậy, một số sẽ đi lần lượt argc-- 97 00:04:33,480 --> 00:04:35,660 ra rằng viết tắt của số đối số. 98 00:04:35,660 --> 00:04:38,887 Trong khi đó, tôi đã rút ra argv là một mảng. 99 00:04:38,887 --> 00:04:40,970 Và tôi thực sự không biết bao lâu nó sẽ được, 100 00:04:40,970 --> 00:04:42,470 để cho các mục đích của ngày hôm nay chấm chấm chấm. 101 00:04:42,470 --> 00:04:43,636 Nó có thể nhận được một số chiều dài. 102 00:04:43,636 --> 00:04:45,640 Nhưng tôi đã mô tả ở đây ít nhất bốn hình chữ nhật. 103 00:04:45,640 --> 00:04:50,970 Vì vậy, argv một đoạn bộ nhớ mà các cửa hàng chuỗi xâu chuỗi dot dot dot, 104 00:04:50,970 --> 00:04:53,950 argc và chỉ là một đoạn bộ nhớ cho một số nguyên. 105 00:04:53,950 --> 00:04:55,710 >> Vì vậy, bây giờ, chúng ta hãy thêm một chút chính xác. 106 00:04:55,710 --> 00:04:59,200 Nếu, khi tôi có dây trong mảng này, được gọi là 107 00:04:59,200 --> 00:05:03,290 argv, tôi muốn được ở họ cá nhân, giống như tuần trước, 108 00:05:03,290 --> 00:05:05,670 chúng ta sẽ sử dụng ký hiệu như khung argv 0 109 00:05:05,670 --> 00:05:07,650 để có được những điều đầu tiên một mảng. 110 00:05:07,650 --> 00:05:10,440 Argv khung 1 để có được Điều thứ hai, và vv. 111 00:05:10,440 --> 00:05:14,597 Chìa khóa ở đây là chúng ta vẫn còn 0 indexed-- chúng tôi vẫn đếm từ 0. 112 00:05:14,597 --> 00:05:16,430 Vì vậy, bây giờ chúng ta hãy thực sự đặt một cái gì đó trong này. 113 00:05:16,430 --> 00:05:21,670 Nếu tôi được biên dịch một chương trình gọi là hello từ một tập tin hello điểm c, 114 00:05:21,670 --> 00:05:24,340 và sau đó tôi chạy chương trình với dấu chấm giảm hello, 115 00:05:24,340 --> 00:05:28,380 những gì máy tính, máy tính xách tay của tôi, trông giống như bên dưới mui xe 116 00:05:28,380 --> 00:05:31,300 thời điểm tôi chạy dot giảm chào và nhấn Enter? 117 00:05:31,300 --> 00:05:33,500 Vâng, điều này có lẽ những gì chúng ta có thể mô tả 118 00:05:33,500 --> 00:05:37,010 như nội dung của máy tính của bạn bộ nhớ, hoặc bộ nhớ truy cập ngẫu nhiên RAM--. 119 00:05:37,010 --> 00:05:40,330 Nói cách khác, máy tính, bằng cách nào đó cho bạn một cách kỳ diệu, 120 00:05:40,330 --> 00:05:45,360 đưa ra con số 1 trong argc, AKA argcount, và nó đặt theo nghĩa đen chuỗi 121 00:05:45,360 --> 00:05:48,200 ./hello trong khung argv 0. 122 00:05:48,200 --> 00:05:51,750 Tôi không có ý tưởng, thẳng thắn, có gì trong khung argv 1 hoặc 2 hoặc 3, 123 00:05:51,750 --> 00:05:55,550 vì nếu người dùng không có gõ bất cứ điều gì ngoài ./hello, 124 00:05:55,550 --> 00:05:58,550 chúng ta sẽ giả định rằng các là những giá trị rác rất có thể, 125 00:05:58,550 --> 00:05:59,700 vậy để nói chuyện. 126 00:05:59,700 --> 00:06:02,650 Những khối của bộ nhớ tồn tại, nhưng nó không đến với chúng tôi 127 00:06:02,650 --> 00:06:05,710 nhìn vào họ, bởi vì các argcount chỉ có một. 128 00:06:05,710 --> 00:06:07,870 >> Bây giờ, trong khi đó, nếu tôi viết chạy một chương trình khác, 129 00:06:07,870 --> 00:06:12,250 cd, mà đúng hơn là một lệnh, nhấp nháy trong không gian cd prompt-- của bạn 130 00:06:12,250 --> 00:06:17,200 Dropbox-- khi tôi chạy đó, hiệu quả, khi chương trình được chạy cd, argc, 131 00:06:17,200 --> 00:06:22,270 bên trong bộ nhớ máy tính của tôi, là cho ngắn ngủi nhất thứ hai số 2. 132 00:06:22,270 --> 00:06:25,936 Và sau đó argv khung o có cd, khung argv 1 có Dropbox, 133 00:06:25,936 --> 00:06:28,560 và sau đó tất nhiên lệnh hoàn thành, vì vậy tất cả các bộ nhớ này 134 00:06:28,560 --> 00:06:30,420 về cơ bản biến mất và được sử dụng cho cái gì khác. 135 00:06:30,420 --> 00:06:32,270 Và đó là lý do tại sao tôi nói chỉ một giây. 136 00:06:32,270 --> 00:06:35,720 >> Trong khi đó, nếu chúng ta làm mkdir pset2, hình ảnh trông gần như giống nhau, 137 00:06:35,720 --> 00:06:37,900 nhưng với dây khác nhau bên trong argv. 138 00:06:37,900 --> 00:06:42,570 Nếu tôi làm vang dấu gạch ngang chào chào dot c, cùng ý tưởng. 139 00:06:42,570 --> 00:06:47,060 Nhiều công cụ được điền vào cho argv, và argc, tất nhiên, là 4. 140 00:06:47,060 --> 00:06:49,150 Vì vậy, nói cách khác, mặc dù mảng này 141 00:06:49,150 --> 00:06:52,950 có thể được chấm chấm chấm, một số chiều dài thay đổi, có thể nói, 142 00:06:52,950 --> 00:06:56,720 bạn luôn biết được nơi kết thúc của nó , bởi vì argc sẽ cho bạn biết 143 00:06:56,720 --> 00:07:00,120 vào thời điểm những gì bạn phải dừng lại nhìn vào các yếu tố trong argv. 144 00:07:00,120 --> 00:07:03,660 Bạn chỉ có thể nhìn vào bốn tổng cộng trong trường hợp này. 145 00:07:03,660 --> 00:07:06,600 >> Vì vậy, bây giờ chúng ta hãy xem, có lẽ, một chương trình đơn giản. 146 00:07:06,600 --> 00:07:09,070 Một là chỉ nói xin chào với một người như Zamyla. 147 00:07:09,070 --> 00:07:12,620 Vì vậy, tôi khẳng định tôi sẽ viết một chương trình chỉ trong một thời điểm thông qua đó tôi có thể làm 148 00:07:12,620 --> 00:07:16,670 ./hello Zamyla không gian, và sau đó tôi muốn chương trình của tôi để in ra một cái gì đó 149 00:07:16,670 --> 00:07:18,520 siêu đơn giản như "hello, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Bây giờ trong quá khứ chúng ta đã sử dụng getString. 151 00:07:20,100 --> 00:07:22,850 Vì vậy, trong quá khứ, ngay cả khi bạn mới để lập trình, 152 00:07:22,850 --> 00:07:27,180 tỷ lệ cược là bạn có thể whip lên một chương trình sử dụng getString 153 00:07:27,180 --> 00:07:29,390 và sau đó sử dụng printf để nói chào Zamyla. 154 00:07:29,390 --> 00:07:31,290 Nhưng chúng ta không sử dụng GetString thời gian này. 155 00:07:31,290 --> 00:07:37,510 Hãy để tôi thay vì đi vào Appliant và không bao gồm tiêu chuẩn I O dot h. 156 00:07:37,510 --> 00:07:41,160 Hãy để tôi cũng bao gồm CS50 chấm h. 157 00:07:41,160 --> 00:07:44,730 Bây giờ int chính, và bây giờ tôi sẽ không làm vô hiệu ngày hôm nay. 158 00:07:44,730 --> 00:07:51,200 Thay vào đó, tôi sẽ làm int argc chuỗi argv mở khung khung gần, 159 00:07:51,200 --> 00:07:52,640 không quy định cụ thể một số. 160 00:07:52,640 --> 00:07:54,644 Và bây giờ ở đây là tôi được gọi là để làm. 161 00:07:54,644 --> 00:07:57,560 Những gì tôi sẽ làm gì bây giờ, tôi sẽ làm một chút về một bước nhảy vọt của đức tin, 162 00:07:57,560 --> 00:08:00,560 Tôi sẽ cho rằng người sử dụng của sẽ sử dụng chương trình này một cách chính xác, 163 00:08:00,560 --> 00:08:04,980 và tôi chỉ đơn giản là sẽ làm printf hello,% sn. 164 00:08:04,980 --> 00:08:06,630 Vì vậy, không có gì mới ở đó. 165 00:08:06,630 --> 00:08:11,470 Nhưng tôi muốn bây giờ đặt bất cứ điều gì từ các loại dùng sau khi tên của chương trình. 166 00:08:11,470 --> 00:08:16,970 Vì vậy, nếu tôi làm ./hello gian Zamyla, tôi muốn bằng cách nào đó lập trình truy cập 167 00:08:16,970 --> 00:08:20,870 trích dẫn unquote "Zamyla." vì vậy tôi có thể đi vào vector lập luận của tôi, 168 00:08:20,870 --> 00:08:25,980 mảng của tôi về chuỗi, và nếu lệnh, một lần nữa, là không gian ./hello Zamyla, 169 00:08:25,980 --> 00:08:29,340 những gì tôi muốn làm số để đưa vào argv ở đây? 170 00:08:29,340 --> 00:08:29,840 ĐỐI TƯỢNG: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID Malan: 1, bởi vì khung 0 hóa ra 172 00:08:32,355 --> 00:08:34,230 là có được các tên chương trình, như chúng ta đã thấy. 173 00:08:34,230 --> 00:08:37,789 Vì vậy, khung 1 là từ đầu tiên mà tôi, người sử dụng, đã gõ. 174 00:08:37,789 --> 00:08:39,559 Tôi sẽ đi trước và lưu này. 175 00:08:39,559 --> 00:08:42,830 Tôi sẽ đi vào thư mục của tôi nơi mà tôi đã đặt tập tin này. 176 00:08:42,830 --> 00:08:44,920 Tôi sẽ làm cho chào 3. 177 00:08:44,920 --> 00:08:46,230 OK Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Tôi đã làm gì sai? 180 00:08:54,480 --> 00:08:57,270 Tôi đã bị bất ngờ bản thân mình chỉ là một khoảnh khắc đó. 181 00:08:57,270 --> 00:08:58,230 Tôi đã làm gì sai? 182 00:08:58,230 --> 00:08:59,220 >> TƯỢNG: Tên. 183 00:08:59,220 --> 00:09:01,767 >> DAVID Malan: Các tập tin của thực sự gọi là hello3.c. 184 00:09:01,767 --> 00:09:03,850 Và tôi đã làm điều đó chỉ dành cho nhất quán, bởi vì chúng tôi đã 185 00:09:03,850 --> 00:09:06,550 có của hello.c trong qua trong mã trực tuyến. 186 00:09:06,550 --> 00:09:11,550 Vì vậy, hãy sửa chữa ./hello này khung gạch ngang 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 Và bây giờ chúng tôi có xin chào, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Trong khi đó, tôi có thể thay đổi điều này để Rob được, hoặc thực sự bất kỳ từ nào khác. 190 00:09:17,650 --> 00:09:19,230 >> Nhưng chúng ta hãy xem xét một trường hợp góc. 191 00:09:19,230 --> 00:09:24,360 Những gì bạn có thể mong đợi sẽ xảy ra nếu Tôi không gõ tên của bất kỳ ai ở tất cả? 192 00:09:24,360 --> 00:09:25,270 >> TƯỢNG: Lỗi. 193 00:09:25,270 --> 00:09:27,300 >> DAVID Malan: Một lỗi của một số loại, có lẽ. 194 00:09:27,300 --> 00:09:28,200 Hãy xem. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Vì vậy, thực sự là printf một chút bảo vệ của chúng tôi 198 00:09:33,870 --> 00:09:38,131 ở đây, và theo nghĩa đen in dấu ngoặc mở null, nhưng mọi thứ còn tồi tệ hơn có thể xảy ra. 199 00:09:38,131 --> 00:09:40,130 Và chỉ để chứng minh một cái gì đó bạn hoàn toàn 200 00:09:40,130 --> 00:09:42,800 không nên làm, chúng ta hãy đi ở đây và bắt đầu chĩa ra xung quanh. 201 00:09:42,800 --> 00:09:43,300 Phải không? 202 00:09:43,300 --> 00:09:46,410 Nếu tôi biết rằng các hình ảnh trong bộ nhớ cơ bản này, 203 00:09:46,410 --> 00:09:52,660 argv khung 1 có Zamyla, argv khung 0 có ./hello, hoặc hello-3. 204 00:09:52,660 --> 00:09:55,400 Là gì trong khung 2? 205 00:09:55,400 --> 00:09:58,210 Vì vậy, tôi có thể trả lời rằng đặt câu hỏi về bản thân mình, phải không? 206 00:09:58,210 --> 00:10:00,460 Tôi chỉ có thể thay đổi từ 1 đến 2. 207 00:10:00,460 --> 00:10:07,270 Bây giờ tôi có thể biên dịch lại chào 3, ./hello3 Hãy phóng to và nhấn Enter. 208 00:10:07,270 --> 00:10:08,270 Rất tiếc. 209 00:10:08,270 --> 00:10:10,660 Không có dấu ngoặc. 210 00:10:10,660 --> 00:10:12,540 Thú vị. 211 00:10:12,540 --> 00:10:15,530 Vì vậy, đó là loại mát mẻ để xem những gì khác là ở đây. 212 00:10:15,530 --> 00:10:17,130 >> Vì vậy, những gì khác là bên trong của máy tính xách tay của tôi? 213 00:10:17,130 --> 00:10:20,390 Hãy lưu nó với khung 3. 214 00:10:20,390 --> 00:10:25,190 Hãy hello3, hello-3. 215 00:10:25,190 --> 00:10:26,500 Tò mò. 216 00:10:26,500 --> 00:10:30,560 Và bây giờ chúng ta hãy thực sự bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Vì vậy, đó là thực sự lặn sâu vào bộ nhớ máy tính của tôi. 218 00:10:34,340 --> 00:10:35,930 50 chỉ số trong. 219 00:10:35,930 --> 00:10:41,950 Vì vậy, hãy chào 3 hello-3. 220 00:10:41,950 --> 00:10:42,680 Tò mò. 221 00:10:42,680 --> 00:10:44,660 Được rồi, bây giờ tôi chỉ sẽ nhận được liều lĩnh. 222 00:10:44,660 --> 00:10:47,331 Hãy đi đến 5000. 223 00:10:47,331 --> 00:10:47,830 Tất cả các quyền. 224 00:10:47,830 --> 00:10:49,520 Vì vậy, hãy để tôi biên dịch lại. 225 00:10:49,520 --> 00:10:51,460 Hãy hello3, hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Bây giờ một số bạn, có thể là một bóng đèn sẽ tắt. 229 00:10:59,250 --> 00:11:01,900 Có bao nhiêu bạn có thấy thông báo này trước khi? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Vì vậy, tại sao? 232 00:11:04,420 --> 00:11:07,250 >> Tỷ lệ are-- và có khác nhau những thứ có thể gây ra điều này, 233 00:11:07,250 --> 00:11:09,730 và rõ ràng bạn đang ở tốt company-- chúng ta phải rõ ràng 234 00:11:09,730 --> 00:11:11,900 gây ra những gì được gọi là một lỗi phân khúc. 235 00:11:11,900 --> 00:11:15,890 Và câu chuyện dài ngắn cho ngày hôm nay, tôi đã chạm vào một phân đoạn của bộ nhớ 236 00:11:15,890 --> 00:11:17,060 rằng tôi không nên có. 237 00:11:17,060 --> 00:11:19,970 Trong trường hợp một phân đoạn chỉ có nghĩa là một đoạn bộ nhớ rằng tôi không nên có. 238 00:11:19,970 --> 00:11:25,530 Bây giờ máy tính đảm bảo rằng nếu tôi chạy ./helloZamyla mà tôi có thể chạm vào argv 239 00:11:25,530 --> 00:11:27,760 có khung 0 và argv khung 1. 240 00:11:27,760 --> 00:11:32,730 Nhưng argc là giá trị 2, có nghĩa là tôi chỉ allowed-- đó là loại danh dự 241 00:11:32,730 --> 00:11:35,180 system-- chạm khung 0 và 1 khung. 242 00:11:35,180 --> 00:11:37,990 Nếu tôi đi xa hơn, có hoàn toàn sẽ có bộ nhớ. 243 00:11:37,990 --> 00:11:40,660 RAM của tôi tồn tại vật lý trong máy tính. 244 00:11:40,660 --> 00:11:42,080 Nhưng ai mà biết được những gì đang có? 245 00:11:42,080 --> 00:11:44,450 Thật vậy, tôi đang chạy nhiều chương trình cùng một lúc. 246 00:11:44,450 --> 00:11:46,910 Tôi có thể có seen-- nếu tôi không làm điều này trên Appliant 247 00:11:46,910 --> 00:11:49,937 nhưng trên máy Mac hoặc PC-- của tôi, tôi có thể có nhìn thấy các nội dung của email. 248 00:11:49,937 --> 00:11:52,270 Tôi có thể nhìn thấy ngay lập tức thông điệp mà tôi vừa mới gửi. 249 00:11:52,270 --> 00:11:55,390 Bất cứ điều gì có thể kéo dài xung quanh trong bộ nhớ 250 00:11:55,390 --> 00:11:59,180 có thể được truy cập bằng cách tùy ý vuông khung ký hiệu này. 251 00:11:59,180 --> 00:12:02,850 Hoặc tệ hơn nữa, bạn có thể có tìm thấy một trong những mật khẩu của tôi 252 00:12:02,850 --> 00:12:05,859 Gần đây tôi đã muốn gõ vào, mà một chương trình đã được lưu trữ trong bộ nhớ như vậy là 253 00:12:05,859 --> 00:12:07,900 để xác thực cho tôi, và sau đó chỉ cần loại bỏ nó 254 00:12:07,900 --> 00:12:09,910 trong bộ nhớ RAM cho đến khi tôi bỏ chương trình đó. 255 00:12:09,910 --> 00:12:12,860 >> Và quả thực, đây là một trong sự nguy hiểm và là một trong các cường quốc 256 00:12:12,860 --> 00:12:15,980 của việc sử dụng một ngôn ngữ như C. Bạn có thể truy cập tự do 257 00:12:15,980 --> 00:12:18,860 để toàn bộ nội dung bộ nhớ của chương trình, 258 00:12:18,860 --> 00:12:21,340 và những kẻ xấu có thể thậm chí làm trong những cases-- 259 00:12:21,340 --> 00:12:23,807 đặc biệt là khi chúng tôi được lập trình web 260 00:12:23,807 --> 00:12:26,890 vào cuối học kỳ, chúng tôi sẽ lại topic-- này poke xung quanh, 261 00:12:26,890 --> 00:12:31,660 có khả năng, một người nào đó là máy tính bộ nhớ và tìm thấy những điều kỳ lạ như vậy 262 00:12:31,660 --> 00:12:32,570 như chúng ta đã thấy ở đó. 263 00:12:32,570 --> 00:12:36,900 Hoặc thậm chí tệ hơn, mật khẩu là ông người đọc có thể sử dụng để làm điều xấu. 264 00:12:36,900 --> 00:12:40,240 >> Vì vậy, rõ ràng tôi không nên làm điều này, vì những điều kỳ lạ bắt đầu xảy ra. 265 00:12:40,240 --> 00:12:42,310 Thật vậy, đây là một chương trình bị rơi. 266 00:12:42,310 --> 00:12:44,580 Điều này sẽ tương đương với của Mac OS hoặc trong Windows 267 00:12:44,580 --> 00:12:46,770 một cửa sổ chương trình chỉ biến mất. 268 00:12:46,770 --> 00:12:48,300 Một lỗi không mong muốn đã xảy ra. 269 00:12:48,300 --> 00:12:50,840 Trong môi trường dòng lệnh chúng ta thấy một cái gì đó như thế này. 270 00:12:50,840 --> 00:12:54,480 Nhưng đó là lý do tại sao, là tôi chỉ đơn giản là chạm vào bộ nhớ mà không thuộc về tôi. 271 00:12:54,480 --> 00:12:57,090 >> Vì vậy, hãy bảo vệ chống lại một này chút theo một cách khác 272 00:12:57,090 --> 00:12:59,010 bằng cách nhìn vào chương trình này ở đây. 273 00:12:59,010 --> 00:13:01,000 Vì vậy, một lần nữa, bộ xương mà chúng ta đã thấy earlier-- 274 00:13:01,000 --> 00:13:02,480 và tôi đã nhấn mạnh thời gian int này. 275 00:13:02,480 --> 00:13:05,900 Và tất cả thời gian chính này có thực sự trở lại một giá trị. 276 00:13:05,900 --> 00:13:09,120 Mặc dù trong hầu hết các bài giảng của chúng tôi ví dụ chúng tôi đã không bao giờ được sử dụng một lần 277 00:13:09,120 --> 00:13:10,990 trả lại bất cứ điều gì trong chính. 278 00:13:10,990 --> 00:13:13,710 Chúng tôi chỉ cần viết printf gần ngoặc móc và đó là nó. 279 00:13:13,710 --> 00:13:16,500 Nhưng miễn phí, những gì các trình biên dịch đã làm cho bạn, 280 00:13:16,500 --> 00:13:19,510 có hiệu quả, được trở về 0 cho bạn. 281 00:13:19,510 --> 00:13:22,950 Hóa out-- và đó là một chút counterintuitive-- đó 0 là tốt. 282 00:13:22,950 --> 00:13:24,690 Nó không có nghĩa sai cho mỗi gia nhập. 283 00:13:24,690 --> 00:13:29,080 0 là tốt, và bất kỳ không 0 giá trị, thế giới đã quyết định, 284 00:13:29,080 --> 00:13:30,619 có thể biểu hiện một lỗi. 285 00:13:30,619 --> 00:13:32,910 Vì vậy, nếu bạn đã từng sai lầm một cái gì đó trên máy tính của bạn, 286 00:13:32,910 --> 00:13:36,600 hoặc một chương trình vừa qua đời vào bạn và bạn đã nhận được một số cửa sổ có sai sót 287 00:13:36,600 --> 00:13:40,360 trên màn hình của bạn, nói lỗi 49 tiêu cực hoặc sai sót 23-- 288 00:13:40,360 --> 00:13:44,170 một số value-- dường như đó là tùy ý vì một lập trình đã mã hóa cứng 289 00:13:44,170 --> 00:13:49,370 một giá trị như tiêu cực hay tích cực 49 23 đại diện cho bất kỳ số nào, dám nói, 290 00:13:49,370 --> 00:13:53,340 4 tỷ điều có thể mà có thể đi sai trong một chương trình. 291 00:13:53,340 --> 00:13:55,700 >> Vì vậy, làm thế nào tôi có thể mất lợi dụng điều này bản thân mình? 292 00:13:55,700 --> 00:13:58,970 Vâng, hãy để tôi mở ra một chương trình mà tôi đã viết trước, 293 00:13:58,970 --> 00:14:01,450 và poke xung quanh trực tuyến hello 4. 294 00:14:01,450 --> 00:14:05,650 Và nó gần như giống hệt nhau, ngoại trừ việc có của nó một chút kiểm tra lỗi. 295 00:14:05,650 --> 00:14:09,660 Trong trường hợp này, tôi đã một lần nữa tuyên bố chính là dùng hai tham số, 296 00:14:09,660 --> 00:14:13,180 nhưng thời gian này, trên đường 17, thông báo Tôi đang làm một chút của một kiểm tra sanity. 297 00:14:13,180 --> 00:14:17,100 Tôi đảm bảo rằng argc bằng bằng 2. 298 00:14:17,100 --> 00:14:18,960 Bởi vì nếu nó là, có nghĩa là tôi có thể an toàn 299 00:14:18,960 --> 00:14:21,420 không chỉ chạm vào khung 0, nhưng khung 1. 300 00:14:21,420 --> 00:14:24,330 Và tôi đi trước và in ra, trong trường hợp này, Zamyla hoặc Rob 301 00:14:24,330 --> 00:14:26,020 hoặc bất cứ điều gì từ tôi đánh ra. 302 00:14:26,020 --> 00:14:28,020 Và bây giờ chỉ để có được một chút thích hợp hơn, 303 00:14:28,020 --> 00:14:31,910 Tôi sẽ trở lại một cách rõ ràng 0 để biểu thị tất cả là tốt. 304 00:14:31,910 --> 00:14:33,300 Không có gì xấu xảy ra. 305 00:14:33,300 --> 00:14:38,590 >> Tuy nhiên, theo quy ước, tôi sẽ trở về 1, hoặc thẳng thắn bất kỳ không giá trị 0, 306 00:14:38,590 --> 00:14:40,160 nếu một cái gì đó đã đi sai. 307 00:14:40,160 --> 00:14:43,270 Bây giờ người dùng sẽ không thực sự nhận thấy những gì đang xảy ra. 308 00:14:43,270 --> 00:14:50,410 Thật vậy, nếu tôi đi vào thư mục này, chúng tôi phóng to và làm cho chào 4, 309 00:14:50,410 --> 00:14:54,210 hello-4 Zamyla cư xử như tôi mong đợi. 310 00:14:54,210 --> 00:14:58,570 Nhưng nếu tôi thay vì không gõ bất cứ điều gì, không có gì có thể xảy ra, 311 00:14:58,570 --> 00:14:59,680 nhưng nó không sụp đổ. 312 00:14:59,680 --> 00:15:04,660 Và nếu tôi thay vì làm điều gì đó Rob như là một giám thị 313 00:15:04,660 --> 00:15:07,550 trong việc chia sẻ Thayer-- thông tin tùy ý. 314 00:15:07,550 --> 00:15:13,680 Tuy nhiên, thông báo, argv 1, 2, 3, 4, và 5 giờ nên tồn tại trong bộ nhớ. 315 00:15:13,680 --> 00:15:16,540 Đó cũng không phải những gì là dự kiến ​​chương trình của tôi, 316 00:15:16,540 --> 00:15:20,300 bởi vì tôi đã kiểm tra xem argc bằng bình đẳng 2 hay không. 317 00:15:20,300 --> 00:15:22,140 Vì vậy, bây giờ tôi đang bảo vệ chống lại điều này. 318 00:15:22,140 --> 00:15:25,290 >> Bây giờ, khi một sang một bên, chúng tôi các programmer-- hay đúng hơn là chúng tôi các users-- 319 00:15:25,290 --> 00:15:29,670 không bao giờ thấy 0 hoặc 1 nhưng sử dụng một công cụ gọi là Debugger, hoặc các công cụ khác, 320 00:15:29,670 --> 00:15:32,250 như chúng ta sẽ thấy trước dài, bạn lập trình viên 321 00:15:32,250 --> 00:15:36,590 thực sự có thể nhìn thấy những gì có thể đi sai bên trong chương trình của bạn. 322 00:15:36,590 --> 00:15:39,170 >> Vì vậy, bất kỳ câu hỏi về argc? 323 00:15:39,170 --> 00:15:40,873 Yeah. 324 00:15:40,873 --> 00:15:45,292 >> TƯỢNG: Tôi đã nhìn thấy nơi họ đã không có nhân vật, [không nghe được] 325 00:15:45,292 --> 00:15:49,669 vừa nói sao chuỗi d, giống như nhân vật dấu phẩy. 326 00:15:49,669 --> 00:15:50,710 Họ là tương đương ở đây? 327 00:15:50,710 --> 00:15:51,626 >> DAVID Malan: Họ là. 328 00:15:51,626 --> 00:15:55,080 Vì vậy, câu hỏi là, bạn có chương trình đôi khi nhìn thấy 329 00:15:55,080 --> 00:15:57,270 như thế này mà không làm nói khung chuỗi argv 330 00:15:57,270 --> 00:16:01,015 nhưng thay vì nói điều gì đó như char khung sao argv. 331 00:16:01,015 --> 00:16:03,140 Và thậm chí có khác biến thể mà bạn có thể nhìn thấy. 332 00:16:03,140 --> 00:16:04,264 Họ có thực sự tương đương. 333 00:16:04,264 --> 00:16:06,240 Hiện tại, chúng tôi có những loại bánh xe đào tạo 334 00:16:06,240 --> 00:16:09,737 trên dưới dạng chuỗi trong CS50 thư viện, nhưng chỉ trong vòng một tuần 335 00:16:09,737 --> 00:16:12,570 hay như vậy chúng ta sẽ loại bỏ tắc nghẽn hoàn toàn và thực sự 336 00:16:12,570 --> 00:16:16,820 nhìn vào những gì các char và ngôi sao là, và làm thế nào những người liên quan đến bộ nhớ 337 00:16:16,820 --> 00:16:18,140 đại diện nói chung. 338 00:16:18,140 --> 00:16:19,540 Vì vậy, chúng tôi sẽ quay trở lại đó. 339 00:16:19,540 --> 00:16:21,540 >> Các câu hỏi khác về argv hoặc argc của chúng tôi? 340 00:16:21,540 --> 00:16:22,397 Yeah. 341 00:16:22,397 --> 00:16:24,438 TƯỢNG: Tại sao nó lại trở lại một lỗi [không nghe được]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID Malan: Tại sao nó trả lại một lỗi only-- oh! 344 00:16:29,230 --> 00:16:31,813 Trong trường hợp trước, khi chúng tôi được futzing xung quanh với bộ nhớ, 345 00:16:31,813 --> 00:16:35,110 tại sao nó chỉ trả lại một lỗi khi tôi thực sự đánh máy một số lượng lớn? 346 00:16:35,110 --> 00:16:36,620 Câu trả lời ngắn gọn là, chúng tôi chỉ có may mắn. 347 00:16:36,620 --> 00:16:39,240 Nói chung, một máy tính cấp phát bộ nhớ trong khối, 348 00:16:39,240 --> 00:16:42,900 và nó đã cho tôi một đoạn đủ lớn mà Tôi đã đi, mà không bị nhận thấy, 349 00:16:42,900 --> 00:16:46,280 cảm động của 2 khung, khung 3, khung 50, nhưng ngay sau khi tôi đẩy 350 00:16:46,280 --> 00:16:49,080 may mắn của tôi, tôi đã vượt ra ngoài ranh giới của đoạn bộ nhớ 351 00:16:49,080 --> 00:16:50,520 hệ điều hành đã cho tôi. 352 00:16:50,520 --> 00:16:52,720 Và đó là khi nó kiểm soát chặt và nói rằng, không có. 353 00:16:52,720 --> 00:16:54,580 Lỗi phân khúc. 354 00:16:54,580 --> 00:16:55,692 Yeah. 355 00:16:55,692 --> 00:16:58,890 >> TƯỢNG: Làm thế nào để máy tính biết giá trị của argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID Malan: Làm thế nào để máy tính biết giá trị của argc? 357 00:17:02,390 --> 00:17:07,920 Khi bạn chạy một chương trình, chương trình, bởi bản chất của dấu nhắc nhấp nháy, 358 00:17:07,920 --> 00:17:11,359 được giao mảng từ được đánh máy 359 00:17:11,359 --> 00:17:13,300 tại dấu nhắc, đó là gõ tại dấu nhắc. 360 00:17:13,300 --> 00:17:16,569 Và do đó, nó là điều hành của bạn hệ thống cơ bản 361 00:17:16,569 --> 00:17:20,329 populates lập luận chính cho bạn. 362 00:17:20,329 --> 00:17:22,829 Vì vậy, đó là một trong những dịch vụ mà bạn nhận được, loại bí mật 363 00:17:22,829 --> 00:17:24,869 bên dưới mui xe của một hệ điều hành. 364 00:17:24,869 --> 00:17:27,118 Các câu hỏi khác? 365 00:17:27,118 --> 00:17:27,618 Yeah. 366 00:17:27,618 --> 00:17:29,787 >> TƯỢNG: không cốt lõi bãi nghĩa là gì? 367 00:17:29,787 --> 00:17:31,370 DAVID Malan: không đổ lõi có nghĩa là gì? 368 00:17:31,370 --> 00:17:32,950 Vì vậy, đó là một câu hỏi hay. 369 00:17:32,950 --> 00:17:35,312 Và hãy để tôi quay trở lại thư mục này ở đây. 370 00:17:35,312 --> 00:17:37,270 Và bạn sẽ nhận thấy rằng Tôi có một tập tin mới có. 371 00:17:37,270 --> 00:17:41,670 Nó thực sự gọi là cốt lõi, và nó thực sự thường là một tập tin có kích thước khá. 372 00:17:41,670 --> 00:17:45,300 Đó thực chất là một bản chụp của các nội dung của bộ nhớ chương trình của tôi 373 00:17:45,300 --> 00:17:46,902 hoặc bộ nhớ RAM khi nó bị rơi. 374 00:17:46,902 --> 00:17:49,110 Và điều này sẽ có ích, có khả năng, diagnostically, 375 00:17:49,110 --> 00:17:52,850 khi chúng tôi nói chuyện trong một bài giảng tương lai và phần về gỡ lỗi, 376 00:17:52,850 --> 00:17:55,730 bởi vì bạn thực sự có thể làm tương đương với một số khám nghiệm tử thi 377 00:17:55,730 --> 00:18:00,300 trên tập tin đó để giúp tìm ra những gì bạn đã làm sai trong chương trình của bạn. 378 00:18:00,300 --> 00:18:01,220 Yeah. 379 00:18:01,220 --> 00:18:04,450 >> TƯỢNG: argc là một câu lệnh trong chính nó, hoặc bạn có thể đặt tên cho nó bất cứ điều gì? 380 00:18:04,450 --> 00:18:05,575 >> DAVID Malan: Câu hỏi. 381 00:18:05,575 --> 00:18:08,040 Argc là một lệnh trong chính nó, hoặc bạn có thể đặt tên nó là gì không? 382 00:18:08,040 --> 00:18:09,290 Đó chắc chắn không phải là một lệnh. 383 00:18:09,290 --> 00:18:13,500 Nó chỉ đơn giản là một biến của tên hoặc tên của một đối số, 384 00:18:13,500 --> 00:18:15,481 và như vậy chúng ta hoàn toàn có thể gọi foo này, 385 00:18:15,481 --> 00:18:18,480 chúng ta có thể gọi thanh này, mà có xu hướng là đi-đến từ một máy tính 386 00:18:18,480 --> 00:18:19,860 nhà khoa học đi đến. 387 00:18:19,860 --> 00:18:22,820 Tuy nhiên, theo quy ước, chúng tôi sử dụng argc và argv. 388 00:18:22,820 --> 00:18:25,360 Nhưng đó chỉ là một con người ước, không có gì hơn. 389 00:18:25,360 --> 00:18:25,860 Tất cả các quyền. 390 00:18:25,860 --> 00:18:28,140 Vì vậy, hóa ra, tôi đã nói một chút của một lie-- trắng 391 00:18:28,140 --> 00:18:31,264 và thẳng thắn, trong tương lai, bạn sẽ thấy chúng tôi đã nói dối trắng khác. 392 00:18:31,264 --> 00:18:33,510 Nhưng hiện nay, chúng ta sẽ để vỏ lại một trong những. 393 00:18:33,510 --> 00:18:37,310 Trong trường hợp này đây khi tôi trước đây chạy một chương trình như ./hello hoặc hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, chúng tôi đã có các nội dung của tôi bộ nhớ máy tính của tìm kiếm gần như thế 395 00:18:42,780 --> 00:18:43,280 này. 396 00:18:43,280 --> 00:18:45,070 Nhưng nhớ lại những gì là một chuỗi. 397 00:18:45,070 --> 00:18:49,279 Chúng tôi đã nói gì một tuần trước đây những gì một chuỗi thực sự là bên dưới mui xe? 398 00:18:49,279 --> 00:18:50,320 TƯỢNG: Mảng ký tự. 399 00:18:50,320 --> 00:18:52,111 DAVID Malan: Đây là một mảng ký tự, phải không? 400 00:18:52,111 --> 00:18:55,760 Vì vậy, chúng ta có thể có một mảng của chuỗi, nhưng, lần lượt, một chuỗi 401 00:18:55,760 --> 00:18:57,150 là một mảng các ký tự. 402 00:18:57,150 --> 00:19:00,010 Vì vậy, nếu tôi thực sự muốn được hậu môn khi tôi vẽ bức tranh này, 403 00:19:00,010 --> 00:19:03,290 Tôi thực sự cần được vẽ nó nhiều hơn một chút như thế này, 404 00:19:03,290 --> 00:19:08,000 nhờ đó mà trong mỗi chỉ số của mảng argv của tôi, 405 00:19:08,000 --> 00:19:11,432 có chính là một chuỗi toàn bộ mà chính nó là trong một mảng. 406 00:19:11,432 --> 00:19:13,140 Và bây giờ là lời nói dối trắng chúng ta đang nói hôm nay 407 00:19:13,140 --> 00:19:15,181 là hình ảnh không trông khá như thế này. 408 00:19:15,181 --> 00:19:19,110 Trong thực tế, các hình vuông nhỏ là thường bên ngoài của hình chữ nhật lớn 409 00:19:19,110 --> 00:19:19,610 có. 410 00:19:19,610 --> 00:19:21,280 Nhưng chúng tôi sẽ trở lại mà chẳng bao lâu. 411 00:19:21,280 --> 00:19:25,440 Nhưng đây là dấu gạch chéo ngược ./hello 0, đó là nhân vật đặc biệt 412 00:19:25,440 --> 00:19:28,310 demarcates cuối của một chuỗi, và chúng tôi đã có với nhau sau khi 413 00:19:28,310 --> 00:19:29,360 Tên của Zamyla. 414 00:19:29,360 --> 00:19:30,900 Vì vậy, điều này có nghĩa là gì? 415 00:19:30,900 --> 00:19:33,410 >> Vâng, hãy để tôi đi trước và mở ra hai ví dụ khác 416 00:19:33,410 --> 00:19:35,220 mà có sẵn trực tuyến. 417 00:19:35,220 --> 00:19:40,590 Một được gọi là argv1.c và khác là argv2. 418 00:19:40,590 --> 00:19:44,260 Đó là một chương trình siêu đơn giản là khác nhau từ các chương trình trước đây 419 00:19:44,260 --> 00:19:47,260 trong đó bây giờ tôi đang sử dụng argc và argv ở đây. 420 00:19:47,260 --> 00:19:54,300 Và bây giờ tôi đang kết hợp với một vòng lặp for ở dòng 18, từ i = 0 trên lên đến argc. 421 00:19:54,300 --> 00:19:56,850 Và những gì tôi sẽ làm gì với các dòng mã này ở đây? 422 00:19:56,850 --> 00:19:58,270 Trong tiếng Anh. 423 00:19:58,270 --> 00:20:00,510 Điều này rõ ràng cho thấy sử dụng argc. 424 00:20:00,510 --> 00:20:03,670 Nhưng trong tiếng Anh, những gì hiện nó làm gì nếu tôi chạy chương trình này? 425 00:20:03,670 --> 00:20:04,366 Vâng? 426 00:20:04,366 --> 00:20:07,386 >> TƯỢNG: Nó sẽ in của bạn màn hình nhiều lần như bạn muốn. 427 00:20:07,386 --> 00:20:08,260 DAVID Malan: Chính xác. 428 00:20:08,260 --> 00:20:10,480 Vì vậy, bất cứ điều gì từ tôi gõ tại dấu nhắc, đó là 429 00:20:10,480 --> 00:20:13,120 sẽ nôn ra chúng tôi mỗi dòng. 430 00:20:13,120 --> 00:20:14,370 Vì vậy, chúng ta hãy đi trước và làm điều này. 431 00:20:14,370 --> 00:20:17,862 Hãy để tôi đi vào thư mục của tôi và làm cho ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Và bây giờ, chúng ta hãy giữ nó đơn giản. 434 00:20:21,770 --> 00:20:23,834 Hãy làm điều gì đầu tiên. 435 00:20:23,834 --> 00:20:26,750 Nó đã in ra một điều, và đó là thực sự là tên của chương trình, 436 00:20:26,750 --> 00:20:28,240 bởi vì đó là trong khung 0. 437 00:20:28,240 --> 00:20:33,290 Nếu bây giờ tôi nói foo, nó sẽ làm hai, và nếu tôi nói foo bar, 438 00:20:33,290 --> 00:20:35,580 nó sẽ nói những ba điều. 439 00:20:35,580 --> 00:20:37,740 Bây giờ đó là một chút thú vị, có thể. 440 00:20:37,740 --> 00:20:41,450 Nhưng nhớ rằng argv là một mảng các chuỗi, 441 00:20:41,450 --> 00:20:45,960 nhưng một chuỗi là một mảng ký tự, vì vậy chúng tôi có thể có những điều lên một notch 442 00:20:45,960 --> 00:20:48,560 và áp dụng mà cơ bản logic và thực hiện mã 443 00:20:48,560 --> 00:20:51,160 có vẻ nhiều hơn một chút khó hiểu, thừa nhận. 444 00:20:51,160 --> 00:20:53,540 Nhưng bằng việc có một lồng nhau vòng lặp, một cái gì đó giống như 445 00:20:53,540 --> 00:20:57,030 với những gì bạn có thể nhớ lại từ Mario, Ví dụ, nếu bạn đã làm nó theo cách này. 446 00:20:57,030 --> 00:21:00,380 >> Vì vậy, bây giờ thấy trên dòng 19, tôi một lần nữa lặp lại trên lập luận của tôi, 447 00:21:00,380 --> 00:21:02,410 từ 0 lên đến trên argc. 448 00:21:02,410 --> 00:21:05,510 Và bây giờ trong dòng 21-- tôi vay một thủ thuật từ week-- cuối cùng 449 00:21:05,510 --> 00:21:11,090 Tôi đang kiểm tra những gì là chiều dài của khung argv tôi. 450 00:21:11,090 --> 00:21:12,920 Tôi đang lưu trữ mà câu trả lời trong n. 451 00:21:12,920 --> 00:21:18,230 Và sau đó tôi kết hợp từ j đến n, trong đó j được khởi tạo 0. 452 00:21:18,230 --> 00:21:19,460 Vì vậy, quy ước để đếm. 453 00:21:19,460 --> 00:21:22,335 Một khi bạn đã sử dụng tôi, nếu bạn có một vòng lặp lồng nhau, bạn không thể sử dụng tôi một lần nữa, 454 00:21:22,335 --> 00:21:25,770 nếu không bạn sẽ clobber, có khả năng, giá trị bên ngoài của các vòng trong. 455 00:21:25,770 --> 00:21:27,200 Vì vậy, tôi đang sử dụng theo quy ước j. 456 00:21:27,200 --> 00:21:28,020 Chúng ta có thể sử dụng k. 457 00:21:28,020 --> 00:21:31,080 Nếu bạn có nhiều hơn k, bạn có thể có quá nhiều làm tổ, thông thường. 458 00:21:31,080 --> 00:21:33,800 Nhưng bây giờ, tôi nhận thấy printf dòng là hơi khác nhau. 459 00:21:33,800 --> 00:21:37,520 Tôi không in% s, tôi in c%, trong đó, tất nhiên, 460 00:21:37,520 --> 00:21:39,460 là một giữ chỗ cho một char. 461 00:21:39,460 --> 00:21:40,770 >> Và bây giờ thấy cú pháp này. 462 00:21:40,770 --> 00:21:41,270 Mới. 463 00:21:41,270 --> 00:21:42,630 Chúng tôi đã không nhìn thấy nó trước đây. 464 00:21:42,630 --> 00:21:47,290 Nhưng một cách hợp lý, điều này chỉ có nghĩa là có được chuỗi thứ i trong argv 465 00:21:47,290 --> 00:21:50,067 và nhận được những j gì? 466 00:21:50,067 --> 00:21:50,900 TƯỢNG: nhân vật. 467 00:21:50,900 --> 00:21:52,800 DAVID Malan: Nhân vật trong chuỗi đó. 468 00:21:52,800 --> 00:21:57,100 Vì vậy, bằng cách sử dụng dấu ngoặc vuông theo sau dấu ngoặc vuông, 469 00:21:57,100 --> 00:22:00,390 đây là lặn đầu tiên thành chuỗi argv của, 470 00:22:00,390 --> 00:22:02,225 và sau đó là thứ hai dấu ngoặc vuông với j 471 00:22:02,225 --> 00:22:06,580 là lặn vào các nhân vật trong rằng chuỗi đặc biệt trong argv. 472 00:22:06,580 --> 00:22:09,562 Và sau đó, chỉ cần cho các biện pháp tốt, Tôi đang in một dòng mới ở đây. 473 00:22:09,562 --> 00:22:12,020 Vì vậy, bây giờ hãy để tôi đi trước và mở lên một cửa sổ hơi lớn 474 00:22:12,020 --> 00:22:13,600 vì vậy chúng tôi có thể thấy điều này trong hành động. 475 00:22:13,600 --> 00:22:15,700 Hãy để tôi đi vào thư mục đó. 476 00:22:15,700 --> 00:22:22,550 Và bây giờ làm cho argv-2-- whoops-- làm argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 Và đó là một chút khó khăn để đọc theo chiều dọc, 479 00:22:24,860 --> 00:22:27,920 nhưng đó thực sự là tên của chương trình, tiếp theo là một dòng trống. 480 00:22:27,920 --> 00:22:30,210 Bây giờ hãy để tôi đi trước và làm foo. 481 00:22:30,210 --> 00:22:33,210 Tương tự như vậy khó đọc, nhưng nó thực sự in một ký tự trên mỗi dòng. 482 00:22:33,210 --> 00:22:36,780 Và nếu tôi làm quầy bar, nó bây giờ in những dòng dòng. 483 00:22:36,780 --> 00:22:40,140 Vì vậy, các takeaway ở đây không phải là quá nhiều rằng, wow, nhìn vào thủ thuật này mới gọn gàng 484 00:22:40,140 --> 00:22:44,750 nơi bạn có thể có được ở các nội dung các nhân vật cụ thể của một mảng, 485 00:22:44,750 --> 00:22:48,380 mà là cách chúng ta đang dùng những cơ bản ý tưởng như chỉ mục vào một mảng, 486 00:22:48,380 --> 00:22:51,620 và sau đó lập chỉ mục vào một mảng đó là trong mảng đó, 487 00:22:51,620 --> 00:22:56,180 và chỉ cần áp dụng những ý tưởng tương tự để ví dụ hơi phức tạp hơn. 488 00:22:56,180 --> 00:22:59,560 Nhưng những điều cơ bản thực sự có không thay đổi, thậm chí kể từ tuần trước. 489 00:22:59,560 --> 00:23:02,350 >> Bây giờ đây là loại kịp thời, trong đó, nhớ lại, trong tuần không 490 00:23:02,350 --> 00:23:04,110 chúng tôi đã chơi với một cuốn sách điện thoại như thế này. 491 00:23:04,110 --> 00:23:06,670 Và mặc dù điều này rõ ràng phần vật lý của giấy, 492 00:23:06,670 --> 00:23:09,150 bạn có thể loại suy nghĩ của một cuốn sách điện thoại như là một mảng. 493 00:23:09,150 --> 00:23:12,770 Chắc chắn, nếu bạn đã reimplement phần này những mảnh giấy 494 00:23:12,770 --> 00:23:15,260 trong một máy tính, có thể bạn sẽ sử dụng một cái gì đó 495 00:23:15,260 --> 00:23:20,270 giống như một mảng để lưu trữ tất cả những tên và số từ A tất cả các cách 496 00:23:20,270 --> 00:23:23,800 thông qua Z. Vì vậy, đây là tốt đẹp, bởi vì nó cho phép chúng ta một cơ hội, 497 00:23:23,800 --> 00:23:28,310 có lẽ, để xem xét như thế nào có lẽ bạn thực sự thực hiện một cái gì đó như thế. 498 00:23:28,310 --> 00:23:31,250 Như với một loạt các cửa ra ở đây. 499 00:23:31,250 --> 00:23:36,380 Vì vậy, nếu tôi could-- chúng ta cần một tình nguyện đi lên trên. 500 00:23:36,380 --> 00:23:36,980 Hãy xem. 501 00:23:36,980 --> 00:23:40,650 Một khuôn mặt quen thuộc có lẽ, khuôn mặt quen thuộc có lẽ. 502 00:23:40,650 --> 00:23:42,090 Làm thế nào về màu da cam? 503 00:23:42,090 --> 00:23:42,680 Ở đây. 504 00:23:42,680 --> 00:23:45,870 Áo sơ mi màu da cam, đi lên trên. 505 00:23:45,870 --> 00:23:52,230 >> Chúng ta hãy đi trước bây giờ và di chuyển các cánh cửa trên sang một bên, 506 00:23:52,230 --> 00:23:54,020 di chuyển các ra khỏi con đường cho một thời điểm. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Tên của bạn là gì? 509 00:23:57,760 --> 00:23:58,580 >> Ajay: 510 00:23:58,580 --> 00:23:58,655 >> DAVID Malan: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Rất vui được gặp bạn. 513 00:23:59,451 --> 00:23:59,950 Tất cả các quyền. 514 00:23:59,950 --> 00:24:04,500 Vì vậy, chúng tôi có sau sáu cửa kỹ thuật số trên screen-- 515 00:24:04,500 --> 00:24:07,810 hoặc, đúng hơn, bảy cửa trên screen-- một bó toàn bộ số. 516 00:24:07,810 --> 00:24:10,099 Và tôi đã nói với bạn không có gì trong advance-- đồng ý? 517 00:24:10,099 --> 00:24:11,140 Ajay: Không có gì trước. 518 00:24:11,140 --> 00:24:14,730 DAVID Malan: Tất cả tôi muốn bạn làm bây giờ là tìm cho tôi, và cho chúng ta, 519 00:24:14,730 --> 00:24:20,920 thực sự, số 50, một bước tại một thời điểm. 520 00:24:20,920 --> 00:24:21,830 >> Ajay: Số 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID Malan: Số 50. 522 00:24:22,580 --> 00:24:24,746 Và bạn có thể tiết lộ những gì là phía sau mỗi cánh cửa 523 00:24:24,746 --> 00:24:27,930 chỉ đơn giản bằng cách chạm vào nó với một ngón tay. 524 00:24:27,930 --> 00:24:31,364 Chết tiệt. [Cười] 525 00:24:31,364 --> 00:24:34,560 >> [Vỗ tay] 526 00:24:34,560 --> 00:24:39,540 >> Thực hiện rất tốt. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Chúng tôi có một món quà đáng yêu giải thưởng dành cho bạn ở đây. 529 00:24:44,090 --> 00:24:46,520 Lựa chọn của bạn những bộ phim chúng tôi thảo luận tuần trước. 530 00:24:46,520 --> 00:24:47,362 >> Ajay: Oh, người đàn ông. 531 00:24:47,362 --> 00:24:49,050 Ồ, tôi chưa bao giờ thấy Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID Malan: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Tất cả các quyền. 534 00:24:50,140 --> 00:24:53,790 Vì vậy, tổ chức trên chỉ là một thời điểm. 535 00:24:53,790 --> 00:24:57,430 How-- chúng ta hãy làm này một moment-- có thể dạy dỗ 536 00:24:57,430 --> 00:25:00,412 làm thế nào để bạn đi về tìm kiếm số 50? 537 00:25:00,412 --> 00:25:01,370 Ajay: tôi đã chọn ngẫu nhiên. 538 00:25:01,370 --> 00:25:03,420 DAVID Malan: Vì vậy, bạn đã chọn ngẫu nhiên và đã gặp may. 539 00:25:03,420 --> 00:25:03,790 Ajay: Có. 540 00:25:03,790 --> 00:25:04,456 DAVID Malan: OK. 541 00:25:04,456 --> 00:25:05,050 Tuyệt vời. 542 00:25:05,050 --> 00:25:08,470 Vì vậy, bây giờ, có bạn không nhận được may mắn, những gì khác 543 00:25:08,470 --> 00:25:10,210 có thể đã xảy ra đằng sau những cánh cửa? 544 00:25:10,210 --> 00:25:12,930 Vì vậy, nếu tôi đi trước và tiết lộ những con số này ở đây, 545 00:25:12,930 --> 00:25:15,180 họ thực sự là theo thứ tự ngẫu nhiên. 546 00:25:15,180 --> 00:25:17,750 Và tốt nhất bạn có thể có thực hiện, thẳng thắn, là bởi, cuối cùng, 547 00:25:17,750 --> 00:25:19,410 trong trường hợp xấu nhất, kiểm tra tất cả. 548 00:25:19,410 --> 00:25:23,000 Vì vậy, bạn có siêu may mắn, mà không phải là những gì chúng tôi muốn gọi một thuật toán. 549 00:25:23,000 --> 00:25:24,730 Có, congrats. 550 00:25:24,730 --> 00:25:27,010 Nhưng bây giờ tôi let's-- hài hước, nếu bạn có thể. 551 00:25:27,010 --> 00:25:28,310 Hãy đi đến tab này ở đây. 552 00:25:28,310 --> 00:25:31,460 Và đây là những con số rõ ràng những gì có vẻ là một thứ tự ngẫu nhiên, 553 00:25:31,460 --> 00:25:32,280 và họ. 554 00:25:32,280 --> 00:25:35,160 Nhưng bây giờ nếu tôi thay vì yêu cầu bồi thường rằng đằng sau những cánh cửa 555 00:25:35,160 --> 00:25:39,070 là những con số được sắp xếp. 556 00:25:39,070 --> 00:25:41,780 Mục tiêu bây giờ là cũng tìm thấy chúng tôi số 50. 557 00:25:41,780 --> 00:25:45,910 Nhưng làm điều đó thuật toán, và cho chúng tôi biết bạn đang đi về nó. 558 00:25:45,910 --> 00:25:48,020 Và nếu bạn tìm thấy nó, bạn giữ cho bộ phim. 559 00:25:48,020 --> 00:25:49,520 Bạn không tìm thấy nó, bạn cung cấp cho nó trở lại. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 Ajay: Vì vậy, tôi sẽ kiểm tra kết thúc đầu tiên, để xác định xem there's-- 562 00:25:58,112 --> 00:26:02,048 [Cười và vỗ tay] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID Malan: Ở đây bạn đi. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Chúng ta hãy xem một trong người tiền nhiệm của Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, người không phải là khá may mắn. 568 00:26:25,450 --> 00:26:28,670 OK, vì vậy công việc của bạn ở đây, Sean, là như sau. 569 00:26:28,670 --> 00:26:32,970 Tôi đã giấu đằng sau những cửa số bảy, 570 00:26:32,970 --> 00:26:37,200 nhưng giấu đi trong một số các cửa cũng như là con số không âm khác. 571 00:26:37,200 --> 00:26:40,730 Và mục tiêu của bạn là để nghĩ về điều này hàng đầu của các con số như chỉ là một mảng. 572 00:26:40,730 --> 00:26:43,590 Chúng tôi chỉ là một chuỗi các mảnh giấy với những con số phía sau họ. 573 00:26:43,590 --> 00:26:47,640 Và mục tiêu của bạn, chỉ sử dụng đầu mảng ở đây, tôi thấy số bảy. 574 00:26:47,640 --> 00:26:51,200 Và chúng tôi sau đó sẽ phê bình làm thế nào bạn đi về làm việc đó. 575 00:26:51,200 --> 00:26:52,920 Tìm chúng tôi biết số bảy, xin vui lòng. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Số 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Nó không phải là một câu hỏi trick. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 Tại thời điểm này điểm số của bạn không phải là rất tốt, vì vậy bạn cũng có thể tiếp tục đi. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Đi đi. 590 00:27:39,802 --> 00:27:42,510 Thành thật mà nói, tôi không thể không tự hỏi bạn đang thậm chí nghĩ về. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Tôi có thể mất từ ​​chỉ hàng đầu. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Chỉ có dòng đầu tiên. 593 00:27:46,240 --> 00:27:47,281 Vì vậy, bạn đã có ba trái. 594 00:27:47,281 --> 00:27:48,310 Vì vậy, tìm thấy tôi 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [TƯỢNG hét ĐỀ XUẤT] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Vì vậy, cả hai đều là những người tuyệt vời vì những lý do rất khác nhau. 599 00:28:26,130 --> 00:28:29,150 Vì vậy, đây là nơi chúng ta rời đi một thời điểm trước đây, 600 00:28:29,150 --> 00:28:32,530 và cái nhìn sâu sắc quan trọng ở đây đã được các cửa ra vào có số lượng 601 00:28:32,530 --> 00:28:37,390 phía sau họ đã được sắp xếp, lý tưởng takeaway cho đó là bạn có thể làm 602 00:28:37,390 --> 00:28:39,670 về cơ bản tốt hơn trong example-- thứ hai này 603 00:28:39,670 --> 00:28:42,380 và, trên thực tế, đó là Sean nỗ lực đầu tiên với số ngẫu nhiên 604 00:28:42,380 --> 00:28:45,460 cũng giống như before-- nhưng ngay sau là những con số được sắp xếp, 605 00:28:45,460 --> 00:28:47,980 giống như danh bạ điện thoại, rõ ràng là những gì bạn có thể làm gì? 606 00:28:47,980 --> 00:28:50,090 Hoặc làm thế nào bạn có thể tận dụng kiến ​​thức đó? 607 00:28:50,090 --> 00:28:51,530 Yeah. 608 00:28:51,530 --> 00:28:54,910 >> TƯỢNG: Bạn đi nửa đường [không nghe được]. 609 00:28:54,910 --> 00:28:55,660 DAVID Malan: Vâng. 610 00:28:55,660 --> 00:28:56,160 Chính xác. 611 00:28:56,160 --> 00:28:59,680 Vì vậy, bản năng ban đầu là Ajay để kiểm tra kết thúc, khi tôi gọi lại, 612 00:28:59,680 --> 00:29:02,320 và sau đó chúng tôi loại thành ví dụ một cách nhanh chóng. 613 00:29:02,320 --> 00:29:05,220 Nhưng nếu chúng ta bắt đầu làm nhiều hơn này có phương pháp theo con đường này, 614 00:29:05,220 --> 00:29:07,860 nhưng bắt đầu có lẽ trong trung bình, bởi vì họ đang sắp xếp, 615 00:29:07,860 --> 00:29:10,900 ngay khi chúng tôi tiết lộ số 16, do đó chúng tôi know-- 616 00:29:10,900 --> 00:29:14,850 và chúng ta hãy thực hiện chính xác that-- chúng tôi Do đó, biết rằng 50, trong trường hợp hiện nay, 617 00:29:14,850 --> 00:29:16,080 đã có được bên phải. 618 00:29:16,080 --> 00:29:18,735 Vì vậy, giống như trong tuần không khi chúng tôi xé cuốn sách điện thoại trong nửa 619 00:29:18,735 --> 00:29:21,490 và ném một nửa số vấn đề đi, cùng một ý tưởng ở đây. 620 00:29:21,490 --> 00:29:23,680 Chúng ta có thể ném một nửa này của vấn đề đi. 621 00:29:23,680 --> 00:29:25,730 Và có lẽ những gì bạn có thể làm thuật toán, 622 00:29:25,730 --> 00:29:28,710 một khi bạn biết rằng 50 phải bên phải, nếu nó bất cứ nơi nào, 623 00:29:28,710 --> 00:29:31,390 là cố gắng ở đó, ở giữa các cánh cửa còn lại. 624 00:29:31,390 --> 00:29:33,450 Tất nhiên, 50 là cao hơn hơn 42, vì vậy chúng tôi có thể 625 00:29:33,450 --> 00:29:36,060 ném này còn lại quý của vấn đề đi, 626 00:29:36,060 --> 00:29:38,510 và cuối cùng là xác định một cái gì đó giống như 50. 627 00:29:38,510 --> 00:29:41,050 Nhưng cũng giống như với danh bạ điện thoại, những con số 628 00:29:41,050 --> 00:29:44,560 đã được ban cho chúng ta đã có trong thứ tự sắp xếp, khiến cho chúng tôi 629 00:29:44,560 --> 00:29:47,450 với câu hỏi, làm thế nào để bạn có được những thứ đi vào trật tự sắp xếp? 630 00:29:47,450 --> 00:29:49,640 Và, thẳng thắn, với giá nào? 631 00:29:49,640 --> 00:29:51,390 Đó là một điều được trao danh bạ điện thoại 632 00:29:51,390 --> 00:29:54,810 và sau đó gây ấn tượng với bạn bè của bạn bằng cách tìm một số điện thoại thực sự nhanh chóng, đúng không? 633 00:29:54,810 --> 00:29:58,520 Xé 32 trang ra để tìm một người trong tổng số 4 tỷ trang, 634 00:29:58,520 --> 00:30:00,470 chúng tôi đã nói là một ví dụ điển hình. 635 00:30:00,470 --> 00:30:03,320 Nhưng bao nhiêu thời gian đã mất Verizon sắp xếp cuốn sách điện thoại? 636 00:30:03,320 --> 00:30:06,170 Bao nhiêu thời gian đã làm nó đưa chúng ta để sắp xếp bảy con số? 637 00:30:06,170 --> 00:30:10,110 Đó là một câu hỏi mà chúng tôi đã cho đến nay hoàn toàn bị bỏ qua. 638 00:30:10,110 --> 00:30:12,330 >> Vì vậy, hãy trả lời câu hỏi này ngay bây giờ. 639 00:30:12,330 --> 00:30:15,920 Và chúng tôi đã hết các bộ phim hiện nay, nhưng chúng tôi có một số quả bóng căng thẳng. 640 00:30:15,920 --> 00:30:19,480 Nếu, nói, tám tình nguyện viên sẽ không nhớ tham gia với chúng tôi ở đây? 641 00:30:19,480 --> 00:30:24,100 Chúng ta hãy đi trước và làm, làm thế nào về bốn người bạn, ba của bạn ở đây? 642 00:30:24,100 --> 00:30:25,290 Nhận được một số gương mặt mới. 643 00:30:25,290 --> 00:30:27,220 Và bốn người bạn đó? 644 00:30:27,220 --> 00:30:30,760 Và now-- chúng ta không thiên vị và here-- thứ tám ở đây vào cuối. 645 00:30:30,760 --> 00:30:32,060 Nào lên. 646 00:30:32,060 --> 00:30:32,560 Tất cả các quyền. 647 00:30:32,560 --> 00:30:37,480 Vì vậy, những gì chúng tôi có ở đây cho mỗi bạn là một con số. 648 00:30:37,480 --> 00:30:40,055 Nếu bạn muốn đi phía trước, đưa con số này. 649 00:30:40,055 --> 00:30:40,763 Tên của bạn là gì? 650 00:30:40,763 --> 00:30:41,950 >> Artie: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID Malan: Artie, được chứ. 652 00:30:43,100 --> 00:30:44,297 Bạn là số 1. 653 00:30:44,297 --> 00:30:45,310 >> Amin: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID Malan: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Bạn là số 2. 657 00:30:47,530 --> 00:30:49,100 Và đi trước, như tôi tay bạn tờ giấy, 658 00:30:49,100 --> 00:30:52,130 dòng hãy tự lập ở phía trước của âm nhạc đứng ở thứ tự như trên đó. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hi, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID Malan: Andy, nó là tốt đẹp để xem bạn. 661 00:30:53,970 --> 00:30:54,520 Số 3. 662 00:30:54,520 --> 00:30:55,310 >> Jacob: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID Malan: Jacob, số 4. 664 00:30:56,760 --> 00:30:57,549 Chào mừng bạn. 665 00:30:57,549 --> 00:30:58,090 CẤP: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID Malan: Grant. 667 00:30:58,881 --> 00:31:00,348 Số 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID Malan: Alanna, số 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID Malan: Frances, số 7. 672 00:31:04,880 --> 00:31:05,200 Và? 673 00:31:05,200 --> 00:31:05,830 >> Rachel: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID Malan: Rachel, số 8. 675 00:31:06,815 --> 00:31:07,100 Tất cả các quyền. 676 00:31:07,100 --> 00:31:08,766 Đi trước và có được cho mình theo thứ tự này. 677 00:31:08,766 --> 00:31:11,440 Hãy để tôi đặt một còn lại âm nhạc đứng tại chỗ. 678 00:31:11,440 --> 00:31:13,670 Nơi nào bạn cần một lập trường? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Đi trước và chỉ cần đặt con số của bạn nơi mà khán giả có thể nhìn thấy chúng trên, 681 00:31:18,710 --> 00:31:20,340 âm nhạc đứng đối mặt với bên ngoài. 682 00:31:20,340 --> 00:31:27,240 Và hy vọng, lần đầu tiên của chúng tôi kiểm tra sự tỉnh táo here-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Chờ một phút. 685 00:31:29,070 --> 00:31:31,140 Chúng tôi không có một 8. 686 00:31:31,140 --> 00:31:35,180 Tôi cần phải đuổi cậu ra khỏi ví dụ bằng cách nào đó. 687 00:31:35,180 --> 00:31:35,680 Số 688 00:31:35,680 --> 00:31:36,940 Không, đó là OK. 689 00:31:36,940 --> 00:31:37,890 Hãy xem. 690 00:31:37,890 --> 00:31:38,880 Chúng ta có thể làm điều này. 691 00:31:38,880 --> 00:31:39,440 Stand by. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Có chúng tôi đi. 694 00:31:45,740 --> 00:31:46,800 Chính xác. 695 00:31:46,800 --> 00:31:47,360 Tất cả các quyền. 696 00:31:47,360 --> 00:31:50,260 Vì vậy, bây giờ chúng tôi có 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Tuyệt vời. 699 00:31:51,360 --> 00:31:54,400 >> Vậy câu hỏi ở bàn tay là, tại những chi phí, và thông qua những phương pháp, 700 00:31:54,400 --> 00:31:58,580 chúng ta có thể thực sự sắp xếp những con số ở đây để chúng tôi có loại có thể làm việc trở về trước, 701 00:31:58,580 --> 00:32:02,759 cuối cùng, và nó thực sự là decide-- ấn tượng, là nó thực sự hiệu quả, 702 00:32:02,759 --> 00:32:04,550 mà tôi có thể phân chia và chinh phục một danh bạ điện thoại? 703 00:32:04,550 --> 00:32:06,716 Là nó thực sự hiệu quả mà Tôi có thể phân chia và chinh phục 704 00:32:06,716 --> 00:32:08,600 những mảnh kỹ thuật số giấy trên bảng, 705 00:32:08,600 --> 00:32:14,500 nếu có thể nó sẽ chi phí cho chúng tôi một tài sản trong thời gian hay năng lượng hoặc chu kỳ CPU 706 00:32:14,500 --> 00:32:17,340 để thực sự có được dữ liệu của chúng tôi vào một số thứ tự sắp xếp? 707 00:32:17,340 --> 00:32:18,930 Vì vậy, hãy hỏi câu hỏi đó. 708 00:32:18,930 --> 00:32:22,077 >> Vì vậy, trước hết, những con số này trong khá nhiều thứ tự ngẫu nhiên, 709 00:32:22,077 --> 00:32:24,160 và tôi sẽ đề xuất một thuật toán, hoặc quá trình 710 00:32:24,160 --> 00:32:25,970 nhờ đó chúng ta có thể sắp xếp những người này. 711 00:32:25,970 --> 00:32:28,100 Tôi sẽ tiếp cận điều này khá ngây thơ. 712 00:32:28,100 --> 00:32:30,730 Và tôi sẽ nhận ra rằng đó là loại rất nhiều đối với tôi 713 00:32:30,730 --> 00:32:32,890 để bọc tâm trí của tôi xung quanh toàn bộ dữ liệu thiết lập cùng một lúc. 714 00:32:32,890 --> 00:32:33,640 Nhưng bạn biết không? 715 00:32:33,640 --> 00:32:37,450 Tôi sẽ làm cho một số sửa chữa biên rất đơn giản. 716 00:32:37,450 --> 00:32:41,152 4 và 2 là ra lệnh, nếu Mục đích là để đi từ 1 đến 8 trên. 717 00:32:41,152 --> 00:32:41,860 Vì vậy, bạn biết gì không? 718 00:32:41,860 --> 00:32:43,776 Tôi sẽ có bạn kẻ trao đổi, nếu bạn chuyển đổi 719 00:32:43,776 --> 00:32:46,380 thể chất và vị trí phần của giấy. 720 00:32:46,380 --> 00:32:47,894 Bây giờ 4 và 6, đây là theo thứ tự. 721 00:32:47,894 --> 00:32:49,060 Tôi sẽ để lại những được. 722 00:32:49,060 --> 00:32:50,227 6 và 8, đó là theo thứ tự. 723 00:32:50,227 --> 00:32:51,185 Sẽ để lại cho họ được. 724 00:32:51,185 --> 00:32:52,170 8 and1, ra lệnh. 725 00:32:52,170 --> 00:32:54,790 Nếu hai bạn sẽ không nhớ trao đổi. 726 00:32:54,790 --> 00:32:57,300 Bây giờ 8 và 3, nếu các bạn có thể trao đổi. 727 00:32:57,300 --> 00:32:59,320 8 và 7, nếu các bạn có thể trao đổi. 728 00:32:59,320 --> 00:33:01,790 Và 8 và 5, nếu các bạn có thể trao đổi. 729 00:33:01,790 --> 00:33:03,980 >> Bây giờ, tôi làm gì? 730 00:33:03,980 --> 00:33:05,200 Không, rõ ràng là không. 731 00:33:05,200 --> 00:33:07,880 Nhưng tôi đã thực hiện các tình hình tốt hơn, phải không? 732 00:33:07,880 --> 00:33:09,430 Tên của bạn là gì nữa, số 8? 733 00:33:09,430 --> 00:33:10,055 >> Rachel: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID Malan: Vì vậy, Rachel có bọt khí hiệu quả lên khá xa, 735 00:33:12,850 --> 00:33:15,660 tất cả các cách để kết thúc mảng của tôi về con số ở đây. 736 00:33:15,660 --> 00:33:17,310 Và vì vậy vấn đề là loại giải quyết. 737 00:33:17,310 --> 00:33:21,670 Bây giờ, rõ ràng, 2 vẫn cần di chuyển một chút, và 4 và 6 và 1. 738 00:33:21,670 --> 00:33:24,420 Nhưng tôi dường như đã nhận được một ít gần gũi hơn với các giải pháp. 739 00:33:24,420 --> 00:33:26,790 Vì vậy, hãy áp dụng điều này cùng phỏng đoán ngây thơ một lần nữa. 740 00:33:26,790 --> 00:33:27,690 2 và 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 và 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 và 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Hãy trao đổi. 744 00:33:32,230 --> 00:33:33,200 6 và 3 mm-mm. 745 00:33:33,200 --> 00:33:34,420 Hãy trao đổi. 746 00:33:34,420 --> 00:33:35,580 6 và 7 là OK. 747 00:33:35,580 --> 00:33:36,590 7 và 5, nope. 748 00:33:36,590 --> 00:33:37,790 Hãy trao đổi. 749 00:33:37,790 --> 00:33:38,470 Và giờ đây, 7 và 8. 750 00:33:38,470 --> 00:33:39,862 Và tên của bạn là gì nữa? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID Malan: Frances. 753 00:33:41,445 --> 00:33:44,230 Vì vậy, bây giờ Frances là dù chỉ là một tốt hơn vị trí, bởi vì bây giờ 7 và 8 754 00:33:44,230 --> 00:33:46,440 đang sôi sục một cách chính xác lên đến đỉnh. 755 00:33:46,440 --> 00:33:47,510 Vì vậy, 2 và 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 và 1, trao đổi cho phép của. 757 00:33:48,720 --> 00:33:50,410 4 và 3, trao đổi cho phép của. 758 00:33:50,410 --> 00:33:51,550 4 và 6, bạn là OK. 759 00:33:51,550 --> 00:33:53,340 6 và 5, trao đổi cho phép của. 760 00:33:53,340 --> 00:33:54,590 Và bây giờ những kẻ là tốt. 761 00:33:54,590 --> 00:33:55,780 Chúng tôi gần như ở đó. 762 00:33:55,780 --> 00:33:57,706 2 và 1, trong trật tự, để trao đổi. 763 00:33:57,706 --> 00:33:59,080 Và bây giờ hãy để tôi làm một kiểm tra sự tỉnh táo. 764 00:33:59,080 --> 00:34:03,080 2 và 3, 3, 4, 4, 5, 5 và 6, 6, 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, vì vậy chúng tôi đang thực hiện. 766 00:34:05,060 --> 00:34:09,310 >> Nhưng còn cái giá đã làm tôi sắp xếp những con số này ở đây? 767 00:34:09,310 --> 00:34:13,960 Vâng, có bao nhiêu bước đã làm tôi có khả năng có khi sắp xếp những người này? 768 00:34:13,960 --> 00:34:15,710 Vâng, chúng tôi sẽ trở lại với câu hỏi đó. 769 00:34:15,710 --> 00:34:18,030 Tuy nhiên, thẳng thắn mà nói, nếu bạn có một chút buồn chán, đó là 770 00:34:18,030 --> 00:34:22,270 loại tiết lộ ở đây không phải có thể là thuật toán hiệu quả nhất. 771 00:34:22,270 --> 00:34:25,230 Và quả thực, thẳng thắn, tôi đổ mồ hôi tất cả các chi tiết đi đi lại lại. 772 00:34:25,230 --> 00:34:26,639 Điều đó đã không cảm thấy đặc biệt hiệu quả. 773 00:34:26,639 --> 00:34:27,805 Vì vậy, hãy thử cái gì khác. 774 00:34:27,805 --> 00:34:31,870 Nếu các bạn có thể thiết lập lại mình để tám giá trị. 775 00:34:31,870 --> 00:34:32,969 Tốt công việc. 776 00:34:32,969 --> 00:34:36,570 >> Chúng ta hãy nhìn kỹ thuật số, chỉ một lúc trước khi chúng tôi cố gắng cái gì khác, 777 00:34:36,570 --> 00:34:38,179 vào những gì vừa xảy ra. 778 00:34:38,179 --> 00:34:41,330 Ở đây, bạn đang về để xem một trực quan của tám con người 779 00:34:41,330 --> 00:34:44,719 trong đó màu xanh và đỏ thanh đại diện cho số. 780 00:34:44,719 --> 00:34:46,670 Các cao thanh, lớn hơn số lượng. 781 00:34:46,670 --> 00:34:48,510 Ngắn hơn thanh, nhỏ hơn số lượng. 782 00:34:48,510 --> 00:34:51,560 Và những gì bạn sẽ thấy là trong thứ tự ngẫu nhiên hơn tám trong số họ. 783 00:34:51,560 --> 00:34:55,830 Bạn sẽ nhìn thấy những thanh việc sắp xếp theo đó cùng một thuật toán, 784 00:34:55,830 --> 00:34:59,890 hoặc thiết lập các hướng dẫn, mà chúng tôi sẽ gọi từ đó bong bóng sắp xếp. 785 00:34:59,890 --> 00:35:04,000 Vì vậy, nhận thấy, mỗi giây hoặc lâu hơn, hai thanh được thắp sáng lên màu đỏ, 786 00:35:04,000 --> 00:35:05,590 đang được so sánh bằng máy tính. 787 00:35:05,590 --> 00:35:08,630 Và sau đó nếu thanh lớn và ít thanh là ra lệnh, 788 00:35:08,630 --> 00:35:11,220 họ đang được trao đổi với tôi. 789 00:35:11,220 --> 00:35:15,120 >> Bây giờ điều này là vô cùng tẻ nhạt xem này, chắc chắn, 790 00:35:15,120 --> 00:35:18,630 cho rất dài, nhưng chú ý takeaway-- thanh lớn di chuyển về bên phải, 791 00:35:18,630 --> 00:35:20,460 quán bar nhỏ di chuyển sang bên trái. 792 00:35:20,460 --> 00:35:23,380 Hãy hủy bỏ quá trình này và tốc độ này lên 793 00:35:23,380 --> 00:35:27,330 để được nhanh hơn nhiều, vì vậy chúng tôi có thể có được một cảm giác cao cấp của những gì, 794 00:35:27,330 --> 00:35:29,970 trên thực tế, bong bóng sắp xếp đang làm. 795 00:35:29,970 --> 00:35:33,150 Thật vậy, nó sủi bọt lên đến phía bên phải của danh sách, 796 00:35:33,150 --> 00:35:35,260 hoặc các mảng, các thanh lớn hơn. 797 00:35:35,260 --> 00:35:40,020 Và ngược lại, các quán bar nhỏ là sủi bọt cách của mình xuống bên trái, 798 00:35:40,020 --> 00:35:42,950 mặc dù với tốc độ nhanh hơn so với trước đây chúng tôi đã làm. 799 00:35:42,950 --> 00:35:45,850 Vì vậy, khó nhìn thấy với con người, nhưng bề ngoài đó là những gì thực sự 800 00:35:45,850 --> 00:35:46,540 đã xảy ra. 801 00:35:46,540 --> 00:35:49,110 >> Nhưng hãy thử một cơ bản cách tiếp cận khác bây giờ. 802 00:35:49,110 --> 00:35:52,387 Hãy thử một khác nhau thuật toán nhờ đó chúng ta có bạn 803 00:35:52,387 --> 00:35:59,640 chàng trai bắt đầu vào những gốc vị trí, đó là thứ tự này ở đây. 804 00:35:59,640 --> 00:36:00,827 Và chúng ta hãy đi trước bây giờ. 805 00:36:00,827 --> 00:36:02,910 Và tôi sẽ làm điều gì đó thậm chí đơn giản, phải không? 806 00:36:02,910 --> 00:36:06,710 Nhìn lại, trao đổi cặp lần nữa và một lần nữa, gần như một chút thông minh. 807 00:36:06,710 --> 00:36:10,460 Hãy làm những việc thậm chí nhiều hơn một cách ngây thơ, mà nếu tôi muốn sắp xếp những người này, 808 00:36:10,460 --> 00:36:12,560 hãy để tôi tiếp tục tìm kiếm cho các phần tử nhỏ nhất. 809 00:36:12,560 --> 00:36:14,570 Vì vậy, ngay bây giờ, 4 là số nhỏ nhất mà tôi đã nhìn thấy. 810 00:36:14,570 --> 00:36:15,695 Tôi sẽ nhớ điều đó. 811 00:36:15,695 --> 00:36:17,750 Không, 2 là tốt hơn, và hãy nhớ rằng. 812 00:36:17,750 --> 00:36:20,730 1 thậm chí còn nhỏ hơn. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 One-- tên của bạn là gì nữa? 816 00:36:23,750 --> 00:36:24,400 >> Artie: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID Malan: Artie. 818 00:36:24,610 --> 00:36:25,460 Vì vậy, Artie, đi trước. 819 00:36:25,460 --> 00:36:27,043 Tôi sẽ kéo bạn ra khỏi đường. 820 00:36:27,043 --> 00:36:28,400 Nếu bạn có thể quay lại đây. 821 00:36:28,400 --> 00:36:30,790 Và tôi cần phải nhường chỗ cho anh. 822 00:36:30,790 --> 00:36:32,040 Chúng tôi có một điểm quyết định ở đây. 823 00:36:32,040 --> 00:36:36,000 Làm thế nào chúng ta có thể nhường chỗ cho Artie đây ở đầu nơi số 1 thuộc về? 824 00:36:36,000 --> 00:36:36,770 >> TƯỢNG: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID Malan: OK, chúng tôi có thể thay đổi tất cả mọi người. 826 00:36:38,950 --> 00:36:40,860 Tuy nhiên, đề xuất việc tối ưu. 827 00:36:40,860 --> 00:36:43,410 Mà cảm thấy một chút khó chịu cho tôi để hỏi bốn người 828 00:36:43,410 --> 00:36:44,620 để di chuyển tất cả các con đường xuống. 829 00:36:44,620 --> 00:36:45,520 Tôi có thể làm gì khác? 830 00:36:45,520 --> 00:36:46,360 >> TƯỢNG: Chuyển chúng. 831 00:36:46,360 --> 00:36:46,850 >> DAVID Malan: Chuyển chúng. 832 00:36:46,850 --> 00:36:47,900 Và tên của bạn là gì nữa? 833 00:36:47,900 --> 00:36:48,441 >> Jacob: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID Malan: Jacob, di chuyển. 835 00:36:50,330 --> 00:36:54,440 Nhiều hiệu quả hơn chỉ để có Địa điểm trao đổi Jacob với Artie, 836 00:36:54,440 --> 00:36:56,710 như trái ngược với buộc tất cả bốn người trong số những người này, 837 00:36:56,710 --> 00:36:58,734 cảm ơn bạn rất nhiều, để vị trí chính xác của họ. 838 00:36:58,734 --> 00:37:01,150 Những gì tốt đẹp về Artie bây giờ, anh ta ở đúng vị trí của mình. 839 00:37:01,150 --> 00:37:02,060 Hãy làm điều này một lần nữa. 840 00:37:02,060 --> 00:37:03,730 2, đó là số lượng nhỏ nhất tôi đã nhìn thấy. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 chắc chắn là nhỏ nhất. 844 00:37:07,467 --> 00:37:08,550 Không cần phải làm bất cứ công việc. 845 00:37:08,550 --> 00:37:09,320 Hãy làm điều đó một lần nữa. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Nhỏ nhất? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Không. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Hãy để tôi nhớ 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Hãy để tôi nhớ 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Số nhỏ nhất mà tôi đã nhìn thấy trên đường chuyền này là 3. 857 00:37:18,490 --> 00:37:20,340 Nếu bạn muốn đi trên ra ngoài. 858 00:37:20,340 --> 00:37:21,986 Chúng ta đi đâu để đưa bạn? 859 00:37:21,986 --> 00:37:22,860 Và tên của bạn là gì? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID Malan: Alanna, chúng tôi sẽ phải đuổi bạn. 862 00:37:25,780 --> 00:37:28,670 Nhưng đó là hiệu quả hơn, chỉ trao đổi hai người, 863 00:37:28,670 --> 00:37:31,850 hơn để có nhiều người thực sự tránh né qua. 864 00:37:31,850 --> 00:37:32,850 Bây giờ chúng ta hãy làm điều này một lần nữa. 865 00:37:32,850 --> 00:37:34,980 Tôi sẽ lựa chọn 4, vì vậy đến ngày ra. 866 00:37:34,980 --> 00:37:36,540 Và ai sẽ di chuyển? 867 00:37:36,540 --> 00:37:37,750 Số 8, tất nhiên. 868 00:37:37,750 --> 00:37:40,260 Nếu bây giờ tôi tìm thấy số 5, đến ngày ra. 869 00:37:40,260 --> 00:37:42,104 Số 8 sẽ được đuổi ra khỏi nhà một lần nữa. 870 00:37:42,104 --> 00:37:43,770 Tôi bây giờ sẽ tìm thấy số 6 tại chỗ. 871 00:37:43,770 --> 00:37:44,410 7 tại chỗ. 872 00:37:44,410 --> 00:37:45,080 8 tại chỗ. 873 00:37:45,080 --> 00:37:48,590 >> Những gì chúng ta chỉ cần làm bây giờ là một cái gì đó gọi là lựa chọn sắp xếp, 874 00:37:48,590 --> 00:37:52,560 và nếu chúng ta hình dung này, nó sẽ cảm thấy một chút khác nhau. 875 00:37:52,560 --> 00:37:56,800 Chúng ta hãy đi trước và từ này đơn ở đây, visualization-- này 876 00:37:56,800 --> 00:38:02,920 hãy thay đổi này đối với: come on, Firefox. 877 00:38:02,920 --> 00:38:07,610 Hãy thay đổi điều này để lựa chọn sắp xếp. 878 00:38:07,610 --> 00:38:11,830 Và chúng ta hãy tốc độ nó lên như trước, và bắt đầu hình dung bây giờ. 879 00:38:11,830 --> 00:38:13,990 Và thuật toán này có một cảm giác khác nhau cho nó. 880 00:38:13,990 --> 00:38:16,480 Trên mỗi lần lặp, thẳng thắn, nó thậm chí còn đơn giản hơn. 881 00:38:16,480 --> 00:38:18,385 Tôi chỉ lựa chọn phần tử nhỏ nhất. 882 00:38:18,385 --> 00:38:21,510 Bây giờ, thẳng thắn mà nói, tôi có một chút may mắn thời gian, trong đó nó được sắp xếp siêu nhanh. 883 00:38:21,510 --> 00:38:22,660 Các yếu tố là ngẫu nhiên. 884 00:38:22,660 --> 00:38:25,520 Đó không phải là, như chúng ta sẽ thấy cuối cùng thấy, về cơ bản nhanh hơn. 885 00:38:25,520 --> 00:38:29,400 Nhưng chúng ta hãy xem một phần ba và cuối cùng tiếp cận ở đây như những gì đang xảy ra. 886 00:38:29,400 --> 00:38:36,230 Vì vậy, chúng ta hãy đi trước và thiết lập lại các bạn một lần cuối cùng để được theo thứ tự sau đây. 887 00:38:36,230 --> 00:38:38,450 >> Và bây giờ, tôi sẽ được nhiều hơn một chút thông minh, 888 00:38:38,450 --> 00:38:40,220 chỉ để vòng ra thuật toán của chúng tôi. 889 00:38:40,220 --> 00:38:41,230 Tôi sẽ làm điều này. 890 00:38:41,230 --> 00:38:43,140 Tôi sẽ không đi qua lại rất nhiều. 891 00:38:43,140 --> 00:38:44,900 Thành thật mà nói, tôi cảm thấy mệt mỏi tất cả traversing này. 892 00:38:44,900 --> 00:38:47,691 Tôi chỉ sẽ mất những gì tôi đưa ra ở đầu danh sách, 893 00:38:47,691 --> 00:38:49,460 và tôi sẽ sắp xếp mà sau đó và ở đó. 894 00:38:49,460 --> 00:38:50,140 Vì vậy, ở đây chúng tôi đang có. 895 00:38:50,140 --> 00:38:51,030 Số 4. 896 00:38:51,030 --> 00:38:53,680 Tôi sẽ chèn số 4 vào một danh sách được sắp xếp. 897 00:38:53,680 --> 00:38:54,180 Xong. 898 00:38:54,180 --> 00:38:58,300 Tôi tuyên bố bây giờ, và chỉ để làm cho hơn này rõ ràng, một phần của danh sách của tôi được sắp xếp. 899 00:38:58,300 --> 00:39:02,610 Đó là loại một yêu cầu ngu ngốc, nhưng thực sự 4 được sắp xếp theo một danh sách các kích thước một. 900 00:39:02,610 --> 00:39:04,210 Bây giờ, tôi sẽ đưa vào số 2. 901 00:39:04,210 --> 00:39:07,670 Số 2 giờ tôi sẽ chèn vào đúng nơi. 902 00:39:07,670 --> 00:39:08,680 Vì vậy, nơi không thuộc về 2? 903 00:39:08,680 --> 00:39:09,824 Rõ ràng, ở đây. 904 00:39:09,824 --> 00:39:11,490 Vì vậy, đi trước và di chuyển trở lại, nếu bạn có thể. 905 00:39:11,490 --> 00:39:14,406 Và tại sao cậu không chỉ mất âm nhạc của bạn đứng với bạn lúc này. 906 00:39:14,406 --> 00:39:17,020 Và chúng ta buộc phải chèn bạn vào đầu danh sách. 907 00:39:17,020 --> 00:39:17,936 Vì vậy, một công việc ít hơn. 908 00:39:17,936 --> 00:39:20,890 Tôi đã phải di chuyển Jacob xung quanh, và tên của bạn là gì? 909 00:39:20,890 --> 00:39:21,420 >> Amin: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID Malan: Amin. 911 00:39:22,270 --> 00:39:24,350 Nhưng ít nhất tôi đã không đi qua lại. 912 00:39:24,350 --> 00:39:25,739 Tôi chỉ lấy những thứ như tôi đi. 913 00:39:25,739 --> 00:39:27,530 Tôi chỉ chèn chúng ở đúng nơi. 914 00:39:27,530 --> 00:39:29,220 6, điều này thực sự là khá dễ dàng. 915 00:39:29,220 --> 00:39:31,510 Hãy chèn bạn ở đó, nếu bạn chỉ muốn di chuyển trên một chút. 916 00:39:31,510 --> 00:39:32,870 Số 8, cũng khá dễ dàng. 917 00:39:32,870 --> 00:39:33,741 Ngay ở đó. 918 00:39:33,741 --> 00:39:34,240 Chết tiệt. 919 00:39:34,240 --> 00:39:37,590 Số 1, chúng tôi không thể chỉ trao đổi với Amin ở đây, 920 00:39:37,590 --> 00:39:39,340 vì đó là sẽ để gây rối trật tự. 921 00:39:39,340 --> 00:39:40,660 Vì vậy, chúng ta phải thêm một chút thông minh. 922 00:39:40,660 --> 00:39:42,770 Vì vậy, Artie, nếu bạn có thể sao lưu cho một thời điểm. 923 00:39:42,770 --> 00:39:46,550 Chúng ta hãy đi trước và thay đổi bây giờ, không giống như các thuật toán trước đó của chúng tôi, 924 00:39:46,550 --> 00:39:50,910 để nhường chỗ cho Artie ngay lúc đầu. 925 00:39:50,910 --> 00:39:54,690 Vì vậy, vào cuối ngày, tôi là loại làm những gì tôi muốn tránh trước. 926 00:39:54,690 --> 00:39:57,770 Và như vậy thuật toán của tôi là loại của đảo ngược, trí tuệ, 927 00:39:57,770 --> 00:39:59,070 từ những gì nó ban đầu được. 928 00:39:59,070 --> 00:40:01,240 Tôi chỉ làm việc chuyển đổi tại một điểm khác nhau. 929 00:40:01,240 --> 00:40:02,291 Bây giờ tôi đang ở 3. 930 00:40:02,291 --> 00:40:02,790 Oh, chết tiệt. 931 00:40:02,790 --> 00:40:04,039 Chúng tôi phải làm việc nhiều hơn nữa. 932 00:40:04,039 --> 00:40:05,060 Vì vậy, hãy đẩy bạn ra ngoài. 933 00:40:05,060 --> 00:40:09,360 Hãy di chuyển 8, 6, 4-- oh oh-- và 3 sẽ đi ngay. 934 00:40:09,360 --> 00:40:11,490 Vì vậy, tại tiết kiệm chút ít nhất là thời gian này. 935 00:40:11,490 --> 00:40:13,100 7, không quá nhiều việc phải làm. 936 00:40:13,100 --> 00:40:15,370 Vì vậy, nếu bạn muốn bật trở lại, chúng ta hãy chèn bạn. 937 00:40:15,370 --> 00:40:17,440 Và cuối cùng, 5, nếu bạn muốn bật trở lại, chúng tôi 938 00:40:17,440 --> 00:40:22,610 cần phải thay đổi bạn, bạn, bạn, cho đến khi năm được đặt ra. 939 00:40:22,610 --> 00:40:25,670 >> Vì vậy, bây giờ thấy điều này tại một đồ họa cao cấp, 940 00:40:25,670 --> 00:40:31,080 chúng ta hãy làm thuật toán này hình dung một thời gian bổ sung. 941 00:40:31,080 --> 00:40:33,580 Vì vậy, chúng tôi sẽ gọi này sắp xếp chèn. 942 00:40:33,580 --> 00:40:37,700 Chúng tôi sẽ chạy nó cũng giống như nhanh chóng, và bắt đầu nó ở đây. 943 00:40:37,700 --> 00:40:39,580 Và nó cũng có một cảm giác khác nhau. 944 00:40:39,580 --> 00:40:42,180 Đó là loại được tốt hơn và tốt hơn, nhưng nó không bao giờ hoàn hảo 945 00:40:42,180 --> 00:40:44,630 cho đến khi tôi đi vào và trơn tru trong những khoảng trống. 946 00:40:44,630 --> 00:40:47,860 Bởi vì, một lần nữa, tôi chỉ lấy những gì Tôi được đưa ra từ trái sang phải. 947 00:40:47,860 --> 00:40:50,350 Vì vậy, tôi đã không nhận được may mắn như vậy rằng tất cả mọi thứ đã được hoàn hảo. 948 00:40:50,350 --> 00:40:54,190 Đó là lý do tại sao chúng tôi đã có những chút mispositions mà chúng ta cố định theo thời gian. 949 00:40:54,190 --> 00:40:58,890 >> Vì vậy, tất cả các thuật toán có vẻ chạy ở những tốc độ hơi khác nhau. 950 00:40:58,890 --> 00:41:02,030 Trong thực tế, bạn có thể nói là tốt nhất hoặc nhanh nhất cho đến nay? 951 00:41:02,030 --> 00:41:03,450 Sắp xếp nổi bọt, là người đầu tiên? 952 00:41:03,450 --> 00:41:05,000 Loại lựa chọn, thứ hai? 953 00:41:05,000 --> 00:41:08,450 Loại chèn, thứ ba? 954 00:41:08,450 --> 00:41:10,710 Tôi nghe một số loại lựa chọn. 955 00:41:10,710 --> 00:41:13,280 Suy nghĩ khác? 956 00:41:13,280 --> 00:41:16,880 >> Vì vậy, nó chỉ ra rằng tất cả các thuật toán 957 00:41:16,880 --> 00:41:22,400 về cơ bản cũng giống như hiệu quả như mỗi other-- hoặc ngược lại, cũng giống như 958 00:41:22,400 --> 00:41:25,980 không hiệu quả như nhau, bởi vì chúng tôi có thể làm cơ bản 959 00:41:25,980 --> 00:41:28,120 tốt hơn so với cả ba của các thuật toán. 960 00:41:28,120 --> 00:41:29,990 Và đó là một chút của một lời nói dối trắng. 961 00:41:29,990 --> 00:41:32,580 khi tôi nói như hiệu quả hoặc là không hiệu quả, 962 00:41:32,580 --> 00:41:35,040 đó là ít nhất là cho giá trị siêu lớn của n. 963 00:41:35,040 --> 00:41:38,450 Khi chúng ta chỉ có tám người dân ở đây, hoặc có thể 50 hoặc hơn thanh trên màn hình, 964 00:41:38,450 --> 00:41:41,645 bạn sẽ nhận thấy sự khác biệt hoàn toàn giữa ba thuật toán. 965 00:41:41,645 --> 00:41:44,020 Nhưng khi n, số lượng người, hoặc số lượng các số, 966 00:41:44,020 --> 00:41:46,350 hoặc số lượng người trong điện thoại cuốn sách, hoặc số lượng các trang web 967 00:41:46,350 --> 00:41:48,230 trong cơ sở dữ liệu của Google được lớn hơn và lớn hơn, 968 00:41:48,230 --> 00:41:51,650 chúng ta sẽ thấy rằng tất cả ba trong số này thuật toán là thực sự khá nghèo. 969 00:41:51,650 --> 00:41:54,060 Và chúng tôi có thể làm cơ bản tốt hơn thế. 970 00:41:54,060 --> 00:41:56,830 >> Chúng ta hãy có một cái nhìn, cuối cùng, vào những gì các thuật toán might 971 00:41:56,830 --> 00:41:59,520 âm thanh như trong bối cảnh của một vài người khác 972 00:41:59,520 --> 00:42:03,550 cũng bằng cách này hình dung đây 973 00:42:03,550 --> 00:42:06,860 sẽ giới thiệu chúng tôi với một số thuật toán. 974 00:42:06,860 --> 00:42:10,330 Chúng ta hãy đi trước và chúc mừng tham gia của chúng tôi ở đây, tất cả đều 975 00:42:10,330 --> 00:42:11,690 sắp xếp bản thân rất tốt. 976 00:42:11,690 --> 00:42:15,124 Nếu bạn muốn có một món quà chia tay. 977 00:42:15,124 --> 00:42:16,540 Bạn có thể giữ số của bạn. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Và những gì bạn sẽ thấy, hay đúng hơn là nghe, bây giờ, 980 00:42:22,520 --> 00:42:25,710 là khi chúng tôi đặt âm thanh để mỗi người trong các quán bar 981 00:42:25,710 --> 00:42:28,660 và kết hợp nó với các phần mềm, tần số khác nhau của âm thanh, 982 00:42:28,660 --> 00:42:33,970 bạn có thể bọc tâm trí nhiều audioly của bạn xung quanh những gì mỗi người trong số những điều này 983 00:42:33,970 --> 00:42:34,470 như thế nào. 984 00:42:34,470 --> 00:42:39,325 Là người đầu tiên trong số đó là sắp xếp chèn 985 00:42:39,325 --> 00:42:44,275 >> [Nhạc] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Đây là bong bóng sắp xếp. 988 00:42:49,720 --> 00:42:54,175 >> [Nhạc] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Loại lựa chọn. 991 00:43:18,222 --> 00:43:22,596 >> [Nhạc] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Một cái gì đó gọi là sắp xếp hợp nhất. 994 00:43:35,150 --> 00:43:38,140 >> [Nhạc] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Loại Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [Nhạc] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Đó là nó cho CS50. 1000 00:44:09,430 --> 00:44:13,360 Chúng ta sẽ thấy bạn vào ngày thứ Tư. 1001 00:44:13,360 --> 00:44:16,671 >> Người kể chuyện: Và bây giờ, "Deep Suy nghĩ "của Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Tại sao nó là một vòng lặp? 1004 00:44:21,590 --> 00:44:23,200 Tại sao không làm cho nó tốt hơn? 1005 00:44:23,200 --> 00:44:25,970 Tôi muốn tạo ra một vòng lặp năm. 1006 00:44:25,970 --> 00:44:28,720 >> [Cười]