>> JASON Hirschhorn: Chào mừng với tuần ba, tất cả mọi người.
Chúng tôi có một bận rộn nhưng thú vị phần phía trước chúng ta.
Vì vậy, đầu tiên, bởi vì chúng tôi đã thực hiện một số Headway với khóa học nhưng chúng tôi vẫn
đã rất nhiều học tập còn lại để làm, tôi sẽ cho các bạn thấy một số tài nguyên
mà phải chứng minh được vô cùng hữu ích khi bạn không chỉ tiếp cận của bạn
vấn đề đặt ra, nhưng cũng tiêu hóa tất cả các tài liệu chúng tôi cung cấp cho các bạn trong
bài giảng và quần short và phần.
>> Sau đó chúng ta sẽ dành 20 đầu tiên 25 phút của phần đi qua
GDB, mà bạn có thể có hoặc không có sử dụng vào thời điểm này, nhưng nó là một
công cụ vô cùng hữu ích đó sẽ giúp bạn gỡ lỗi chương trình của bạn.
Rất nhiều bạn có thể đã sử dụng printf trong giữa chương trình của bạn để tìm
ra những gì một biến tương đương.
GDB thậm chí còn tốt hơn so với printf và không vít lên mã của bạn bởi vì bạn
chạy nó trên một tập tin thực thi.
Vì vậy, chúng ta sẽ đi qua 10 hữu ích nhất lệnh bạn cần cho GDB, và chúng tôi
sẽ đi vào một bài tập với nhau để trong vấn đề thiết lập ba và hơn thế nữa, bạn
có thể sử dụng GDB để giúp gỡ rối chương trình của bạn.
Và cuối cùng, chúng ta sẽ đi qua một số phân loại và tìm kiếm các thuật toán
mà bạn đã thấy trong bài giảng, và chúng tôi sẽ thực sự mã, không chỉ
giả, nhưng mã tìm kiếm nhị phân, bong bóng sắp xếp, lựa chọn và phân loại.
>> Vì vậy, đầu tiên, tôi muốn đi hơn các nguồn tài nguyên.
Đây là một danh sách đầy đủ, và nó phông chữ nhỏ hơn bởi vì tôi đã có rất nhiều để
phù hợp trên đây.
Nhưng chúng sẽ không chỉ giúp bạn, một lần nữa, với các bộ vấn đề và
tiêu hóa thông tin mà bạn đã học được, nhưng chắc chắn, đến thời điểm bài kiểm tra, chúng sẽ
là vô cùng hữu ích.
Vì vậy, đầu tiên, các bài giảng ghi nhận.
Nếu bạn đi đến cs50.net/lectures và di chuyển đến tuần và ngày cụ thể,
bạn sẽ thấy rằng có những ghi chú cho mỗi giảng dạy, trong đó không chỉ đơn giản là một
bảng điểm, nhưng một phiên bản chỉnh sửa của những gì đã được đề cập trong bài giảng với mã
đoạn và mẩu tin hữu ích khác.
Tôi khuyên bạn nên đi qua những người.
Và sau đó là tốt, có mã nguồn có sẵn từ mỗi bài giảng.
Và một lần nữa, các trang trình bày cũng sẽ được có sẵn trực tuyến tại cs50.net/sections
tối nay.
>> Vì vậy, thứ hai là quần short mỗi tuần chủ đề trang bìa, thường 5-15
phút trong chiều dài.
Và những hy vọng sẽ cung cấp cho bạn một mồi lớn về các chủ đề khác nhau.
Thứ ba -
và đây là thương hiệu này mới năm - là study.cs50.net.
Nếu bạn đã không kiểm tra nó ra, tôi khuyên bạn nên làm như vậy.
Bạn có thể chọn một chủ đề.
Chúng tôi có hàng chục chủ đề trên đó.
Vì vậy, ví dụ, bạn chọn chức năng.
Nó cung cấp cho bạn một số slide và ghi chú về chức năng.
Đó là thực sự các slide mà TF được khuyến khích sử dụng trong thời gian của chúng tôi
trình bày trong phần.
Ngoài ra còn có lời khuyên và thủ thuật để đối phó với các chức năng, và có
vấn đề thực tế có thể trợ giúp bạn làm việc với các chức năng.
Chúng tôi cũng cung cấp cho bạn các liên kết đến ngắn trên chức năng và thời gian có chức năng
đã đưa ra trong bài giảng.
Vì vậy, study.cs50.net, thương hiệu mới này năm, một nguồn tài nguyên tuyệt vời.
>> Tiếp theo, tôi có người đàn ông, đó là hướng dẫn lệnh mà bạn có thể chạy ở
dòng lệnh.
Vì vậy, nếu bạn có bất kỳ câu hỏi về một lệnh, ví dụ, rand, mà chúng tôi
gặp tuần trước trong phần và bạn đã có thể gặp phải trong
vấn đề của bạn thiết lập khi đi qua tạo ra các mã, nhưng nếu bạn gõ người đàn ông
rand, bạn sẽ có được những trang đó cho tất cả các bạn về rand.
Nó mang lại cho bạn những gì nó cần, các các thông số cần, cũng như trở lại
loại và mô tả ngắn gọn của chức năng đó.
>> Vì vậy, kiểm tra rand.
Nó có thể là một chút dài dòng và khó hiểu, vì vậy đôi khi tôi thấy rằng
chỉ đơn giản là Googling những gì tôi muốn biết là cách tốt nhất để tìm câu trả lời.
Vì vậy, thực hành với Google.
Nhận giải tại Google.
Nó sẽ trở thành người bạn tốt nhất của bạn.
>> Cũng như Google, nếu bạn không thể tìm thấy nó trên Google, cs50.net/discuss, đó là
các diễn đàn thảo luận.
Rất có thể là nếu bạn có một câu hỏi, một 700 + đồng nghiệp của bạn cũng có mà
câu hỏi và có thể đã yêu cầu nó đã có trong thảo luận
diễn đàn và đã trả lời nó.
Vì vậy, nếu bạn có một câu hỏi chung hoặc bạn có một câu hỏi mà bạn nghĩ
có lẽ những người khác có thể đã chạy vào, kiểm tra cs50.net/discuss.
>> Cuối cùng, cuối cùng hai, nếu bạn muốn nói chuyện với một con người thực sự hạnh phúc, văn phòng
giờ từ thứ Hai đến thứ Sáu.
Ngoài ra còn có giờ văn phòng trực tuyến cho sinh viên mở rộng.
Và cuối cùng nhưng chắc chắn không kém, tôi, dấu chấm than.
Tất cả các bạn có thông tin liên lạc của tôi.
Nếu bạn cần bất cứ điều gì, xin vui lòng không bao giờ ngần ngại liên hệ với tôi.
Luôn luôn cảm thấy tự do để làm như vậy.
Rất ít bạn đã thêm tôi trên Gchat, do đó đã gây thất vọng,
nhưng hy vọng rằng sẽ thay đổi giữa này và phần tiếp theo.
Bất kỳ câu hỏi cho đến nay trên các nguồn tài nguyên?
Tuyệt vời.
>> Cuối cùng, một phích cắm cho thông tin phản hồi, sayat.me/cs50.
Bạn có thể cho tôi thông tin phản hồi vô danh làm thế nào tôi đang làm.
Đó là thực sự hữu ích trong tuần trước.
Tôi có một vài ý kiến ​​từ các bạn ngay sau khi phần, cộng với từ
sinh viên khác, những người đã xem nó trong tuần, và nó
là vô cùng hữu ích.
Tôi sẽ cố gắng hạn chế sử dụng của tôi từ "ngọt ngào", nhưng tôi sẽ chỉ cho tôi
sự nhiệt tình và hứng thú theo những cách khác.
Nhưng có bổ sung khác phản hồi nội dung,
cả hai mặt được, đồng bằng.
Vì vậy, xin vui lòng, tôi cung cấp cho các bạn thông tin phản hồi trên bộ vấn đề của bạn.
Cảm thấy tự do để cung cấp cho tôi thông tin phản hồi về giảng dạy của tôi.
Tôi ở đây cho các bạn.
>> Tuyệt vời.
Đó là tất cả tôi đã cho phần đầu tiên.
Không ai có bất kỳ câu hỏi cho đến nay?
Và tôi có một lưu ý cho trung tâm điều khiển.
Sinh viên khuyến nông đã nhắn tin cho tôi nói rằng họ không nhận được bất kỳ âm thanh,
nhưng đó là ra khỏi quyền lực của tôi để sửa chữa.
Vì vậy, hy vọng, mà được giải quyết ngay.
Nếu bạn đang xem trực tuyến, hi, nhưng bạn không thể nghe thấy tôi.
>> Vì vậy, đầu tiên, chúng ta sẽ đi qua GDB.
GDB, như tôi đã gợi ý trước đó, là một công cụ gỡ lỗi
tốt hơn nhiều so printf.
Vì vậy, để bắt đầu với GDB, các bạn, nếu bạn muốn mở lên thiết bị của bạn
và có những tập tin mà tôi gửi qua email cho bạn trước đó - tập tin này cũng sẽ được
có sẵn trực tuyến trong một chút -
và chạy GDB. / tên của tập tin.
Đầu tiên, tất nhiên, bạn cần phải biên dịch nộp vì GDB chỉ hoạt động trên
các file thực thi.
>> Nhưng nếu bạn muốn bắt đầu GDB, điều đầu tiên bạn làm,
bạn chạy GDB. / Caesar.
Vì vậy, đó là tên của chương trình chúng tôi sẽ đi với nó ngay bây giờ.
Vì vậy, tôi sẽ viết cho Caesar, mà sẽ cung cấp cho tôi một tập tin thực thi
đây đánh dấu màu xanh.
Và sau đó tôi sẽ chạy GDB. / Cesar.
>> Và có bạn đi.
Bạn thấy chúng tôi có một số văn bản nói với tôi về phiên bản của GDB, đem lại cho tôi
một số thông tin bảo hành, và sau đó chúng tôi có dấu nhắc GDP, trông loại
giống như dòng lệnh nhanh chóng của chúng tôi, nhưng bạn thấy nó đang mở
Dấu ngoặc đơn, GDB, dấu ngoặc đóng.
Trước khi chúng tôi tiếp tục và gỡ lỗi tập tin này mà tôi gửi đến tất cả các bạn, chúng ta hãy xem
một số lệnh hữu ích vì vậy chúng tôi có một cảm giác những gì chúng ta đang đi để trang trải.
>> Những lệnh này được liệt kê ở đây thứ tự mà tôi thường sử dụng chúng.
Vì vậy, tôi bắt đầu chương trình của tôi bằng cách chạy GBD. / Tên của chương trình,
trong trường hợp này, Caesar.
Và sau đó là điều đầu tiên tôi làm 99,9% thời gian là loại nghỉ có ý nghĩa.
Mà đặt một điểm break ở chính.
Về cơ bản, những gì bạn đang làm có là chương trình sẽ dừng lại ở
chính vì vậy bạn có thể bắt đầu kiểm tra nó dòng Dòng, chứ không phải chạy tất cả
cách thức thông qua.
Bạn có thể phá vỡ tại các điểm khác nhau trong mã của bạn, nhưng chính nói chung là một
nơi tốt để bắt đầu.
>> Lệnh tiếp theo tôi chạy là chạy.
Bắt đầu các chương trình đang chạy, và nếu bạn cần phải nhập dòng lệnh
đối số, bạn chạy nó lệnh đó.
Chạy với các đối số.
Vì vậy, vì chúng ta đang đi trên một phiên bản C, đó là các bạn chương trình
viết cho pset hai -
này, tất nhiên, có một số lỗi ở trong đó mà chúng tôi hy vọng sẽ tìm thấy -
chúng ta sẽ chạy chạy với một số lệnh đối số dòng vì Caesar,
như các bạn biết mỗi vấn đề thiết lập thông số, có một số
đối số dòng lệnh.
>> Các cặp vợ chồng tiếp theo của lệnh, tiếp theo một là thực sự gọi tới.
Một trong đó có bạn từng dòng thông qua chương trình của bạn.
Vì vậy, đánh n sau đó Enter sẽ đưa bạn đến dòng kế tiếp, thực hiện
các dòng trước đó.
Bước không chỉ đưa bạn đến dòng tiếp theo, nhưng nó
đưa bạn các chức năng bên trong.
Vì vậy, nếu bạn đã viết một chức năng trong mã của bạn hoặc nếu bạn muốn khám phá một
i, ví dụ, bạn có thể nhấn, và thay vì đi vào dòng tiếp theo của
các tập tin mà bạn đang trải qua ngay bây giờ, bạn sẽ thực sự bước vào
chức năng này và xem mã của nó.
>> Danh sách cho bạn thấy, trong rất thân thiện định dạng, 10, hay như vậy dòng xung quanh
bạn hiện đang ở trong mã của bạn do đó, bạn thực sự có thể xem các tập tin
thay vì phải trao đổi lại giữa quan điểm khác nhau.
In giống như printf, như tên gọi của nó.
Điều đó cho thấy bạn biết những gì một biến bằng.
>> Người dân địa phương thông tin thực sự hữu ích.
Đây là một phiên bản đặc biệt của in ấn.
Thông tin người dân địa phương cho bạn thấy tất cả các địa phương biến, in tất cả chúng ra cho bạn
hiện đang có sẵn.
Vì vậy, tôi nói chung, thay vì phải in ra bốn biến rằng tôi
tò mò về nếu tôi đang ở trong một vòng lặp, cho Ví dụ, tôi chỉ viết người dân địa phương thông tin,
và nó sẽ chỉ cho tôi những gì tôi truy cập của tôi bằng, cũng như các mảng mà tôi
làm việc trên bằng.
>> Cuối cùng, tiếp tục.
Gõ nghỉ dừng lại bạn tại các điểm break.
Bạn có thể đi bộ qua đường bởi phù hợp với tiếp theo và bước.
Tiếp tục chạy chương trình tiếp theo của bạn phá vỡ điểm hoặc cho đến khi hoàn thành nếu
có điểm break nữa.
Vô hiệu hóa loại bỏ điểm break nếu bạn quyết định nghỉ tại chính là
không phù hợp, bạn muốn thiết lập nó ở một nơi khác.
Và cuối cùng là q, bỏ thuốc lá, được ra khỏi GDB.
>> Vì vậy, chương trình này,. / Caesar, chúng ta sẽ xem xét thông qua ngay bây giờ và chúng tôi
sẽ sử dụng GDB để tìm các lỗi trong chương trình này.
Tôi chạy chương trình này trước đó với Kiểm tra 50, và tôi đã nhận một cái cau mày.
Tất cả mọi thứ tồn tại, nó biên dịch, nó thông qua rất nhiều các bài kiểm tra, nhưng đối với
một số lý do, nó đã không vượt qua thứ năm kiểm tra, quay BARFOO, tất cả mũ, vào
E-D-U-I-R-R, tất cả mũ, sử dụng ba như một chìa khóa.
Tôi đã khá gần.
Tôi đã nhận ra bởi một chữ cái.
Do đó, có một số sai lầm nhỏ ở đây.
Tôi đã nhìn qua mã của tôi.
Tôi không thể hình dung nó ra.
Hy vọng rằng, các bạn có thể giúp tôi tìm ra những gì lỗi này là.
>> Vì vậy, đó là lỗi chúng tôi tìm kiếm.
Chúng ta hãy di chuyển vào GDB.
Một lần nữa, tôi đã chạy GDB. / Caesar, vì vậy bây giờ chúng ta đang ở trong GDB.
Và những gì là đầu tiên điều tôi nên làm gì?
Tôi vừa bước vào GDB.
Ai đó cho tôi một tốt lệnh để nhập.
>> HỌC SINH: Phá vỡ chính.
>> JASON Hirschhorn: Phá vỡ chính.
Tuyệt vời.
Hãy gõ mà in
Các bạn có thể xem ở đây hoặc theo cùng trên máy tính của bạn.
Phá vỡ chính, và bạn sẽ thấy một điểm break đã được thiết lập tại -
nó mang lại cho tôi một số địa chỉ bộ nhớ kỳ lạ, và nó cũng mang lại cho tôi số dòng.
Nếu tôi được nhìn lại tập tin này, Tôi sẽ nhận ra chính
đã xảy ra trên đường 21.
Tôi nên chạy những gì tiếp theo?
Là chương trình của tôi chạy?
Không.
Vì vậy, những gì tôi nên chạy tiếp theo?
>> HỌC SINH: Chạy.
>> JASON Hirschhorn: Chạy.
Nên tôi chỉ chạy chạy, hoặc phải Tôi thêm một số thứ khác trong?
>> HỌC SINH: Chạy với lập luận.
>> JASON Hirschhorn: Chạy với các đối số lệnh.
Và kể từ khi tôi gỡ lỗi rất cụ thể trường hợp, tôi nên nhập đó
đối số dòng lệnh.
Vì vậy tôi sẽ không chạy ba, đó là, một lần nữa, đầu ra tôi nhận được từ Kiểm tra 50.
Bắt đầu chương trình.
Chúng tôi đi qua một vài dòng.
Bây giờ bạn sẽ thấy rằng chúng tôi đang ở trên đường 21.
Làm thế nào để tôi biết rằng chúng tôi đang ở trên đường 21?
Bởi vì nếu bạn nhìn sang bên trái của cửa sổ thiết bị đầu cuối của tôi, có
nó nói dòng 21.
Và cung cấp cho tôi, trên thực tế, mã số đó là ở dòng 21.
Vì vậy, tôi misspoke trước đó.
Chính không phải là thực sự ở dòng 21.
Chính là một vài dòng trên 21.
Nhưng ở dòng 21, đó là nơi chúng tôi đang phá vỡ.
Dòng mã này có không được thực hiện.
Đó là quan trọng.
Dòng bạn nhìn thấy có không được thực hiện chưa.
Đó là dòng tiếp theo của mã bạn đang về để thực hiện.
>> Vì vậy, các dòng tiếp theo, như các bạn là có thể quen với, điều này
điều kiện kiểm tra để xem nếu tôi có bước vào một đối số dòng lệnh.
Và để tôi, thứ hai là những gì một phần trong đó làm gì?
Một là những gì để tôi?
>> HỌC SINH: Thay đổi nó thành một số nguyên.
>> JASON Hirschhorn: Xin lỗi?
>> HỌC SINH: Nó thay đổi đối số cho một số nguyên.
>> JASON Hirschhorn: Vì vậy, một để tôi thay đổi arg v1 từ một chuỗi số nguyên.
Và sau đó những gì nó kiểm tra?
>> HỌC SINH: Nếu có một thứ hai đối số dòng lệnh, ngoài
chạy chương trình.
>> JASON Hirschhorn: Và những gì nửa cuối năm này
Biểu thức boolean kiểm tra?
Phần này ở đây, một để tôi?
>> HỌC SINH: Nếu đó là tiêu cực.
>> JASON Hirschhorn: Đảm bảo những gì?
>> HỌC SINH: Đảm bảo nó là, trên thực tế, tích cực.
>> JASON Hirschhorn: Chính xác.
Điều này được kiểm tra để xem nếu nó tiêu cực, và nếu nó là tiêu cực, tôi
có cảm giác dòng sức mạnh tiếp theo được tôi la hét vào người sử dụng.
Vì vậy, hãy đánh cuối để thực hiện dòng này.
Chúng ta không thấy dòng đó mà các bạn có thể mong đợi để xem la hét tại
người sử dụng và sau đó quay trở lại, bởi vì dòng này đã không thực hiện.
Tôi bước vào 3.
Vì vậy, tôi đã làm, trên thực tế, nhập hai lệnh đối số dòng và 3 là
lớn hơn không.
Vì vậy, chúng ta đã thấy dòng đó, chúng tôi thực hiện, nhưng chúng tôi đã không bước
trong điều kiện if.
>> Vì vậy, bây giờ, bên cạnh, tôi thấy tôi đang thiết int quan trọng bằng một i arg v1.
Vì vậy, đó là tôi tạo ra một chính biến.
Vì vậy, nếu tôi in ra chính ngay bây giờ, bởi vì cho phép bạn xem các
giá trị bên trong biến, chính bằng 47.
Đó là lạ, nhưng tất nhiên, đó là bởi vì tôi đã không
thực hiện dòng đó được nêu ra.
Vì vậy, bây giờ nếu tôi nhấn n, thực hiện dòng đó, và làm chìa khóa in, chìa khóa sẽ bằng 3,
đó là những gì chúng tôi mong đợi nó bằng nhau.
>> Vì vậy, một lần nữa, trong GDB, dòng bạn thấy bạn đã không thực hiện được nêu ra.
Bạn phải nhấn n hoặc s hoặc một số các lệnh khác để thực sự
thực hiện dòng đó.
Phím Print.
Của chính tại 3.
Cho đến nay, như vậy tốt.
Chuỗi văn bản đơn giản.
Hãy thực hiện dòng đó.
Tôi nhận được một chuỗi từ người dùng.
>> Chúng ta hãy xem Trả tôi 50, tôi nhập BARFOO tất cả các mũ, vì vậy
đó là những gì tôi sẽ nhập.
Nếu bây giờ tôi in văn bản đơn giản.
Bạn sẽ nhìn thấy nó bằng một chuỗi.
Nó mang lại cho tôi một số hệ thập lục phân kỳ lạ khác số, nhưng nó trong
Thực tế nói rằng chuỗi của tôi là BARFOO.
Nếu tôi muốn xem những gì quan trọng tương đương tại thời điểm này, làm thế nào tôi có thể kiểm tra chính?
>> HỌC SINH: phím Print.
>> JASON Hirschhorn: phím Print, chính xác.
Và trên thực tế, có một phím tắt.
Nếu bạn cảm thấy mệt mỏi gõ in, bạn có thể chỉ cần gõ p.
Vì vậy, p chính làm điều chính xác.
Và một lần nữa, tôi nhìn thấy nó bằng 3.
>> Nếu tôi muốn tìm hiểu những gì cả khóa và BARFOO tương đương cùng một lúc
nhưng tôi đã mệt mỏi của gõ mỗi một trong cá nhân, tôi
người dân địa phương có thể gõ thông tin.
Cung cấp cho tôi bình đẳng chìa khóa 3.
Văn bản đơn giản bằng BARFOO.
Nó cũng mang lại cho tôi hai điều kỳ lạ ở đầu trang, biến này tôi và
n này biến.
>> Những người đang thực sự tồn tại trong chương trình chính của tôi.
Chúng tôi đã không gặp họ chưa, nhưng như một bản xem trước, những
tồn tại trong tôi cho vòng lặp.
Vì vậy, ngay bây giờ, họ bằng một số lạ số bởi vì họ đã không được
khởi tạo, nhưng họ vẫn còn tồn tại trong bộ nhớ, vì vậy chúng tôi chỉ thiết lập
một số giá trị rác.
Nhưng chúng tôi thấy quan trọng ở đồng bằng văn bản ngay tại đó.
>> Vì vậy, tôi sẽ thực hiện dòng này, dòng 34, vòng lặp cho.
Chúng ta sẽ nhảy vào cho vòng lặp bằng cách nhấn n.
Và chúng tôi đang ở trong vòng lặp for.
Chúng tôi đang ở kiểm tra đầu tiên của chúng tôi.
Và một lần nữa, các loại nên nhìn quen thuộc với bạn vì đây là một
Chương trình Caesar được viết, nhưng một lần nữa, có một số loại lỗi.
>> Và bây giờ nếu tôi làm người dân địa phương thông tin, bởi vì tôi bên trong vòng lặp, bạn sẽ thấy
mà tôi bằng không, như chúng ta mong đợi.
Đó là những gì chúng tôi đặt nó vào và khởi tạo nó để trong vòng lặp for.
n bằng 6.
Mà cũng có ý nghĩa bởi vì chúng tôi thiết lập nó vào strlen văn bản đơn giản.
Vì vậy, tôi muốn làm người dân địa phương thông tin hoặc in để biến thường xuyên để đảm bảo rằng
tất cả mọi thứ luôn luôn là những gì Tôi hy vọng nó sẽ bằng nhau.
Trong trường hợp này, tất cả mọi thứ là những gì tôi mong đợi nó bằng nhau.
>> Vì vậy, hãy bắt đầu di chuyển qua này cho vòng lặp.
Dòng Tôi đang trên là dòng 36, nếu đồng bằng văn bản tôi lớn hơn một và đồng bằng
văn bản i nhỏ hơn hoặc bằng z.
Tôi biết vấn đề của tôi không phải là đầu tiên của tôi với thư, đó là với lá thư thứ hai.
Nếu chúng ta nhìn lại Kiểm tra 50, B đi vào E tốt.
Tôi lấy một và để lại nó như A, không thay đổi nó để D. Vì vậy,
một cái gì đó sai với lá thư thứ hai.
Vì vậy, tôi sẽ di chuyển có trong một giây.
>> Nhưng nếu tôi muốn kiểm tra những gì đồng bằng văn bản tôi tương đương đặc biệt này
trường hợp, tôi nghĩ rằng nó nên được những gì?
Nên văn bản đơn giản tôi bằng những gì trong này vòng đầu tiên thông qua các vòng lặp?
>> HỌC SINH: Zero?
>> JASON Hirschhorn: Đồng bằng văn bản của tôi?
Vì vậy, nó phải là vốn B. tôi, tất nhiên, bằng không, nhưng văn bản đơn giản
khung không khung kín bằng B vì dây, như chúng ta đã thấy tuần trước,
là mảng, vì vậy chúng tôi đang nhận được ký tự đầu tiên từ đó.
Vì vậy, một lần nữa, nếu tôi in ra văn bản đơn giản của Tôi, tôi, trên thực tế, có được nhân vật
B. Và đó là gọn gàng, phải không?
Tôi không thực sự có đồng bằng văn bản I. Đó không phải là một trong những biến tôi thành lập
hoặc khởi tạo, nhưng bạn có thể in ra một máy chủ toàn bộ những thứ
nếu bạn muốn.
>> Nhưng chúng ta hãy chuyển qua.
Nếu văn bản đơn giản tôi là lớn hơn A và đồng bằng văn bản tôi là nhỏ hơn hoặc bằng
Z, đó rõ ràng là đúng bởi vì chúng tôi có B. vốn tôi sẽ chạy
một số lệnh trên nó.
Chúng ta đã thấy toán học mà tuần trước, vì vậy chúng tôi sẽ phải công nhận rằng nó hoạt động
phải theo Kiểm tra 50.
>> Các dấu ngoặc nhọn, là đầu tiên cho thấy rằng tôi đã được xuất cảnh nếu
điều kiện, điều thứ hai cho thấy mà tôi đang thoát khỏi vòng lặp.
Và vì vậy bây giờ khi tôi nhấn Tiếp theo, chúng ta sẽ thấy chúng tôi đang trở lại tại vòng lặp lại.
Chúng tôi sẽ thông qua cho vòng lặp lại.
Chúng ta hãy thực sự bước vào thứ hai lặp đi lặp lại của vòng lặp và loại
Thông tin người dân địa phương.
>> Vì vậy, chúng ta đang ở phiên thứ hai vòng lặp cho chúng tôi.
Tôi bằng 1, mà chúng tôi mong đợi.
N bằng 6, mà chúng tôi mong đợi.
Quan trọng bằng 3, mà chúng tôi mong đợi.
Và văn bản đơn giản, bạn sẽ thấy, bằng EARFOO bây giờ, không BARFOO nữa vì
trong phiên trước đó của chúng tôi, B là thay đổi vốn E. Vì vậy, chúng tôi về
gặp phải vấn đề, vì vậy đây là nơi mà chúng ta sẽ
nhảy vào gỡ lỗi.
Nhưng không ai có bất kỳ câu hỏi về những gì chúng tôi đã làm cho đến nay?
Tuyệt vời.
>> Vì vậy, chúng tôi đang về để thực hiện điều này nếu điều kiện, khung văn bản đơn giản tôi đóng cửa
khung lớn hơn A và đồng bằng văn bản tôi nhỏ hơn hoặc bằng đến Z. Nhưng trước khi
Tôi đi vào đó, vì đây là nơi Tôi biết lỗi của tôi là, tôi muốn chỉ
ra văn bản đơn giản của I. Vì vậy, chúng ta hãy đặt in ra.
Nó tương đương với ký tự A, do đó dường như cho đến nay, tất cả là tốt và tốt.
>> Vì vậy, tôi hy vọng dòng này mỗi logic của tôi, dòng này nên là sự thật.
Đó là một bức thư vốn.
Nhưng nếu tôi nhấn n, chúng tôi nhận ra rằng đây dòng, trên thực tế, đã không thực hiện.
Tôi nhảy xuống nếu người nào khác.
Tại sao điều đó xảy ra?
>> HỌC SINH: Bởi vì bạn có điều kiện của bạn văn bản đơn giản là lớn hơn
hơn A, không bằng hoặc lớn hơn.
>> JASON Hirschhorn: Vì vậy, tôi đã có văn bản đơn giản của tôi Tôi lớn hơn A, không lớn hơn
hơn hoặc bằng.
Vì vậy, rõ ràng, thủ đô Một không kích hoạt này nếu điều kiện, và chúng tôi đã làm
không bước vào nó, và chúng tôi đã làm không làm thay đổi cần thiết.
Vì vậy, đó là nó, thực sự.
Tôi đã tìm ra lỗi của tôi.
Tôi có thể trở lại trong tập tin nguồn của tôi, thay đổi nó, và cập nhật nó và
chạy Kiểm tra 50 một lần nữa.
>> Nhưng chúng ta sẽ thấy, chỉ cần cho phương pháp sư phạm của vì lợi ích, nếu tôi tiếp tục đi.
Các khác nếu không thực hiện một trong hai, nhưng những gì thay bằng lệnh này
điều đó không thay đổi.
Vì vậy, nó không thay đổi gì cả, và nếu tôi in văn bản đơn giản ở đây, chúng ta sẽ thấy đi
qua đó cho vòng lặp không, trên thực tế, thay đổi nhân vật thứ hai ở tất cả.
Nó vẫn là một A. vốn
>> Vì vậy, một lần nữa, chúng tôi sửa lỗi lỗi của chúng tôi.
Chúng tôi nhận ra rằng có một số logic mất tích.
Và chúng tôi sửa lỗi nó trước thời gian trước khi thực sự thực hiện dòng đó,
nhưng bạn đã có thể nhận thấy nếu chúng ta chỉ nhấn Next và nhảy đến đó nếu người nào khác,
điều đó có nghĩa rằng nếu điều kiện là không đúng sự thật.
Chúng tôi không, trên thực tế, có được kết quả chúng tôi mong đợi.
Vì vậy, sau đó chúng tôi có thể đã được nhắc nhở, có chúng tôi không được như vậy sắc sảo, nhìn vào
rằng nếu điều kiện và kiểm tra xem, trên thực tế, điều kiện của chúng tôi cần phải đánh giá để
đúng trong bối cảnh hiện nay.
>> Đó là tất cả để gỡ lỗi chương trình này.
Không ai có bất kỳ câu hỏi?
Lệnh những gì tôi có thể đánh bỏ GDB?
Q. Và sau đó tôi sẽ được nhắc nhở, bỏ không?
Có hoặc không.
Tôi sẽ đánh có, và tôi sẽ phải bỏ GDB.
>> Vì vậy, đó là một mồi nhanh để GDB.
Trên thực tế, trong một kịch bản thực tế, Tôi đã làm điều này vào những giờ văn phòng.
Tôi GDBed chương trình này chính xác tại giờ làm việc với một học sinh.
Và nếu chúng ta quay trở lại lệnh chúng ta đã thấy trước đây, chúng tôi sử dụng phá vỡ chính, đầu tiên
điều chúng tôi đã làm.
Chúng tôi sử dụng chạy với các lệnh, Điều thứ hai chúng tôi đã làm.
Chúng tôi sử dụng rất nhiều tiếp theo để di chuyển chúng tôi qua đường dây.
Và một lần nữa, phiên bản ngắn của tiếp theo là n.
Đó là trong dấu ngoặc đơn màu xám trên slide.
>> Chúng tôi không sử dụng bước, nhưng chúng tôi đã không nhất thiết cần phải cho trường hợp này.
Nhưng chúng ta có thể sử dụng nó trong một chút sau ngày hôm nay nếu chúng ta đang gỡ lỗi, cho
khi dụ, tìm kiếm nhị phân nhị phân tìm kiếm được gọi là trong một riêng biệt
chức năng nhưng có một số lỗi với nó.
Chúng ta sẽ muốn bước vào các cuộc gọi đến và tìm kiếm nhị phân
thực sự gỡ lỗi nó.
Danh sách chúng tôi đã không sử dụng hoặc vì chúng tôi đã có một cảm giác tốt về mã của chúng tôi, nhưng nếu tôi
đã muốn có được một cảm giác về những gì mã tôi là xung quanh, tôi chỉ có thể sử dụng danh sách.
>> In chúng tôi sử dụng, người dân địa phương thông tin chúng tôi sử dụng.
Tiếp tục chúng tôi không cần phải sử dụng này trường hợp, không sao chúng ta cần phải sử dụng
vô hiệu hóa, nhưng chúng tôi đã sử dụng bỏ thuốc lá.
Một lần nữa, những 10 lệnh, thực hành chúng.
Nếu bạn hiểu được những 10 lệnh, bạn nên được thiết lập để gỡ lỗi bất kỳ
Ban hành kèm theo GDB.
>> Vì vậy chúng tôi về để đi về, một lần nữa, để các Điểm mấu chốt của phần ngày hôm nay, đi qua
các phân loại và tìm kiếm các thuật toán.
Trước khi chúng tôi làm như vậy, một lần nữa, bất kỳ câu hỏi, ý kiến, mối quan tâm cho GDB?
Vì vậy, tất cả mọi người là sẽ sử dụng GDB hơn là printf?
Vì vậy, tất cả mọi người, vì lợi ích vĩnh viễn của, tất cả mọi người gật đầu ngay đầu của họ
bây giờ, vì vậy tôi sẽ nhìn thấy bạn trong giờ văn phòng và tất cả các TF sẽ nhìn thấy bạn và
họ sẽ nói, chỉ cho tôi cách sử dụng GDB, và bạn sẽ có thể
để chỉ cho họ, phải không?
Loại?
Có thể hy vọng.
Mát mẻ.
>> Vì vậy, chúng ta sẽ di chuyển vào phân loại và tìm kiếm.
Bạn sẽ thấy tôi có một danh sách đã được sắp xếp cho chúng tôi, nhưng điều đó sẽ không
là trường hợp luôn luôn.
Vì vậy, trong vấn đề thiết lập đặc điểm kỹ thuật vấn đề đặt ba, bạn có quần short
bạn có thể xem, và nó thực sự hỏi bạn xem những quần short.
Cũng trong bài giảng tuần trước, chúng tôi đã đi qua rất nhiều các thuật toán, vì vậy tôi
sẽ không dành nhiều thời gian trong lớp đi trên các thuật toán lại hoặc bản vẽ
hình ảnh cho làm thế nào những thuật toán làm việc.
Một lần nữa, thông tin mà bạn có thể lại đồng hồ bài giảng, hoặc thông tin
được chụp xuất sắc trên quần short cho, những tìm kiếm tất cả các
trong đó có sẵn tại cs50.net.
>> Vì vậy, thay vào đó, những gì chúng ta sẽ làm là viết các chương trình này.
Chúng tôi có một cảm giác, một mô hình về tinh thần, như thế nào họ làm việc, và vì vậy những gì chúng ta sẽ
làm là mã họ cho thực tế.
Chúng tôi sẽ lần lượt là mô hình tâm thần, hình ảnh đó, nếu bạn sẽ, vào
mã thực tế.
Và nếu bạn là một chút nhầm lẫn hoặc mờ trên mô hình về tinh thần, tôi hoàn toàn
hiểu.
>> Chúng tôi không thực sự đi vào nhảy vào mã ngay lập tức.
Vì vậy, trong khi dấu nhắc này trong slide này đề nghị bạn mã tìm kiếm nhị phân, và
trên thực tế, một phiên bản lặp đi lặp lại của tìm kiếm nhị phân, điều đầu tiên tôi
thực sự muốn bạn phải làm là viết một số mã giả.
Vì vậy, bạn có mô hình tinh thần này làm thế nào các công trình nhị phân tìm kiếm.
Đưa ra một tờ giấy nếu bạn có một có sẵn, hoặc mở ra một
soạn thảo văn bản, và tôi muốn tất cả mọi người để viết.
Mất bốn phút để viết giả cho tìm kiếm nhị phân.
>> Một lần nữa, suy nghĩ về mô hình tâm thần.
Tôi sẽ quay xung quanh nếu bạn có câu hỏi và chúng ta có thể rút ra những hình ảnh ra.
Nhưng trước tiên, trước khi chúng tôi bắt đầu chương trình, Tôi muốn viết
giả cho tìm kiếm nhị phân khi chúng tôi bổ nhào vào, chúng tôi có một số hướng như
nơi chúng ta nên đi.
>> HỌC SINH: Chúng ta có thể giả định các mảng giá trị chúng ta đã được sắp xếp?
>> JASON Hirschhorn: Vì vậy, để tìm kiếm nhị phân để làm việc - câu hỏi tuyệt vời - bạn
phải có trong một sắp xếp mảng các giá trị.
Vì vậy, giả sử nó sẽ làm việc.
Chúng tôi sẽ quay trở lại slide này.
Bạn sẽ thấy màu tím chức năng tuyên bố là bool binary_search int
giá trị, giá trị int, int n.
Này nên nhìn quen thuộc nếu bạn đã đã tiếp cận hoặc nhận của bạn
tay bẩn với bộ vấn đề.
>> Nhưng đó là tuyên bố chức năng của bạn.
Một lần nữa, không cần phải lo lắng về rằng có rất nhiều tại thời điểm này.
Những gì tôi thực sự muốn bạn làm là lấy bốn phút để nhị phân giả
tìm kiếm, và sau đó chúng tôi sẽ đi trên đó như là một nhóm.
Và tôi sẽ đi xung quanh.
Nếu bạn có thắc mắc, cảm thấy miễn phí để nâng cao tay của bạn.
>> Tại sao bạn không mất hai phút nữa để hoàn tất cái giả?
Tôi biết điều này có vẻ vô lý mà chúng tôi đang chi tiêu quá nhiều thời gian
một cái gì đó thậm chí không thực sự trong C, nhưng đặc biệt là cho những hơn
các thuật toán đầy thách thức và vấn đề bộ mà chúng ta phải tìm ra,
bắt đầu từ giả không đáng lo ngại về cú pháp, chỉ lo lắng về
logic, là vô cùng hữu ích.
Và theo cách đó, bạn không giải quyết hai vấn đề vô cùng khó khăn cùng một lúc.
Bạn chỉ cần tập trung vào logic, và sau đó bạn di chuyển vào cú pháp.
>> OK.
Hãy bắt đầu đi qua mã giả.
Tôi đã viết lên đây, nhị phân tìm kiếm giả.
Chúng tôi sẽ viết này trên hội đồng quản trị với nhau.
Hoặc tôi sẽ viết nó và bạn sẽ cung cấp cho tôi nhắc nhở tôi cần.
Vì vậy, bất cứ ai có thể cho tôi là người đầu tiên dòng của bạn giả
viết cho tìm kiếm nhị phân?
Có, Annie?
>> HỌC SINH: Trong khi chiều dài của danh sách là lớn hơn không.
>> JASON Hirschhorn: Trong khi chiều dài của danh sách lớn hơn không.
Và một lần nữa, chúng ta thấy một số C-tìm kiếm điều cú pháp trên đây.
Nhưng hầu hết trong số này là bằng tiếng Anh.
Đã ai có bất cứ dòng họ đặt trước khi điều này trong mã giả của họ?
>> HỌC SINH: Nhận được một mảng sắp xếp của số.
>> JASON Hirschhorn: Bạn đã viết "có được một mảng các số được sắp xếp. "Theo các
khai báo hàm, chúng ta sẽ đi qua một mảng các số được sắp xếp.
>> HỌC SINH: [nghe được].
>> JASON Hirschhorn: Vì vậy, chúng tôi sẽ có điều đó.
Nhưng có, nếu chúng ta không có điều đó, chúng tôi sẽ cần phải sắp xếp các mảng của chúng tôi
số, bởi vì tìm kiếm nhị phân chỉ hoạt động trên các mảng được sắp xếp.
Vì vậy, trong khi chiều dài của danh sách bằng không, tôi sẽ đưa vào một số dấu ngoặc nhọn
để làm cho nó trông hơi giống C. Nhưng trong khi, dường như bản đồ vào một
trong khi vòng lặp, vì vậy trong khi điều này vòng lặp làm những gì chúng ta cần phải
làm cho tìm kiếm nhị phân?
>> Một người khác đã không cho tôi một trả lời nào nhưng người đã viết này?
>> HỌC SINH: Đến giữa của danh sách.
>> JASON Hirschhorn: Tom.
Tới giữa của danh sách.
Và câu hỏi tiếp theo, những gì Chúng ta phải làm một lần chúng tôi đang ở
giữa danh sách?
>> HỌC SINH: Làm một kiểm tra cho dù đó là số bạn đang tìm kiếm.
>> JASON Hirschhorn: Tuyệt vời.
Đi giữa danh sách và kiểm tra nếu giá trị của chúng tôi là có -
tuyệt vời.
Có ai có bất cứ điều gì khác đó là khác với điều này?
Đó chính quyền.
>> Điều đầu tiên chúng ta làm trong tìm kiếm nhị phân là đi đến giữa danh sách và
kiểm tra xem giá trị của chúng tôi là ở đó.
Vì vậy, tôi giả sử nếu giá trị của chúng tôi là ở đó, chúng ta làm gì?
>> HỌC SINH: Chúng tôi trở lại bằng không [nghe được].
>> JASON Hirschhorn: Vâng, nếu chúng tôi giá trị là có, chúng tôi tìm thấy nó.
Vì vậy, chúng ta có thể nói một cách nào đó, tuy nhiên điều này chức năng được xác định, chúng tôi cho người sử dụng
chúng tôi tìm thấy nó.
Nếu nó không có ở đó, mặc dù, đó là nơi này được khéo léo.
Vì vậy, nếu nó không có, người khác người đã làm việc trên tìm kiếm nhị phân hoặc
đã có một ý tưởng bây giờ, chúng ta làm gì?
>> HỌC SINH: Câu hỏi.
>> JASON Hirschhorn: Có?
>> HỌC SINH: là mảng đã được sắp xếp?
>> JASON Hirschhorn: Vâng, chúng tôi đang giả định mảng đã được sắp xếp.
>> HỌC SINH: Vì vậy, sau đó bạn phải kiểm tra xem giá trị mà bạn nhìn thấy lớn hơn
giá trị mà bạn muốn, bạn có thể di chuyển đến giữa của nửa kia.
>> JASON Hirschhorn: Vì vậy, nếu giữa danh sách là lớn hơn so với những gì chúng tôi
tìm kiếm, sau đó chúng tôi làm những gì?
Chúng tôi di chuyển ở đâu?
>> HỌC SINH: Bạn muốn chuyển đến một nửa của danh sách với
số thấp hơn.
>> JASON Hirschhorn: Vì vậy, chúng tôi sẽ gọi đó là bên trái.
Vì vậy, nếu giữa lớn hơn, chúng ta có thể tìm kiếm nửa còn lại của danh sách.
Và sau đó bằng cách tìm kiếm, những gì Tôi có ý nghĩa bằng cách tìm kiếm?
>> HỌC SINH: [nghe được].
>> JASON Hirschhorn: Chúng tôi đi giữa.
Chúng tôi thực sự lặp lại điều này.
Chúng tôi quay trở lại thông qua vòng lặp trong khi của chúng tôi.
Tôi sẽ cung cấp cho bạn các tác phẩm mới nhất -
khác, nếu, giữa là ít hơn những gì chúng tôi, chúng ta làm gì đây?
>> HỌC SINH: Đi bên phải.
>> JASON Hirschhorn: Tìm kiếm bên phải.
Điều này có vẻ tốt, nhưng không ai có bất cứ điều gì mà chúng ta có thể bị thiếu hoặc
bất cứ điều gì khác mà bạn đặt trong giả mã của bạn?
Vì vậy, đây là những gì chúng tôi có cho đến nay.
Trong khi chiều dài của danh sách là lớn hơn hơn không, chúng ta sẽ đi
đến giữa danh sách và kiểm tra xem giá trị của chúng tôi là ở đó.
>> Nếu giữa là lớn hơn, chúng ta sẽ tìm kiếm lại, nếu người nào khác giữa là
ít hơn, chúng ta sẽ tìm kiếm bên phải.
Vì vậy, tất cả chúng tôi đã có một số quen thuộc với các điều khoản chúng tôi sử dụng trong khoa học máy tính
và các công cụ chúng ta có.
Nhưng bạn sẽ nhận thấy chúng tôi đã nói tiếng Anh, nhưng chúng tôi thấy một
rất nhiều điều mà dường như bản đồ trên để các công cụ chúng tôi có trong bộ công cụ mã hóa của chúng tôi.
Vì vậy, ngay lập tức, chúng tôi không sẽ thực sự mã được nêu ra.
>> Những gì chúng ta thấy ở đây trong tiếng Anh mà bản đồ vào những điều chúng ta có thể viết trong C?
>> HỌC SINH: Trong khi.
>> JASON Hirschhorn: Trong khi.
Vì vậy, trong khi điều này ngay tại đây bản đồ trên để làm gì?
>> HỌC SINH: Một vòng lặp while.
>> JASON Hirschhorn: Một vòng lặp trong khi?
Hoặc có thể, nói chung, một vòng lặp.
Chúng tôi muốn làm một cái gì đó hơn và hơn.
Vì vậy, chúng tôi đang đi vào mã một vòng lặp.
Và chúng ta đã biết, bởi vì chúng tôi đã thực hiện này một vài lần và chúng tôi
có rất nhiều ví dụ trên mạng, như thế nào thực sự để viết
chỉ số này cho một vòng lặp.
Vì vậy, nên được khá dễ dàng.
Chúng ta sẽ có thể nhận được rằng bắt đầu khá nhanh chóng.
>> Những gì khác để chúng ta thấy trong đây?
Những gì khác cấu trúc cú pháp, mọi thứ mà chúng ta đã quen thuộc với C, làm chúng tôi
đã có một cảm giác based tắt của những từ chúng tôi sử dụng?
Có, Anna?
[Nghe được]
chỉ đùa thôi.
Anna, đi trước.
>> HỌC SINH: Nếu và khác.
>> JASON Hirschhorn: Nếu và khác - ngay tại đây.
Vậy điều gì làm những người như thế nào?
>> HỌC SINH: Một nếu khác tuyên bố.
>> JASON Hirschhorn: Vâng, điều kiện, phải không?
Vì vậy, chúng tôi có lẽ sẽ cần phải viết một số điều kiện.
Và một lần nữa, mặc dù có thể gây nhầm lẫn tại đầu tiên, chúng ta thường có một cảm giác bây giờ
làm thế nào để viết các điều kiện và cú pháp cho điều kiện.
Và nếu chúng ta không, chúng ta chỉ cần nhìn lên Cú pháp cho điều kiện, cắt và dán
đó, bởi vì chúng tôi biết chúng tôi cần một điều kiện ở đây.
Bất kỳ những thứ khác chúng ta thấy bản đồ đó lên những điều chúng ta có thể cần phải làm trong C?
Yeah, Aleha?
>> HỌC SINH: Điều này có thể được rõ ràng, bằng cách chỉ kiểm tra nếu một
giá trị tương đương với một cái gì đó.
>> JASON Hirschhorn: Vì vậy, làm thế nào để chúng tôi kiểm tra và - để đi đến giữa của danh sách
và kiểm tra xem giá trị của chúng tôi là ở đó?
Làm thế nào để chúng tôi làm điều đó trong C?
Cú pháp cho đó là những gì?
>> HỌC SINH: Bình đẳng, bằng.
>> JASON Hirschhorn: Bình đẳng, bằng.
Vì vậy, việc kiểm tra này có lẽ sẽ là một người ngang bằng.
Vì vậy, chúng ta sẽ biết chúng ta cần một nơi nào đó.
Và trên thực tế, chỉ bằng văn bản đó, chúng ta thấy những điều khác.
Chúng ta sẽ phải làm một số toán tử so sánh trong đó -
tuyệt vời.
Vì vậy, nó thực sự là như thế, bởi và lớn, chúng tôi đã không viết một
từ mã C được nêu ra.
Nhưng chúng tôi đã nhận mô hình tinh thần xuống thông qua các bài giảng và những quần short.
>> Chúng tôi đã viết mã giả như một nhóm.
Và đã có, chúng tôi có 80% nếu không 90% những gì chúng ta cần làm.
Bây giờ, chúng ta chỉ cần mã nó, mà một lần nữa, là một
vấn đề không nhỏ để giải quyết.
Nhưng ít nhất chúng ta đang mắc kẹt trên logic.
Ít nhất là bây giờ khi chúng tôi đi đến giờ làm việc, Tôi có thể nói, tôi biết những gì tôi cần
để làm, nhưng bạn có thể nhắc nhở tôi về cú pháp?
Hoặc ngay cả khi giờ làm việc đông đúc, bạn có thể Google cho cú pháp, chứ không phải
hơn bị mắc kẹt trên logic.
>> Và một lần nữa, thay vì cố gắng để giải quyết logic và những vấn đề cú pháp tất cả
cùng một lúc, nó thường là tốt hơn để phá vỡ hai vấn đề khó khăn ra vào
hai người quản lý hơn và làm mã giả đầu tiên và sau đó mã trong C.
Vì vậy, chúng ta hãy xem những gì tôi đã làm cho pseudo-code trước thời hạn.
>> Trong khi chiều dài của danh sách là lớn hơn hơn không, nhìn vào trung lộ,
danh sách.
Nếu số lượng tìm thấy trở lại đúng, khác nếu số lượng cao hơn, tìm kiếm bên trái.
Khác nếu số thấp hơn, tìm kiếm đúng, trả về false.
Vì vậy, trông gần như giống hệt nhau nếu không gần giống với những gì chúng tôi đã viết.
Trên thực tế, Tom, những gì bạn nói đầu tiên, phá vỡ giữa danh sách và nếu
số tìm thấy vào hai báo cáo thực sự là những gì tôi đã làm.
>> Tôi kết hợp chúng ở đó.
Tôi nên nghe lời bạn lần đầu tiên.
Vì vậy, đó là mã giả chúng ta có.
Nếu bạn muốn bây giờ, xin lỗi, đi sao cho vấn đề ban đầu của chúng tôi.
Hãy đang binary.c.
Vì vậy, thực hiện một phiên bản lặp đi lặp lại của tìm kiếm nhị phân bằng cách sử dụng sau đây
khai báo hàm.
>> Và bạn không cần phải sao chép nó xuống chỉ được nêu ra.
Tôi thực sự sẽ mở lên ngay tại đây binary.c.
Vì vậy, có khai báo hàm ở giữa màn hình.
Và bạn sẽ thấy tôi đã giả mã từ trên mặt tôi, nhưng gần như giống hệt nhau
với những gì chúng tôi đã viết, và đặt rằng trong cho bạn.
Vì vậy, bây giờ, chúng ta hãy năm phút mã chức năng này.
>> Và một lần nữa, nếu bạn có bất kỳ câu hỏi, nâng cao tay của bạn, cho tôi biết, tôi sẽ
đến xung quanh.
>> HỌC SINH: [nghe được].
>> JASON Hirschhorn: Vì vậy tôi đã nhị phân định nghĩa tìm kiếm ở
đầu, trên dòng 12.
Đó là những gì tôi đã cho trình chiếu của tôi.
Và sau đó tất cả điều này giả mã tôi chỉ sao chép và dán từ slide,
mã giả slide.
Tôi vẫn không nghe [nghe được].
>> Vì vậy, nếu bạn đã hoàn thành của bạn thực hiện, tôi muốn kiểm tra xem nó.
Tôi gửi qua email cho bạn những tập tin helpers.h trước đó trong lớp này.
Và nó sẽ có sẵn trực tuyến là tốt để tải về cho người xem
Hiện phần này bị trì hoãn.
Và tôi chỉ sử dụng phân phối chung mã từ pset3.
Vì vậy tôi đã find.C, sử dụng tập tin helpers.h của tôi chứ không phải là tập tin helpers.h
đó là đưa ra trong mã phân phối.
>> Và tôi đã phải thực hiện một sự thay đổi khác trong find.C thay vì gọi chỉ đơn giản là
tìm kiếm, gọi binary_search.
Vì vậy, nếu bạn muốn kiểm tra mã của bạn, biết rằng đó là cách để làm điều đó.
Trong thực tế, khi chúng ta sẽ chạy mã này ngay bây giờ, tôi chỉ cần thực hiện một bản sao của
thư mục pset3 của tôi, một lần nữa, hoán đổi các tập tin giúp đỡ và sau đó thực hiện mà
thay đổi trong find.C gọi binary_search chứ không phải chỉ đơn giản là tìm kiếm.
>> JASON Hirschhorn: Có.
Bạn có một câu hỏi?
>> HỌC SINH: Nevermind.
>> JASON Hirschhorn: Không có lo lắng.
Vâng, chúng ta hãy bắt đầu.
Chúng tôi sẽ mã này như là một nhóm.
Một lưu ý khác.
Một lần nữa, điều này, có thể dễ dàng được trao đổi trong cho vấn đề Set Ba.
Tôi có tập tin helpers.h của tôi mà, chứ không phải hơn helpers.h chúng tôi đang đưa ra,
tuyên bố nhị phân tìm kiếm, bong bóng sắp xếp, lựa chọn và phân loại.
Và trong find.c bạn sẽ nhận thấy trên đường dây, những gì là, dòng 68, chúng ta gọi là nhị phân
tìm kiếm chứ không phải là tìm kiếm.
Vì vậy, một lần nữa, các mã có sẵn trực tuyến hoặc mã mà bạn
tạo ra ngay bây giờ có thể dễ dàng trao đổi trong p thiết lập 3 để kiểm tra nó.
>> Nhưng trước tiên, chúng ta hãy tìm kiếm mã nhị phân.
Khai báo hàm của chúng tôi, chúng ta trở lại một bool.
Chúng tôi có một số nguyên được gọi là giá trị.
Chúng tôi có một mảng các số nguyên được gọi là giá trị, và chúng tôi là n
kích thước của mảng.
Trên đường 10, ngay tại đây, tôi có sắc nét bao gồm stdbool.h.
Không ai biết lý do tại sao mà ở đó?
Vì vậy, điều đó không có dòng mã làm gì?
>> HỌC SINH: Nó cho phép bạn sử dụng một loại bool trở lại.
>> JASON Hirschhorn: Chính xác.
>> HỌC SINH: Hoặc đó là một thư viện cho phép sử dụng một loại bool trở lại.
>> JASON Hirschhorn: Vì vậy, sắc nét bao gồm dòng stdbool.h mang lại cho tôi một số
định nghĩa và khai báo cho những thứ mà tôi được phép sử dụng trong
thư viện này.
Vì vậy, trong số những người nói rằng có loại này được gọi là bool, và nó có thể được
đúng hay sai.
Vì vậy, đó là những gì dòng nào.
Và nếu tôi không có dòng đó, tôi sẽ gặp rắc rối vì đã viết này
từ bên phải ở đây, short, ngay tại đó.
Chính xác.
Vì vậy, tôi cần phải có trong mã này.
OK.
Vì vậy, đây lại là một lặp đi lặp lại phiên bản, không phải là một đệ quy.
Vì vậy, chúng ta hãy bắt đầu.
>> Hãy bắt đầu với điều này đầu tiên dòng mã giả.
Và hy vọng, chúng tôi sẽ - hoặc không hy vọng.
Chúng ta sẽ đi quanh phòng.
Chúng tôi sẽ đi từng dòng, và tôi sẽ giúp bạn tìm ra đường mà chúng ta cần
viết đầu tiên.
Vì vậy, trong khi chiều dài của danh sách là lớn hơn không.
Hãy bắt đầu ở phía trước.
Dòng những gì tôi nên viết ở đây, trong mã?
>> HỌC SINH: Trong khi ngoặc n lớn hơn 0.
>> JASON Hirschhorn: Trong khi n là lớn hơn 0.
Vì vậy, n là kích thước của một danh sách, và chúng tôi đang kiểm tra nếu -
>> [Interposing TIẾNG NÓI]
>> JASON Hirschhorn: - xin lỗi?
>> HỌC SINH: Làm thế nào để chúng ta biết rằng n là kích thước của danh sách?
>> JASON Hirschhorn: Xin lỗi.
Theo các đặc điểm kỹ thuật pset, tìm kiếm và sắp xếp các chức năng bạn cần phải viết,
n là kích thước của danh sách.
Tôi quên giải thích rằng đây.
Nhưng có. n là kích thước của danh sách, trong trường hợp này.
Vì vậy, trong khi n lớn hơn 0.
OK.
Điều đó có thể chứng minh một chút vấn đề tuy nhiên, nếu mọi thứ đi vào.
Bởi vì chúng tôi sẽ tiếp tục biết kích thước của danh sách này trong suốt
chức năng, nhưng nói rằng chúng ta bắt đầu với một mảng gồm 5 số nguyên.
Và chúng tôi đi qua và chúng tôi đã bây giờ thu hẹp nó xuống
một mảng của 2 số nguyên.
Trong đó có 2 số nguyên là?
Kích thước là 2 giờ mà chúng tôi muốn xem xét, nhưng mà 2 là?
Điều đó có ý nghĩa, câu hỏi đó?
>> OK.
Tôi sẽ hỏi lại lần nữa.
Vì vậy, chúng tôi bắt đầu với mảng này của 5 số nguyên, và n = 5, phải không?
Chúng tôi sẽ chạy qua đây.
chúng tôi có thể sẽ thay đổi kích thước, phải, như mọi thứ đi vào.
Đó là những gì chúng ta nói rằng chúng ta muốn làm.
Chúng tôi không muốn tìm kiếm điều đầy đủ một lần nữa.
Vì vậy, nói rằng chúng ta thay đổi nó để 2.
Chúng tôi có một nửa danh sách đó là lẻ.
Vì vậy, chỉ cần chọn 2.
Vì vậy bây giờ n bằng 2.
Tôi xin lỗi vì người nghèo đánh dấu xóa khô.
Phải không?
Và chúng tôi đang tìm kiếm thông qua danh sách một lần nữa với một danh sách các kích thước 2.
Vâng, chúng tôi vẫn là mảng có kích thước 5.
Chúng ta nói rằng chúng ta chỉ muốn tìm kiếm 2 điểm trong đó.
Vì vậy, trong đó có 2 điểm là những?
>> Điều đó có ý nghĩa?
Là họ để lại 2 điểm?
Họ có quyền 2 điểm?
Họ có 2 điểm trung?
Chúng tôi đã bị phá vỡ vấn đề xuống, nhưng chúng tôi thực sự không biết đó là một phần của
vấn đề chúng tôi vẫn đang xem xét, chỉ bằng cách có những 2 biến.
Vì vậy, chúng ta cần một chút sau đó nhiều hơn, trong khi n lớn hơn 0.
Chúng ta cần phải biết rằng n là trong mảng thực tế của chúng tôi.
>> Vì vậy, không ai có một thay đổi dòng này?
Nhất của dòng này là hoàn toàn chính xác.
Ngoài ra có khác?
Chúng ta có thể trao đổi một cái gì đó cho n làm cho dòng này tốt hơn một chút?
Mm-hm?
>> HỌC SINH: Bạn có thể khởi tạo một biến như chiều dài n mà sau đó sẽ được sử dụng
sau này trong chức năng?
>> JASON Hirschhorn: Vì vậy, khởi tạo chiều dài biến n,
và chúng tôi sử dụng sau này?
Nhưng sau đó chúng tôi chỉ cần cập nhật chiều dài và chúng tôi vẫn còn chạy vào vấn đề này mà chúng ta
cắt giảm chiều dài của vấn đề của chúng tôi, nhưng chúng ta không bao giờ biết, trên thực tế,
chiều dài mà các bản đồ lên.
>> HỌC SINH: Đó không phải là sẽ xảy ra sau khi bạn đang nói, tìm lại,
tìm kiếm phải không?
Bạn sẽ đi đến một khác nhau diện tích của bạn -
>> JASON Hirschhorn: Chúng ta sẽ đi đến một khu vực, nhưng làm thế nào để chúng ta biết
mà là để đi đến?
Nếu chúng ta chỉ có các mảng và điều này n, làm thế nào để chúng tôi biết được nơi để
đi trong mảng.
Trong trở lại, phải không?
>> HỌC SINH: Bạn có, như, thấp hơn ràng buộc và một biến ràng buộc trên hoặc
một cái gì đó như thế?
>> JASON Hirschhorn: OK.
Vì vậy, đây là một ý tưởng khác.
Thay vì chỉ theo dõi các kích thước, chúng tôi tiếp tục theo dõi những thấp hơn và
trên biến ràng buộc.
Vì vậy, làm thế nào để chúng tôi tính toán kích thước từ một ràng buộc thấp hơn và trên ràng buộc?
>> [Interposing TIẾNG NÓI]
>> JASON Hirschhorn: Phép trừ.
Và cũng theo dõi thấp hơn ràng buộc và trên ràng buộc để cho chúng tôi biết,
Chúng ta tìm kiếm hai?
Chúng ta tìm kiếm hai ở đây?
Chúng ta đang tìm kiếm giữa hai?
Có lẽ không phải là giữa hai, bởi vì này, trên thực tế, là tìm kiếm nhị phân.
Nhưng bây giờ chúng tôi sẽ có thể để có được kích thước, nhưng cũng có những giới hạn của mảng.
Về bản chất, nếu chúng ta có khổng lồ của chúng tôi danh bạ điện thoại, chúng tôi trích xuất nó ra.
Bây giờ chúng ta biết rằng nhỏ hơn danh bạ điện thoại là.
Nhưng chúng tôi không thực sự trích xuất danh bạ điện thoại trong một nửa.
Chúng tôi vẫn cần phải biết nơi mà các giới hạn mới của vấn đề của chúng tôi là.
Không ai có bất kỳ câu hỏi về điều đó?
Có?
>> HỌC SINH: Nó sẽ làm việc bằng cách tạo ra một biến, tôi, mà bạn sau đó chỉ cần thay đổi
vị trí của tôi liên quan đến nó vị trí hiện tại, và chiều dài, n?
>> JASON Hirschhorn: Và tôi là gì?
>> HỌC SINH: Giống như tôi được như loại -
Như bạn sẽ khởi tạo i là vị trí giữa của mảng.
Và sau đó, nếu giá trị ở vị trí i trong giữa các mảng trong phát hiện
được thấp hơn giá trị bạn cần, tôi bây giờ trở thành chiều dài của mảng, cộng với
giá trị của i chia cho 2.
Như, xem, bạn thay đổi tôi -
>> JASON Hirschhorn: Đúng vậy.
>> HỌC SINH: - đến -
>> JASON Hirschhorn: Vì vậy, tôi gần như tích cực sẽ làm việc.
Nhưng điểm phúc, bạn cần hai mẩu thông tin ở đây.
Bạn có thể làm điều đó với đầu và cuối, hoặc bạn có thể làm điều đó với kích thước, và sau đó
một số điểm đánh dấu.
Nhưng bạn cần hai mảnh thông tin ở đây.
Bạn không thể nhận được bởi với chỉ một.
Điều đó làm cho tinh thần?
>> Vì vậy, chúng ta sẽ đi qua, và chúng ta sẽ làm [không nghe được]
và tạo ra một số dấu hiệu.
Vì vậy, Anh đã viết trong mã của bạn?
>> HỌC SINH: Tôi chỉ nói int ràng buộc một là bằng 0.
>> JASON Hirschhorn: Hãy gọi mà int, bắt đầu.
>> HỌC SINH: OK.
>> JASON Hirschhorn: Điều đó làm cho ý nghĩa hơn đối với tôi.
Và?
>> HỌC SINH: tôi đã nói, tôi đoán, int kết thúc.
>> JASON Hirschhorn: int kết thúc.
>> HỌC SINH: Tôi đoán, n trừ đi 1, hoặc một cái gì đó như thế.
Như, yếu tố cuối cùng.
>> JASON Hirschhorn: Vì vậy, bạn đã viết, int bắt đầu bằng 0, dấu chấm phẩy, và int
kết thúc bằng n trừ đi 1, dấu chấm phẩy.
Vì vậy, về cơ bản, những gì chúng tôi đang làm ở đây, 0 vị trí đầu tiên.
Và như chúng ta biết trong mảng, họ không đi đến n, họ đi lên đến n trừ đi 1.
Vì vậy, chúng tôi có một số giới hạn của mảng.
Và những giới hạn ban đầu xảy ra được giới hạn ban đầu của vấn đề của chúng tôi.
OK.
Vì vậy, âm thanh tốt.
Sau đó, nếu chúng ta trở lại dòng này, trong khi chiều dài của danh sách là lớn hơn 0,
những gì, thay vì n, nên chúng tôi đưa vào đây?
>> HỌC SINH: Viết kết thúc trừ đi đầu.
>> JASON Hirschhorn: Trong khi kết thúc trừ bắt đầu lớn hơn 0?
OK.
Và chúng ta có thể, nếu chúng ta muốn làm cho rằng một chút đẹp hơn, những gì
khác chúng ta có thể làm gì?
Nếu chúng ta muốn để làm sạch mã này lên một chút?
Làm thế nào chúng ta có thể thoát khỏi số 0?
Đây chỉ là một câu hỏi phong cách.
Đó là chính xác ngay bây giờ.
>> HỌC SINH: Kết thúc không đầu bằng nhau?
>> JASON Hirschhorn: Chúng ta có thể làm những gì?
>> [Interposing TIẾNG NÓI]
>> HỌC SINH: Kết thúc là lớn hơn?
>> JASON Hirschhorn: Vâng.
Chúng tôi chỉ có thể làm trong khi kết thúc lớn hơn đầu.
Đúng.
Chúng tôi bổ sung bắt đầu từ phía bên kia đó, và chúng tôi đã thoát khỏi số 0.
Vì vậy, đây chỉ trông chút sạch hơn.
OK.
Vì vậy, trong khi chiều dài của danh sách là 0, chúng tôi đã viết rằng, trong khi kết thúc lớn
hơn bắt đầu.
Chúng ta sẽ đưa vào cần thiết của chúng tôi dấu ngoặc nhọn, và sau đó điều đầu tiên
chúng tôi muốn làm là nhìn vào chúng trong một danh sách nhỏ.
Bạn?
Bạn có thể cho tôi -
>> HỌC SINH: Nếu ngoặc khung vuông giá trị -
>> JASON Hirschhorn: Nếu ngoặc khung vuông giá trị.
>> HỌC SINH: kết thúc chia cho 2.
>> JASON Hirschhorn: Kết thúc?
>> HỌC SINH: Tôi thấy một vấn đề với bạn -
>> JASON Hirschhorn: OK.
Vâng, nhìn vào giữa.
Làm thế nào để chúng tôi biết những gì giữa là?
Yeah.
Vì vậy, hãy để tôi xóa mã.
Làm thế nào để chúng tôi biết những gì giữa là?
Trong bất cứ điều gì, khi bạn có đầu và cuối cùng, làm thế nào để bạn tìm thấy
giữa?
>> HỌC SINH: Bạn trung bình.
>> HỌC SINH: Bạn thêm với nhau và sau đó -
>> JASON Hirschhorn: Thêm chúng với nhau và sau đó?
>> HỌC SINH: Và bạn trung bình.
Chia cho 2.
>> JASON Hirschhorn: Thêm chúng với nhau và chia cho 2.
Vì vậy, int giữa bằng?
Tom, bạn có thể đưa nó cho tôi?
>> HỌC SINH: Bắt đầu cộng với kết thúc -
>> JASON Hirschhorn: Từ khi bắt đầu cộng với kết thúc.
>> HỌC SINH: Tất cả, khung, chia cho 2.
>> JASON Hirschhorn: Tất cả, trong dấu ngoặc đơn, chia cho 2.
Để mang lại cho tôi giữa bất cứ điều gì, có đúng không?
>> HỌC SINH: Bạn cũng cần phải làm tròn lên.
>> JASON Hirschhorn: Điều gì làm bạn có nghĩa là, tôi cần phải làm tròn nó?
>> [Interposing TIẾNG NÓI]
>> HỌC SINH: Bởi vì nếu Đây là một kỳ lạ số lượng, sau đó nó giống như -
>> JASON Hirschhorn: Vâng, OK.
Vì vậy, tôi có thể làm tròn lên.
Nhưng nếu đó là một số lẻ, 5, tôi có thể dùng 1 cách giữa.
Hoặc nếu đó là một số chẵn, đúng hơn, đó là một trường hợp tốt hơn.
Nếu đó là 4, chúng tôi chỉ có 4, tôi có thể mất là người đầu tiên "giữa", trích dẫn, hoặc unquote
thứ hai "giữa" một.
Hoặc sẽ làm việc cho một tìm kiếm nhị phân, vì vậy tôi không thực sự cần phải làm tròn.
Nhưng có một điều tôi khác cần phải nhìn vào dòng này.
Chúng ta có thể không nhận ra được chưa, nhưng chúng tôi sẽ trở về với nó.
Vì dòng này thực sự vẫn còn cần một điều khác.
>> Nhưng cho đến nay, chúng tôi đã viết bốn dòng mã.
Chúng tôi đã có khởi đầu của chúng tôi và kết thúc đánh dấu.
Chúng tôi có vòng lặp trong khi của chúng tôi, mà bản đồ trên trực tiếp để giả của chúng tôi.
Chúng tôi đang tìm kiếm ở giữa mà các bản đồ trực tiếp lên giả của chúng tôi.
Tôi sẽ nói điều này đi vào giữa danh sách, dòng mã này.
Và sau đó, khi chúng tôi đi đến giữa danh sách, điều tiếp theo chúng ta cần làm
được kiểm tra xem giá trị của chúng tôi là có cho mã giả, chúng tôi đã viết trước đó.
>> Vì vậy, làm thế nào để chúng tôi kiểm tra nếu giá trị của chúng tôi là ở giữa danh sách?
Bạn.
Tại sao bạn không làm điều này?
>> HỌC SINH: Nếu giá trị của chúng tôi là ở giữa là bằng
bất cứ điều gì chúng ta thiết lập -
Tôi có nghĩa là bình đẳng bằng -
>> JASON Hirschhorn: Nó -
OK.
>> HỌC SINH: Tôi không chắc chắn những gì biến chúng tôi đang tìm kiếm
cho dù, là bởi vì -
>> [Interposing TIẾNG NÓI]
>> HỌC SINH: [nghe được].
>> JASON Hirschhorn: Chính xác.
Mỗi khai báo hàm, chúng tôi đang tìm kiếm một giá trị.
Vì vậy, chúng tôi đang tìm kiếm một giá trị trong một mảng các giá trị.
Vì vậy, bạn hoàn toàn đúng.
Bạn sẽ làm gì, nếu khung giá trị mở dấu ngoặc trung đóng khung bình đẳng
bằng giá trị, và bên trong có những gì chúng ta cần phải làm gì?
Nếu giá trị của chúng tôi có, những gì chúng ta cần phải làm gì?
>> [Interposing TIẾNG NÓI]
>> HỌC SINH: Quay trở lại không.
>> JASON Hirschhorn: Quay trở lại thực sự.
>> HỌC SINH: Quay trở lại thực sự.
>> JASON Hirschhorn: Michael, những gì dòng này làm gì?
>> HỌC SINH: [nghe được] chương trình đã chạy khóa học của mình, và đó là kết thúc, và
bạn đã những gì bạn cần làm gì?
>> JASON Hirschhorn: Các chương trình hoặc những gì?
Trong trường hợp này?
>> HỌC SINH: Chức năng.
>> JASON Hirschhorn: Chức năng.
Và như vậy, quay trở lại bất cứ điều gì được gọi là nó và cho nó giá trị, sự thật.
Chính xác.
Chính.
Kiểu trả về là những gì của chính, Michael?
>> HỌC SINH: int, số nguyên?
>> JASON Hirschhorn: int, chính xác.
Một số nguyên.
Đó chỉ là một câu hỏi để đảm bảo các bạn đã trên đầu trang của nó.
Những gì nó thường trở lại, nếu tất cả mọi thứ đang làm việc tốt?
>> HỌC SINH: Zero.
>> JASON Hirschhorn: Zero.
Chính xác.
>> HỌC SINH: Nếu đây chỉ trả về true, không có thông tin được đưa ra
về những gì -
Oh, đây là chỉ nói rằng đó giá trị bên trong mảng.
>> JASON Hirschhorn: Chính xác.
Chương trình này không cung cấp thông tin nơi chính xác giá trị là.
Nó chỉ nói rằng, có, chúng tôi tìm thấy nó, hoặc không, chúng tôi không tìm thấy nó.
Vì vậy, nếu số lượng tìm thấy, trả về true.
Vâng, thực sự chúng tôi chỉ làm điều đó thực sự một cách nhanh chóng với một dòng mã.
Vì vậy tôi sẽ di chuyển mà dòng giả.
>> HỌC SINH: Chúng ta không cần thay đổi mảng?
Nó phải là giá trị, không có giá trị, phải không?
>> JASON Hirschhorn: Xin lỗi.
Cảm ơn bạn.
>> HỌC SINH: Vâng.
>> JASON Hirschhorn: Dòng này nên giá trị.
Chính xác.
OK.
Vì vậy, chúng tôi đã nhìn vào danh sách trung.
Nếu số lượng tìm thấy trở lại đúng sự thật.
Tiếp tục trên với giả của chúng tôi, nếu trung lớn, tìm kiếm lại.
Vì vậy, tôi đã có trong đây, nếu số cao hơn, tìm kiếm lại.
Constantine, bạn có thể cung cấp cho tôi dòng mã này?
>> HỌC SINH: Nếu giá trị của trung -
>> JASON Hirschhorn: Vì vậy, nếu giá trị -
nếu mở dấu ngoặc giá trị khung khung gần trung -
>> HỌC SINH: là nhỏ hơn so với giá trị?
>> JASON Hirschhorn: Có ít hơn.
>> HỌC SINH: Ít hơn giá trị.
>> JASON Hirschhorn: Giá trị.
Vâng, thực sự, bạn muốn kiểm tra xem số -
Xin lôi.
Đây là một chút bối rối.
Nhưng khác nếu số lượng trong giữa danh sách lớn.
>> HỌC SINH: Oh, OK.
>> JASON Hirschhorn: Tôi sẽ thay đổi điều đó.
Khác nếu trung cao hơn, chúng tôi muốn tìm kiếm bên trái, OK?
Và chúng ta làm gì bên trong này nếu điều kiện?
>> HỌC SINH: Tôi có thể làm cho một thay đổi nhỏ điều kiện, thay đổi nó để nếu người nào khác?
>> JASON Hirschhorn: Khác nếu?
OK.
Vì vậy, mã này sẽ thực hiện như nhau.
Nhưng những điều tốt đẹp về việc sử dụng nếu, khác nếu, nếu người nào khác hoặc nếu, nếu người nào khác, khác
có nghĩa là chỉ một trong những sẽ được kiểm tra, không phải tất cả ba trong số họ,
có khả năng.
Và làm cho nó một chút đẹp hơn trên máy tính đó là
chạy chương trình của bạn.
>> Vì vậy, [? Constantine,?]
chúng ta đang ở trong dòng này, nếu người nào khác giá trị, khung giữa khung gần
lớn hơn giá trị.
Những gì chúng ta cần phải làm gì?
Chúng tôi cần phải tìm kiếm ở bên trái.
Làm thế nào để chúng tôi làm điều đó?
Tôi sẽ cung cấp cho bạn một sự khởi đầu.
>> Chúng tôi có hai điều này được gọi là bắt đầu và kết thúc.
Vì vậy, những gì cần phải xảy ra để bắt đầu?
Nếu bạn muốn tìm kiếm bên trái của danh sách, chúng tôi nhận đầu hiện nay của chúng tôi.
Những gì chúng ta cần phải làm điều đó?
>> HỌC SINH: Chúng tôi đặt đầu đến giữa cộng với 1.
>> JASON Hirschhorn: Vì vậy, nếu chúng ta tìm kiếm bên trái?
>> HỌC SINH: Xin lỗi, trừ trung -
để kết thúc sẽ là trung trừ đi 1 và bắt đầu -
>> JASON Hirschhorn: Và những gì xảy ra từ đầu?
>> HỌC SINH: Nó vẫn như nhau.
>> JASON Hirschhorn: Vì vậy, ý nghĩa vẫn như nhau.
Nếu chúng ta tìm kiếm bên trái, chúng tôi sử dụng đầu cùng -
chính xác.
Và kết thúc?
Xin lỗi, những gì hiện các kết thúc bằng một lần nữa?
>> HỌC SINH: trừ Trung 1.
>> JASON Hirschhorn: trừ Trung 1.
Bây giờ, tại sao trừ đi 1, không chỉ giữa?
>> HỌC SINH: Giữa là trong số các hình ảnh đã có, bởi vì chúng tôi đã có
kiểm tra rằng nó ra?
>> JASON Hirschhorn: Đó là chính xác.
Giữa là trong số các hình ảnh.
Chúng tôi đã kiểm tra giữa.
Vì vậy, chúng tôi không muốn "giữa," trích dẫn unquote, để tiếp tục được ở
mảng mà chúng ta đang tìm kiếm.
Vì vậy, đây là tuyệt vời.
>> Khác nếu giá trị khung trung lớn hơn giá trị kết thúc bình đẳng
trừ giữa 1.
Jeff, những gì về dòng cuối cùng này?
>> HỌC SINH: khac.
Giá trị trung thấp hơn giá trị?
>> JASON Hirschhorn: Chúng tôi sẽ bạn đang đem lại cho tôi khác.
Vì vậy, nếu bạn không cung cấp cho tôi -
>> HỌC SINH: Vì vậy, sau đó bắt đầu sẽ được cộng thêm 1 trung.
>> JASON Hirschhorn: bình đẳng Bắt đầu cộng với trung 1, một lần nữa, cho cùng một
Vì lý do đó Constantine đã cho chúng tôi trước đó.
Và cuối cùng, những người đã không đưa ra tôi một dòng mã nào?
Return false, Aleha, những gì chúng ta viết ở đây?
>> HỌC SINH: Trở về sai.
>> JASON Hirschhorn: Trở về sai.
Và chúng ta cần phải làm điều đó, bởi vì nếu chúng tôi không tìm thấy nó, chúng ta cần phải nói rằng chúng ta
không tìm thấy nó.
Và chúng tôi đã nói chúng ta sẽ trở lại một bool, vì vậy chúng tôi chắc chắn phải quay trở lại
một nơi nào đó bool.
>> Vì vậy, hãy chạy mã này.
Tôi đang thực sự đi vào -
vì vậy chúng tôi đang ở trong nhà ga.
Chúng tôi sẽ xóa cửa sổ của chúng tôi.
Chúng ta hãy làm tất cả.
Chúng tôi thấy có một lỗi.
Có một lỗi trên dòng 15, dự kiến dấu chấm phẩy ở cuối
kê khai.
Vì vậy, tôi đã quên những gì?
>> HỌC SINH: Dấu chấm phẩy.
>> JASON Hirschhorn: Dấu chấm phẩy phải lên đây.
Tôi nghĩ đó là đang Tom.
Vì vậy, Tom, [nghe được].
Chỉ đùa thôi.
Chúng ta hãy làm làm tất cả một lần nữa.
>> HỌC SINH: thư mục Dropbox gì chúng ta phải ở trong cho điều này?
>> JASON Hirschhorn: Vì vậy, bạn có thể chỉ xem cho bit này.
Nhưng một lần nữa, nếu bạn muốn di chuyển này mã vào thư mục pset3 của bạn để thử
nó ra, đó là những gì tôi đã làm.
Nếu bạn sẽ nhận thấy ở đây - xin lỗi, câu hỏi hay.
>> [? LS,?]
Tôi có ở đây mã find.c từ mã distro trong tuần này.
Tôi có helpers.h.
Tôi có một file Make rằng tôi thực sự chỉnh sửa một chút để bao gồm các mới
tập tin chúng tôi đang viết.
Tất cả các mã sẽ có sẵn, không mã phân phối, nhưng mới
Tạo tập tin, các tập tin mới sẽ helpers.h có sẵn trực tuyến để tải về.
Một lần nữa, vì vậy đó là những Mã thêm chúng ta có.
>> Vì vậy, làm cho tất cả, mỗi dòng này, làm cho thấy, nhị phân, lựa chọn bong bóng - làm cho
tất cả ba trong số họ và biên dịch thành đang tìm file thực thi này.
Vì vậy, nói chung, chúng tôi không muốn để thẳng đến check50.
Chúng tôi muốn chạy một số xét nghiệm trên của chúng ta.
Nhưng chỉ vì vậy chúng tôi có thể tiến hành điều này một chút, check50 2013 pset3.find sẽ vượt qua
trong helpers.c-- xấu của tôi.
>> Tôi không có ngay bây giờ.
Vì vậy, chúng tôi đang thực sự đi vào chạy mã thực sự.
Usage.find /, bạn biết những gì có nghĩa là?
>> HỌC SINH: Bạn cần một thứ hai dòng lệnh trên nó.
>> JASON Hirschhorn: Tôi cần một dòng lệnh thứ hai.
Và theo các đặc điểm kỹ thuật, tôi cần vào những gì chúng ta đang tìm kiếm.
Vì vậy, hãy tìm kiếm 42.
Chúng tôi sẽ giữ nó trong sắp xếp, bởi vì chúng tôi đã không viết một chức năng sắp xếp được nêu ra -
42, 43, 44.
>> Và điều khiển D không tìm thấy kim trong Haystack.
Đó là xấu.
Đó chắc chắn là có.
Hãy thử một cái gì đó khác.
Có lẽ đó là bởi vì tôi đặt nó ngay từ đầu.
>> Chúng ta hãy làm 41, 42, 43.
Có chúng tôi đi.
Nó tìm thấy nó.
Hãy đặt nó ở cuối bây giờ, chỉ vì vậy chúng tôi có thể được triệt để -
40, 41, 42.
Không tìm thấy kim.
Vì vậy, tôi đã đề cập điều này trước đó.
Thật không may, tôi biết điều này sẽ xảy ra.
>> Nhưng đối với các mục đích sư phạm, rất tốt để khám phá nó.
Nó không hoạt động.
Đối với một số lý do, nó không thể tìm thấy nó.
Chúng tôi biết những gì ở trong đó, nhưng chúng tôi không tìm kiếm nó.
Vì vậy, có một điều chúng ta có thể làm là đi qua GDB để tìm thấy nó, nhưng không ai,
mà không qua GDB, có một ý nghĩa của nơi mà chúng tôi hơi say lên?
[? Madu? ?]
>> HỌC SINH: Tôi nghĩ rằng nó có thể được khi kết thúc bằng đầu, và nó
chỉ là một danh sách một phần tử.
Sau đó, nó chỉ cần bỏ qua nó thay vì của thực sự kiểm tra nó.
>> JASON Hirschhorn: Đó là chính xác.
Khi kết thúc bằng đầu, chúng ta vẫn còn có một yếu tố trong danh sách của chúng tôi?
>> HỌC SINH: Có.
>> JASON Hirschhorn: Vâng, trên thực tế, chúng tôi có một và chỉ một phần tử.
Và rất có thể sẽ xảy ra khi nào, mỗi mã chúng tôi thử nghiệm, chúng tôi đang ở
trước đống cỏ khô hoặc cuối đống cỏ khô.
Đó là nơi bắt đầu và kết thúc sẽ bằng
một, với tìm kiếm nhị phân.
Vì vậy, trong những trường hợp hai nó không làm việc, bởi vì kết thúc là bằng đầu.
>> Nhưng nếu kết thúc bằng đầu, không vòng lặp trong khi thực hiện điều này?
Nó không.
Và chúng ta có thể kiểm tra một lần nữa thông qua GDB.
Vậy làm thế nào chúng ta có thể sửa mã này, bởi vì khi khi kết thúc bằng
bắt đầu, chúng tôi cũng muốn điều này trong khi vòng lặp chạy.
>> Vì vậy, những gì chúng tôi sửa chữa có thể làm cho dòng 18?
>> HỌC SINH: [nghe được] lớn hơn hoặc bằng.
>> JASON Hirschhorn: Chính xác ngay.
Trong khi kết thúc lớn hơn hoặc bằng đầu.
Vì vậy, bây giờ, chúng tôi đảm bảo để nhận được rằng trường hợp góc ở cuối.
Và chúng ta hãy xem.
Hãy chạy này một lần nữa.
>> Chúng ta hãy làm tất cả.
Một lần nữa, bạn sẽ phải chỉ theo cùng ở đây.
Tìm 41 lần này.
Chỉ cần giữ cho nó phù hợp.
>> Tìm 42.
Hãy đặt nó ở đầu -
42, 43, 44.
Chúng tôi tìm thấy nó.
Vì vậy, đó thực sự thay đổi chúng tôi cần phải thực hiện.
>> Đó là rất nhiều mã hóa chúng tôi chỉ cần làm, tìm kiếm nhị phân.
Không ai có bất kỳ câu hỏi trước khi Tôi chuyển vào dòng chúng tôi đã viết trong
tìm kiếm nhị phân hoặc làm thế nào chúng tôi đã tìm ra những gì chúng tôi đã tìm ra?
Trước khi chúng tôi di chuyển trên, tôi cũng muốn chỉ ra rằng bằng và lớn, chúng tôi ánh xạ
chúng tôi mã giả một đến một vào mã của chúng tôi.
>> Chúng tôi đã có mà điều khó khăn để tìm ra các
bắt đầu và kết thúc.
Nhưng đã không tìm mà ra, bạn sẽ có văn bản khá nhiều
đang giống hệt nhau, tiết kiệm cho những đầu hai dòng.
Và sau đó bạn sẽ nhận ra khi bạn đã thực hiện nó trong kiểm tra và các trường hợp mà
bạn cần một cái gì đó khác.
Vì vậy, ngay cả khi bạn đã theo chúng tôi mã giả dòng dòng, bạn sẽ đã
nhận được tất cả, nhưng hai dòng mã bạn cần viết.
>> Và tôi muốn được sẵn sàng đặt cược rằng các bạn sẽ có tất cả figured mà ra
khá nhanh chóng, bạn cần thiết để đưa một số loại đánh dấu vào đó để tìm
ra mà bạn muốn.
Mà một lần nữa, là sức mạnh của làm pseudo-code trước thời hạn.
Vì vậy, chúng ta có thể làm logic đầu tiên, và sau đó chúng ta có thể lo lắng về cú pháp.
>> Đã có chúng tôi bị nhầm lẫn về logic trong khi cố gắng để viết mã này trong C,
chúng tôi đã có thể nhận tất cả các điều sai lầm.
Và sau đó chúng tôi được đặt câu hỏi về logic và cú pháp và chia lưới
tất cả chúng lại với nhau.
Và chúng tôi đã có thể nhận bị mất trong những gì có thể nhanh chóng trở thành một
vấn đề rất khó khăn.
Vì vậy, chúng ta hãy chuyển bây giờ để lựa chọn loại.
>> Chúng tôi có 20 phút còn lại.
Vì vậy, tôi có cảm giác chúng tôi sẽ không thể vượt qua tất cả các lựa chọn loại
và bong bóng sắp xếp.
Nhưng chúng ta ít nhất là nỗ lực để kết thúc lựa chọn sắp xếp.
Vì vậy, thực hiện lựa chọn loại sử dụng sau khai báo hàm.
>> Một lần nữa, điều này được lấy từ vấn đề đặt đặc điểm kỹ thuật.
Giá trị int là dấu ngoặc đơn, là một mảng các số nguyên.
Và int.n là kích thước của mảng đó.
Loại lựa chọn sẽ để sắp xếp mảng này.
>> Vì vậy, mỗi mô hình tinh thần của chúng tôi lựa chọn sắp xếp, chúng tôi kéo -
đầu tiên, chúng tôi đi qua danh sách đầu tiên thời gian, tìm số nhỏ nhất,
đặt nó ở đầu, tìm ra thứ hai số nhỏ nhất, đặt nó trong
vị trí thứ hai nếu chúng ta muốn loại thứ tự tăng dần.
Tôi không buộc bạn phải viết pseudo-mã ngay bây giờ.
>> Nhưng trước khi chúng ta làm mã như là một lớp trong năm phút, chúng ta sẽ viết
mã giả vì vậy chúng tôi có một số ý nghĩa của chúng ta đang đi.
Vì vậy, cố gắng để viết mã giả ngày của riêng bạn.
Và sau đó cố gắng để biến giả mã vào mã.
Chúng tôi sẽ làm điều đó như là một nhóm trong năm phút.
>> Và tất nhiên, cho tôi biết nếu bạn có bất kỳ câu hỏi.
>> HỌC SINH: Đó là nó?
>> JASON Hirschhorn: Xem cách xa bạn có thể nhận được trong hai phút nữa.
Tôi hiểu bạn sẽ không có thể hoàn thành.
Nhưng chúng ta sẽ đi qua này như là một nhóm.
>> Bạn tất cả các mã hóa như vậy [không nghe được], vì vậy tôi xin lỗi tạm dừng những gì bạn đang làm.
Nhưng hãy đi qua này như là một nhóm.
Và một lần nữa, tìm kiếm nhị phân, tất cả các bạn cho tôi một nếu không dòng mã.
Cảm ơn bạn cho điều đó.
Chúng ta sẽ làm điều tương tự ở đây, mã với nhau như một nhóm.
>> Vì vậy, lựa chọn loại - chúng ta hãy viết một số nhanh chóng mã giả.
Mỗi mô hình tâm thần, một người nào đó có thể cho tôi dòng đầu tiên của mã giả, xin vui lòng?
Tôi muốn làm gì?
>> HỌC SINH: Trong khi danh sách là ra lệnh.
>> JASON Hirschhorn: OK, trong khi danh sách là ra lệnh.
Và làm những gì bạn có nghĩa là "ra lệnh?"
>> HỌC SINH: Trong khi [nghe được]
chưa được sắp xếp.
>> JASON Hirschhorn: Trong khi danh sách là ra lệnh, chúng ta làm gì?
Cho tôi dòng thứ hai, xin vui lòng, Marcus.
>> HỌC SINH: Vì vậy, tìm tiếp theo số nhỏ nhất.
Điều này sẽ được thụt vào.
>> JASON Hirschhorn: Vì vậy, tìm tiếp theo số nhỏ nhất.
Và sau đó người khác?
Một khi chúng ta tìm thấy những nhỏ nhất tiếp theo số lượng, chúng ta làm gì?
Tôi sẽ nói tìm số lượng nhỏ nhất.
Đó là những gì chúng tôi muốn làm.
>> Vì vậy, tìm số nhỏ nhất.
Sau đó chúng ta làm gì?
>> HỌC SINH: [nghe được] để bắt đầu.
>> JASON Hirschhorn: Xin lỗi?
>> HỌC SINH: Đặt nó trong bắt đầu của danh sách.
>> JASON Hirschhorn: Vì vậy, đặt nó trong đầu danh sách.
Và chúng ta làm gì để điều đó là trong đầu
danh sách, phải không?
Chúng tôi ghi đè lên một cái gì đó.
Vì vậy, nơi nào chúng ta đặt điều đó không?
Yeah, Anna?
>> HỌC SINH: Trường hợp nhỏ nhất số là?
>> JASON Hirshhorn: Vì vậy, đặt đầu danh sách các nơi
số nhỏ nhất là.
Vì vậy, trong khi danh sách là ra lệnh, tìm số lượng nhỏ, đặt nó trong
đầu danh sách, đặt bắt đầu của danh sách mà
số nhỏ nhất là.
Marcus, bạn có thể nói lại dòng này trong khi danh sách là ra lệnh?
>> HỌC SINH: Trong khi các con số chưa được sắp xếp?
>> JASON Hirshhorn: OK, vì vậy để biết rằng những con số đã không được
sắp xếp, những gì chúng ta cần phải làm gì?
Bao nhiêu chúng ta cần phải đi qua danh sách này?
>> HỌC SINH: Vì vậy, tôi đoán một vòng lặp, hoặc trong khi, trong khi con số kiểm tra là ít
hơn chiều dài của danh sách?
>> JASON Hirshhorn: OK, đó là tốt.
Tôi nghĩ rằng tôi misphrased câu hỏi của tôi kém.
Tôi chỉ cố gắng để có được ở chúng ta sẽ phải đi
thông qua toàn bộ danh sách.
Vì vậy, trong khi danh sách là ra lệnh, đối với tôi, rất khó để lập bản đồ trên.
Nhưng về cơ bản, đó là cách Tôi nghĩ về điều này.
Đi qua toàn bộ danh sách, tìm số nhỏ nhất, đặt nó trong
bắt đầu - thực sự, bạn nói đúng.
Chúng ta hãy đặt cả hai.
>> Vì vậy, trong khi danh sách là ra lệnh, chúng tôi cần phải đi qua toàn bộ danh sách
một lần, tìm số, nơi nhỏ nhất nó vào đầu danh sách, đặt
đầu danh sách các nơi số nhỏ nhất là, và sau đó nếu
danh sách vẫn là ra lệnh, chúng tôi đã phải đi qua này
quá trình một lần nữa, phải không?
Đó là lý do tại sao lựa chọn sắp xếp, Big-O thời gian chạy lựa chọn loại, bất cứ ai?
>> HỌC SINH: n bình phương.
>> JASON Hirshhorn: n bình phương.
Vì như Marcus và tôi chỉ nhận ở đây, chúng ta sẽ phải
đi qua danh sách danh sách số lần.
Vì vậy, đi qua một cái gì đó chiều dài n n số lần
là trong thực tế n bình phương.
>> Vì vậy, đây là mã giả của chúng tôi.
Điều này có vẻ rất tốt.
Không ai có bất kỳ câu hỏi về giả?
Bởi vì thực sự lựa chọn loại nên có thể đến 12:59, mã từ
giả.
Vì vậy, bất kỳ câu hỏi về logic của giả?
Xin hỏi bây giờ.
>> Loại lựa chọn - trong khi danh sách là ra trật tự, chúng ta sẽ đi qua nó
và tìm thấy những nhỏ mỗi lần và đặt nó ở phía trước.
Vì vậy, trong khi danh sách là ra lệnh, có thể ai đó cho tôi rằng dòng mã người
đã không cho tôi một dòng mã nào, xin vui lòng?
Nghe có vẻ giống như cái gì?
>> HỌC SINH: Đó là một vòng lặp.
>> JASON Hirshhorn: Có vẻ như một vòng lặp.
OK, bạn có thể cho tôi cho vòng lặp?
Cho -
>> HỌC SINH: i Equals 0.
>> JASON Hirshhorn: i hoặc -
được những gì chúng ta thiếu?
Những gì diễn ra ở đây?
>> HỌC SINH: Int.
>> JASON Hirshhorn: Chính xác.
(Int i = 0; -
>> HỌC SINH: i <n; i + +).
>> JASON Hirshhorn: Đóng đinh nó, Jeff.
Chúng tôi sẽ thông qua danh sách, phải không?
Chúng tôi đã nhìn thấy mã trước.
Hoàn hảo.
Vì vậy, chúng ta hãy đặt dấu ngoặc nhọn của chúng tôi ở đây.
Tôi sẽ đặt một số dấu ngoặc nhọn ở đây.
>> Vì vậy, trong khi nó là 0, chúng ta cần phải đi thông qua toàn bộ danh sách.
Vì vậy, mỗi lần chúng tôi đi qua danh sách, những gì chúng ta muốn theo dõi?
>> HỌC SINH: Nếu bất kỳ giao dịch hoán đổi được thực hiện.
>> JASON Hirshhorn: Tìm số lượng nhỏ nhất.
Vì vậy, có lẽ chúng ta nên theo dõi số lượng nhỏ mỗi lần.
Vì vậy, dòng tôi có thể làm để theo dõi số lượng nhỏ nhất?
Aleha, làm thế nào tôi có thể giữ theo dõi một cái gì đó?
>> HỌC SINH: Bắt đầu một biến mới.
>> JASON Hirshhorn: Bắt đầu một biến mới.
Vì vậy, hãy tạo ra một biến.
Loại gì?
>> HỌC SINH: Int.
>> JASON Hirshhorn: Int.
Chúng ta hãy gọi nó là nhỏ nhất.
Và những gì nó bằng khi chúng tôi chỉ là bắt đầu?
Chúng tôi đã không trải qua danh sách được nêu.
Chúng tôi đang ở phần đầu tiên của danh sách lần đầu tiên của chúng tôi thông qua.
Những gì hiện nó bằng nhau, số nhỏ nhất?
>> HỌC SINH: Các giá trị i.
>> JASON Hirshhorn: Các giá trị i.
Đó là âm thanh chính xác, phải không?
Số lượng nhỏ ở đầu là nơi mà chúng tôi có.
Vì vậy, bây giờ chúng tôi có nhỏ nhất của chúng tôi, và chúng tôi cần đi qua toàn bộ danh sách và
so sánh này nhỏ nhất để tất cả mọi thứ khác.
Do đó, chúng tôi đi qua danh sách một lần nữa?
Michael?
>> HỌC SINH: Bạn cần phải chắc một vòng lặp.
>> JASON Hirshhorn: Một vòng lặp.
Chúng ta hãy làm điều đó.
Cung cấp cho tôi một số mã.
>> HỌC SINH: Đối với loop -
cho nhỏ nhất -
chỉ int j, bạn có thể nói gì?
= 0; như vậy mà -
>> JASON Hirshhorn: Vâng, nếu chúng ta muốn đi qua toàn bộ danh sách -
>> HỌC SINH: j <n, j + +).
>> JASON Hirshhorn: Fantastic.
Chúng ta sẽ đi qua cho vòng lặp lại một lần nữa.
Và làm thế nào để chúng ta tìm thấy số nhỏ nhất?
Tom?
Chúng tôi có số lượng nhỏ nhất hiện nay, vậy làm thế nào chúng ta tìm thấy nhỏ nhất mới?
>> HỌC SINH: Chúng tôi có thể kiểm tra nhỏ nhất số chúng ta có lớn hơn
giá trị khung j.
>> JASON Hirshhorn: Vì vậy, nếu nhỏ nhất là lớn hơn giá trị khung j.
Vì vậy, nếu nhỏ nhất hiện nay của chúng tôi lớn hơn -
Tôi sẽ di chuyển hai dòng mã ra có cho một thứ hai.
Bởi vì trước khi chúng tôi làm bất cứ trao đổi, chúng tôi cần phải đi qua toàn bộ danh sách.
Vì vậy, giả này nên thực sự được ở bên ngoài mà bên trong vòng lặp.
Vì vậy, đi qua toàn bộ danh sách.
Nếu nhỏ nhất lớn hơn giá trị j thì những gì?
>> HỌC SINH: Sau đó, nhỏ nhất bằng giá trị j.
>> JASON Hirshhorn: Fantastic.
Một câu hỏi nhanh chóng -
lần đầu tiên chúng tôi đi qua vòng lặp này, i sẽ bằng 0, j đang xảy ra
để bằng 0 khi chúng ta ở đây.
Vì vậy, chúng ta sẽ được so sánh một số cho chính nó.
Là hiệu quả?
Không, nó không thực sự hiệu quả.
Vì vậy, hiện j của chúng tôi cần phải đi từ 0 đến n mỗi lần?
Chúng ta luôn luôn cần phải kiểm tra thông qua toàn bộ danh sách?
[Nghe được]?
>> HỌC SINH: Bắt đầu với tôi để thay thế.
>> JASON Hirshhorn: j lon bắt đầu với những gì?
>> HỌC SINH: i.
>> JASON Hirshhorn: j có thể bắt đầu với tôi.
Vì vậy, bây giờ chúng ta bắt đầu so sánh với những gì chúng tôi đang ở trên.
Nhưng thậm chí sau đó, là khi hiệu quả nhất có thể?
>> HỌC SINH: i + 1.
>> JASON Hirshhorn: i + 1 có vẻ là hiệu quả nhất, bởi vì chúng tôi
đã có tôi.
Chúng ta nói rằng là nhỏ nhất trong dòng 15.
Chúng ta sẽ bắt đầu với tiếp theo tự động.
Vì vậy, chúng tôi đi qua vòng lặp.
Chúng tôi sẽ đi qua từng thời gian.
Chúng tôi sẽ đi qua một số lần.
Bây giờ chúng tôi đã nhận được thông qua này bên trong vòng lặp.
Chúng tôi có giá trị nhỏ nhất tiết kiệm.
Chúng ta cần phải đặt nó ở bắt đầu của danh sách.
Vì vậy, làm thế nào để tôi đặt nó ở bắt đầu của danh sách?
Các biến chỉ là những gì đến đầu danh sách?
Chúng ta đang ở bên ngoài này cho vòng lặp, vì vậy những gì đề cập đến
bắt đầu của danh sách?
>> HỌC SINH: Các giá trị i.
>> JASON Hirshhorn: Chính xác ngay.
Giá trị i là sự khởi đầu của -
hoặc xin lỗi, không phải là sự khởi đầu.
Đó là khó hiểu.
Đó là nơi chúng ta đang ở đầu phần phân loại danh sách.
Vì vậy, giá trị i.
Và những gì hiện có bằng nhau?
>> HỌC SINH: nhỏ nhất.
>> JASON Hirshhorn: Giá trị tôi bằng những gì?
>> HỌC SINH: nhỏ nhất.
>> JASON Hirshhorn: nhỏ nhất.
Chính xác.
Vì vậy, chúng tôi đặt nó ở đầu danh sách, và bây giờ chúng tôi cần phải đặt
đầu danh sách các nơi số lượng nhỏ nhất là.
Vậy làm thế nào để tôi viết nơi số nhỏ nhất là?
Giá trị của những gì?
>> HỌC SINH: 0.
>> JASON Hirshhorn: Các nhỏ số là 0?
>> HỌC SINH: Vâng.
>> JASON Hirshhorn: Nếu nhỏ nhất con số này là vào cuối
danh sách phân loại này?
>> HỌC SINH: Xin lỗi, những gì là câu hỏi?
>> JASON Hirshhorn: ở đâu số lượng nhỏ nhất?
Chúng tôi đã nhỏ và đặt nó ở bắt đầu, với dòng này ngay tại đây.
>> HỌC SINH: Nó cần phải có được lưu trữ trong một số -
>> HỌC SINH: Giá trị j.
>> JASON Hirshhorn: Vâng, đó là không nhất thiết phải giá trị j.
Nó thậm chí không tồn tại vào thời điểm này.
>> HỌC SINH: Bạn phải khai báo một biến trước đó và
sau đó gán nó vào -
khi bạn tìm số nhỏ nhất, chỉ định các chỉ số của con số đó để
một số biến hoặc một cái gì đó như thế.
>> JASON Hirshhorn: Vì vậy, có thể bạn nói rằng một lần nữa?
>> HỌC SINH: Vì vậy, nơi bạn khai báo int nhỏ nhất, bạn cũng nên khai báo int
chỉ số nhỏ nhất = i, hoặc một cái gì đó như thế.
>> JASON Hirshhorn: Vì vậy, nơi tôi int nhỏ nhất, tôi không nên chỉ theo dõi
giá trị nhưng vị trí.
int smallest_location = trong này trường hợp, chúng tôi sẽ chỉ làm tôi.
Chúng ta cần phải biết nó ở đâu.
Chúng tôi đã đến cuối của mã này, và chúng tôi nhận ra chúng tôi không biết nơi nó được.
Và vì vậy một lần nữa, chúng tôi đang lập bản đồ trên 1-1.
Các bạn mã hóa này theo ý chí của bạn có thể nhận được cùng một vấn đề.
Làm thế nào heck để tôi tìm thấy nó?
Và sau đó bạn nhận ra, chờ đợi, tôi cần phải theo dõi điều đó.
>> Vì vậy, nếu nhỏ nhất là lớn hơn hơn giá trị j.
Chúng tôi thiết lập nhỏ nhất tương đương với giá trị j.
Những gì khác chúng ta cần phải thay đổi?
Constantin, những gì khác làm chúng ta cần phải thay đổi?
>> HỌC SINH: Các địa điểm.
>> JASON Hirshhorn: Chính xác.
Vì vậy, cho tôi dòng trong mã.
>> HỌC SINH: smallest_location = j.
>> JASON Hirshhorn: Chính xác.
Và sau đó xuống ở cuối, nếu chúng ta muốn đặt đầu danh sách các nơi
số lượng nhỏ nhất là, làm thế nào Chúng ta đề cập đến nơi
số nhỏ nhất là?
Marcus?
>> HỌC SINH: Số lượng nhỏ nhất là nằm ở vị trí nhỏ nhất.
>> JASON Hirshhorn: Vì vậy, theo giá trị smallest_location.
Và làm những gì chúng tôi đặt ở đó?
Sự khởi đầu của danh sách, đó là những gì?
>> HỌC SINH: Vâng, chúng tôi không thực sự biết nữa bởi vì chúng tôi ghi đè lên.
Vì vậy, nó là một địa điểm trao đổi của hai dòng?
Nếu bạn chuyển đổi hai dòng xung quanh.
>> JASON Hirshhorn: OK, vì vậy chúng tôi không nữa, bởi vì chúng tôi đã thiết lập lại đường dây
trước khi giá trị tôi đến nhỏ nhất.
Vì vậy, chúng tôi bị mất rằng giá trị ban đầu.
Vì vậy, bạn nói trao đổi hai dòng.
Vì vậy, bây giờ đặt đầu danh sách có số lượng nhỏ nhất là.
Vì vậy, smallest_location bằng giá trị i.
Đó là di chuyển đầu này phần phân loại của danh sách với
vị trí nhỏ nhất.
Và sau đó vào các giá trị i chúng tôi đang di chuyển con số nhỏ nhất.
>> Điều đó làm cho tinh thần lý do tại sao chúng tôi bị buộc phải trao đổi đó?
Chúng tôi sẽ ghi đè giá trị đó - một điều có thể bạn sẽ có
tìm ra và tìm thấy trong GDP.
Vì vậy, chúng tôi đã đưa về chăm sóc tất cả các giả.
Có điều gì khác chúng tôi cần phải viết ở đây?
Ai cũng có thể nghĩ về bất cứ điều gì?
>> HỌC SINH: Làm thế nào để bạn biết khi bạn đang thực hiện?
>> JASON Hirshhorn: Làm thế nào để chúng tôi biết khi nào chúng tôi đang thực hiện?
Lớn câu hỏi.
Vì vậy, làm thế nào để chúng ta biết khi nào chúng tôi đang thực hiện.
>> HỌC SINH: Tạo một biến để giữ số của nếu có một trao đổi được thực hiện hay không
và đi qua một đường chuyền.
>> JASON Hirshhorn: OK.
Điều đó sẽ làm việc trong bong bóng sắp xếp.
Nhưng để lựa chọn sắp xếp, nếu chúng ta không làm cho một trao đổi, mà chỉ có thể là
bởi vì giá trị nhỏ nhất là trong đó vị trí bên phải của nó.
Chúng ta có thể có một danh sách 1, 2, 4, 3.
Lần thứ hai thông qua chúng tôi sẽ không thực hiện bất kỳ giao dịch hoán đổi.
Chúng tôi sẽ vào số 2, nhưng chúng tôi sẽ vẫn cần phải tiếp tục đi.
Vì vậy, chúng ta cần phải theo dõi khi nào chúng tôi đang thực hiện, hay chúng ta chỉ muốn đi
cho đến khi điều này được hoàn thành?
>> HỌC SINH: Chúng tôi chỉ có thể đi cho đến khi nó kết thúc.
>> JASON Hirshhorn: Chúng ta có thể chỉ đi cho đến khi này kết thúc.
Trong bong bóng sắp xếp, bạn chính xác, Jeff và Aleha, với giải pháp của bạn -
nó là rất tốt để theo dõi bao nhiêu giao dịch hoán đổi bạn đã thực hiện, bởi vì trong bong bóng
sắp xếp, nếu bạn làm trong thực tế làm cho không có giao dịch hoán đổi, bạn đang thực hiện và bạn có thể có thể cắt của bạn
vấn đề xuống một chút.
Nhưng để lựa chọn sắp xếp, bạn đã thực sự đã đi qua để kết thúc
liệt kê mỗi lần xung quanh.
>> Vì vậy, đây là.
Chúng tôi có hai phút còn lại.
Chúng ta hãy làm tất cả.
Hãy để tôi chỉ cần mở Tìm ở đây và làm cho chắc chắn tôi là trong thực tế, gọi điện thoại lên -
Tôi không gọi bong bóng sắp xếp.
Hãy thay đổi điều này để lựa chọn loại.
làm cho tất cả. / tìm thấy.
Chúng ta hãy tìm 42.
Thời gian này chúng ta sẽ phải vượt qua một danh sách phân loại, bởi vì nó phải sắp xếp
đầu tiên, mỗi mã find - nên sắp xếp đầu tiên sử dụng chức năng sắp xếp của chúng tôi và sau đó
tìm kiếm một cái gì đó.
Ngón tay vượt qua tất cả mọi người.
>> Ôi trời.
Whoa, trái tim tôi đập.
Vì vậy, đó là chính xác.
Trong thực tế, nếu chúng ta chạy nhiều này rộng rãi, mã, như xa như tôi có thể
nói, là hoàn toàn chính xác.
Có một số gợi ý Tôi sẽ có cho bạn.
Ví dụ, 15 và 16 có vẻ một chút dư thừa.
Nó có vẻ như bạn không nhất thiết phải cần phải tiết kiệm cả những người.
Nếu bạn có vị trí nhỏ nhất, bạn có thể dễ dàng tìm thấy những giá trị nhỏ nhất của
chỉ cần gõ giá trị của tôi.
>> Vì vậy, nếu tôi được là để được phân loại mã của bạn, mà tôi sẽ trong thực tế có thể, tôi sẽ
có thể đưa ra một điểm nếu bạn bao gồm cả hai, bởi vì bạn
không cần cả hai.
Nếu bạn có vị trí, bạn có thể rất dễ dàng có được giá trị.
Và có vẻ như một chút lạ để lưu trữ cả hai.
Thậm chí có thể không có một điểm, nhưng chắc chắn nhận xét rằng đó là có thể
không phải là một sự lựa chọn phong cách bạn cần phải thực hiện.
Tất nhiên, các mã vẫn còn chạy hoàn toàn tốt.
>> Vì vậy, tiếc là chúng tôi đã không được để bong bóng sắp xếp.
Tôi xin lỗi về điều đó.
Chúng tôi đã kết thúc lựa chọn sắp xếp.
Không ai có bất kỳ câu hỏi cuối cùng về việc lựa chọn loại?
>> OK, trước khi chúng tôi đi ra, tôi muốn bạn để mở ra trình duyệt Chrome của mình.
Xin lỗi, đó chỉ là một plug trắng trợn cho một loại trình duyệt internet.
Bạn có thể mở bất kỳ loại trình duyệt, nhưng nó có thể sẽ là Chrome.
Và đi đến trang web này sau -
sayat.me/cs50.
Nếu bạn không gõ vào máy tính của bạn ngay bây giờ, bạn rõ ràng
không làm việc đó, Tom.
>> Và hãy làm điều đó một trong hai bên phải ngay bây giờ hoặc trong giờ tiếp theo -
cho tôi một số thông tin phản hồi.
Đây chỉ là phần hai.
Chúng tôi có nhiều hơn với nhau, vì vậy tôi có rất nhiều phòng để cải thiện.
Tôi hy vọng cũng đã làm một số điều tốt.
Vì vậy, bạn có thể làm cho tôi cảm thấy tất cả các xấu, nhưng nếu bạn cũng muốn cho tôi một mặt cười
khuôn mặt, tôi sẽ đánh giá cao điều đó là tốt.
Điền vào đó in
>> Và với một phút còn lại, đó là ba tuần.
Tôi sẽ đứng bên ngoài một chút nếu bạn có bất kỳ câu hỏi.
Tôi sẽ gặp các bạn trong giảng vào ngày mai.