1 00:00:00,000 --> 00:00:08,532 >> [MUSIC CHƠI] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: Điều đầu tiên bạn có thể thông báo về tìm là chúng ta đã 3 00:00:12,060 --> 00:00:13,450 có mã viết cho chúng ta. 4 00:00:13,450 --> 00:00:15,160 Này được gọi là đang phân phối. 5 00:00:15,160 --> 00:00:18,000 Vì vậy, chúng tôi không chỉ viết riêng của chúng tôi mã từ đầu nữa. 6 00:00:18,000 --> 00:00:22,800 Thay vào đó, chúng ta điền vào các khoảng trống ở một số mã đã có từ trước. 7 00:00:22,800 --> 00:00:27,790 >> Chương trình sẽ nhắc cho find.c số để điền vào các đống cỏ khô, tìm kiếm các 8 00:00:27,790 --> 00:00:32,189 đống cỏ khô cho một người dùng gửi kim, và nó thực hiện điều này bằng cách gọi loại và 9 00:00:32,189 --> 00:00:35,590 tìm kiếm, chức năng xác định trong helpers.c. 10 00:00:35,590 --> 00:00:37,670 Vì vậy, find.c được viết rồi. 11 00:00:37,670 --> 00:00:40,770 Công việc của bạn là viết những người giúp đỡ. 12 00:00:40,770 --> 00:00:41,870 >> Vì vậy, những gì chúng ta làm gì? 13 00:00:41,870 --> 00:00:44,210 Chúng tôi đang thực hiện hai chức năng. 14 00:00:44,210 --> 00:00:49,030 Tìm kiếm, trả về đúng nếu một giá trị được tìm thấy trong đống cỏ khô, trở về 15 00:00:49,030 --> 00:00:51,370 sai nếu giá trị là không trong đống cỏ khô. 16 00:00:51,370 --> 00:00:57,990 Và sau đó chúng tôi cũng đang thực hiện loại mà sắp xếp các mảng được gọi là giá trị. 17 00:00:57,990 --> 00:00:59,960 >> Vì vậy, hãy giải quyết tìm kiếm. 18 00:00:59,960 --> 00:01:04,560 Tìm kiếm hiện đang được thực hiện như một tìm kiếm tuyến tính, nhưng bạn có thể làm nhiều 19 00:01:04,560 --> 00:01:05,550 tốt hơn. 20 00:01:05,550 --> 00:01:09,910 Tìm kiếm tuyến tính được thực hiện trong O n thời gian, mà là khá chậm. 21 00:01:09,910 --> 00:01:13,850 Mặc dù, nó có thể tìm kiếm bất kỳ danh sách cho nó. 22 00:01:13,850 --> 00:01:20,130 Công việc của bạn là để thực hiện tìm kiếm nhị phân, đã chạy thời gian O của log n. 23 00:01:20,130 --> 00:01:21,130 Đó là khá nhanh. 24 00:01:21,130 --> 00:01:23,170 >> Nhưng có một quy định. 25 00:01:23,170 --> 00:01:27,600 Tìm kiếm nhị phân chỉ có thể tìm kiếm thông qua danh sách được sắp xếp trước. 26 00:01:27,600 --> 00:01:30,370 Tại sao vậy? 27 00:01:30,370 --> 00:01:32,620 >> Vâng chúng ta hãy xem một ví dụ. 28 00:01:32,620 --> 00:01:36,280 Đưa ra một mảng các giá trị, các đống cỏ khô, chúng ta sẽ được tìm kiếm 29 00:01:36,280 --> 00:01:37,130 cho một cây kim. 30 00:01:37,130 --> 00:01:40,460 Và trong ví dụ này, số nguyên ba. 31 00:01:40,460 --> 00:01:44,130 Cách mà tìm kiếm nhị phân hoạt động là chúng ta so sánh giá trị giữa 32 00:01:44,130 --> 00:01:48,370 các mảng kim, nhiều như thế nào chúng tôi đã mở một danh bạ vào giữa 33 00:01:48,370 --> 00:01:50,660 trang trong tuần không. 34 00:01:50,660 --> 00:01:54,650 >> Vì vậy, sau khi so sánh giá trị giữa để kim, bạn có thể loại bỏ một trong hai 35 00:01:54,650 --> 00:01:58,530 trái hoặc nửa bên phải của mảng bằng cách thắt chặt giới hạn của bạn. 36 00:01:58,530 --> 00:02:03,390 Trong trường hợp này, kể từ khi ba, kim của chúng tôi, là ít hơn 10, giá trị giữa, 37 00:02:03,390 --> 00:02:05,990 đúng ràng buộc có thể giảm. 38 00:02:05,990 --> 00:02:08,400 Nhưng cố gắng làm cho giới hạn của bạn như chặt chẽ nhất có thể. 39 00:02:08,400 --> 00:02:11,630 Nếu giá trị trung không phải là kim, sau đó bạn biết rằng bạn không cần phải 40 00:02:11,630 --> 00:02:13,010 bao gồm nó trong tìm kiếm của bạn. 41 00:02:13,010 --> 00:02:17,310 Vì vậy, bạn đang phải ràng buộc có thể thắt chặt giới hạn tìm kiếm nhiều hơn một chút xíu, 42 00:02:17,310 --> 00:02:21,770 vv và vv cho đến khi bạn tìm thấy kim của bạn. 43 00:02:21,770 --> 00:02:23,480 >> Vì vậy, những gì hiện các giả như thế nào? 44 00:02:23,480 --> 00:02:28,420 Tốt trong khi chúng tôi vẫn đang tìm kiếm thông qua danh sách và vẫn còn có các yếu tố để 45 00:02:28,420 --> 00:02:33,690 nhìn vào, chúng ta giữa của danh sách, và so sánh với giá trị trung bình đến 46 00:02:33,690 --> 00:02:34,950 kim của chúng tôi. 47 00:02:34,950 --> 00:02:37,310 Nếu chúng bằng nhau, thì có nghĩa là chúng tôi đã tìm thấy kim và chúng ta có thể 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Nếu không, nếu kim nhỏ hơn giá trị trung bình, sau đó có nghĩa là chúng tôi 50 00:02:42,870 --> 00:02:47,280 có thể loại bỏ nửa bên phải, và chỉ tìm kiếm bên trái của mảng. 51 00:02:47,280 --> 00:02:51,090 Nếu không, chúng tôi sẽ tìm kiếm phía bên phải của mảng. 52 00:02:51,090 --> 00:02:54,410 Và cuối cùng, nếu bạn không có bất kỳ nhiều yếu tố còn lại để tìm kiếm nhưng bạn 53 00:02:54,410 --> 00:02:58,050 đã không tìm thấy kim của bạn chưa, sau đó bạn return false vì kim 54 00:02:58,050 --> 00:03:01,890 chắc chắn không phải là trong đống cỏ khô. 55 00:03:01,890 --> 00:03:05,270 >> Bây giờ là một điều thú giả này trong tìm kiếm nhị phân là nó có thể được 56 00:03:05,270 --> 00:03:09,940 giải thích hoặc như một lặp đi lặp lại hoặc thực hiện đệ quy. 57 00:03:09,940 --> 00:03:13,810 Vì vậy, nó sẽ là đệ quy nếu bạn gọi chức năng tìm kiếm trong tìm kiếm 58 00:03:13,810 --> 00:03:17,350 hoạt động ở hai nửa của mảng. 59 00:03:17,350 --> 00:03:21,030 Chúng tôi sẽ giới thiệu đệ quy một chút sau này trong Tất nhiên, nhưng tôi biết rằng nó là một 60 00:03:21,030 --> 00:03:24,190 lựa chọn nếu bạn muốn thử. 61 00:03:24,190 --> 00:03:26,030 >> Bây giờ chúng ta hãy nhìn vào loại. 62 00:03:26,030 --> 00:03:30,750 Loại có một mảng và các số nguyên n, mà là kích thước của mảng. 63 00:03:30,750 --> 00:03:34,030 Hiện nay có nhiều loại khác nhau của các loại, và bạn có thể xem xét một số 64 00:03:34,030 --> 00:03:36,370 quần short cho trình diễn và giải thích. 65 00:03:36,370 --> 00:03:39,580 Kiểu trả về cho chúng tôi chức năng sắp xếp có hiệu lực. 66 00:03:39,580 --> 00:03:43,580 Vì vậy, đó có nghĩa là chúng tôi sẽ không trở về mảng bất kỳ từ loại. 67 00:03:43,580 --> 00:03:48,140 Chúng tôi đang thực sự sẽ thay đổi rất mảng đã được thông qua vào chúng tôi. 68 00:03:48,140 --> 00:03:52,290 >> Và đó là có thể bởi vì mảng là thông qua tham khảo trong C. Bây giờ chúng ta sẽ 69 00:03:52,290 --> 00:03:55,290 xem thêm về điều này sau, nhưng sự khác nhau giữa đi qua 70 00:03:55,290 --> 00:03:59,340 trong một cái gì đó giống như một số nguyên và đi qua trong một mảng, là khi bạn 71 00:03:59,340 --> 00:04:03,490 vượt qua trong một số nguyên, C là chỉ cần đi để tạo một bản sao của số nguyên đó và vượt qua 72 00:04:03,490 --> 00:04:04,450 nó để chức năng. 73 00:04:04,450 --> 00:04:08,530 Biến ban đầu sẽ không thay đổi một khi chức năng được hoàn tất. 74 00:04:08,530 --> 00:04:12,480 Với một mảng, mặt khác, nó sẽ không làm cho một bản sao, và bạn sẽ 75 00:04:12,480 --> 00:04:17,910 thực sự được chỉnh sửa rất mảng chính nó. 76 00:04:17,910 --> 00:04:21,269 >> Vì vậy, một loại loại là các loại lựa chọn. 77 00:04:21,269 --> 00:04:24,750 Việc lựa chọn loại hoạt động bằng cách bắt đầu từ đầu, và sau đó bạn lặp 78 00:04:24,750 --> 00:04:26,820 hơn và tìm thấy những yếu tố nhỏ nhất. 79 00:04:26,820 --> 00:04:30,710 Và sau đó bạn thay đổi đó nhỏ nhất phần tử với các đầu tiên. 80 00:04:30,710 --> 00:04:34,360 Và sau đó bạn di chuyển đến phần tử thứ hai , Tìm nhỏ nhất tiếp theo 81 00:04:34,360 --> 00:04:38,320 yếu tố, và sau đó trao đổi rằng với sự Yếu tố thứ hai trong mảng bởi vì 82 00:04:38,320 --> 00:04:41,100 phần tử đầu tiên đã được sắp xếp. 83 00:04:41,100 --> 00:04:45,370 Và như vậy thì bạn tiếp tục cho mỗi yếu tố trong việc xác định nhỏ nhất 84 00:04:45,370 --> 00:04:47,690 giá trị và trao đổi nó ra. 85 00:04:47,690 --> 00:04:53,460 >> Đối với tôi bằng 0, yếu tố đầu tiên n trừ đi 1, bạn sẽ so sánh 86 00:04:53,460 --> 00:04:57,820 mỗi giá trị tiếp theo sau đó và tìm thấy chỉ số của các giá trị tối thiểu. 87 00:04:57,820 --> 00:05:02,520 Một khi bạn tìm thấy chỉ số giá trị tối thiểu, bạn có thể trao đổi có giá trị của mảng 88 00:05:02,520 --> 00:05:05,930 tối thiểu và mảng I. 89 00:05:05,930 --> 00:05:09,760 >> Một loại loại mà bạn có thể thực hiện là bong bóng sắp xếp. 90 00:05:09,760 --> 00:05:14,380 Vì vậy, lặp đi lặp lại bong bóng sắp xếp trên danh sách so sánh các yếu tố lân cận và 91 00:05:14,380 --> 00:05:17,720 trao đổi các yếu tố là theo thứ tự sai. 92 00:05:17,720 --> 00:05:22,380 Và theo cách này, yếu tố lớn nhất sẽ bong bóng để kết thúc. 93 00:05:22,380 --> 00:05:28,070 Và danh sách được sắp xếp một lần nữa yếu tố đã được đổi chỗ. 94 00:05:28,070 --> 00:05:31,920 >> Vì vậy, đó là hai ví dụ về các loại các thuật toán mà bạn có thể thực hiện cho 95 00:05:31,920 --> 00:05:33,230 chương trình tìm. 96 00:05:33,230 --> 00:05:37,350 Một khi bạn hoàn thành sắp xếp, và bạn đã thực hiện tìm kiếm, bạn đã hoàn tất. 97 00:05:37,350 --> 00:05:39,720 Tên tôi là Zamyla, và đây là CS50. 98 00:05:39,720 --> 00:05:46,987 >> [MUSIC CHƠI]