>> เจสัน Hirschhorn: ยินดีต้อนรับ ถึงสามสัปดาห์ทุกคน
เรามีงานยุ่ง แต่ที่น่าตื่นเต้น ส่วนข้างหน้าของเรา
ดังนั้นก่อนเพราะเราได้ทำบางอย่าง ความคืบหน้ากับหลักสูตร แต่เรายังคง
มีจำนวนมากของการเรียนรู้ที่ต้องทำผม จะแสดงให้พวกคุณทรัพยากรบางอย่าง
ที่ควรพิสูจน์ให้เป็นอย่างไม่น่าเชื่อ ประโยชน์ที่คุณไม่เพียง แต่วิธีการของคุณ
ชุดปัญหา แต่ยังย่อยทั้งหมดของ วัสดุที่เราจะให้พวกคุณใน
การบรรยายและกางเกงขาสั้นและส่วน
>> แล้วเรากำลังจะใช้จ่ายครั้งแรก 20 ถึง 25 นาทีส่วนไปกว่า
GDB ซึ่งคุณอาจหรือไม่อาจมี ใช้ที่จุดนี้ แต่มันเป็น
เครื่องมือที่มีประโยชน์อย่างไม่น่าเชื่อว่าจะ ช่วยให้คุณแก้ปัญหาโปรแกรมของคุณ
จำนวนมากของคุณอาจจะใช้ printf ใน ตรงกลางของโปรแกรมของคุณที่จะคิด
สิ่งที่ตัวแปรเท่ากับ
GDB จะดียิ่งขึ้นกว่า printf และ ไม่ได้กรูขึ้นรหัสของคุณเพราะคุณ
ทำงานบนแฟ้มที่ปฏิบัติการ
ดังนั้นเราจะไปกว่า 10 เป็นประโยชน์มากที่สุด คำสั่งที่คุณต้องการสำหรับ GDB และเรา
จะไปในการออกกำลังกายร่วมกันเพื่อ ในปัญหาตั้งสามและเกินกว่าคุณ
สามารถใช้ GDB ที่จะช่วยแก้ปัญหา โปรแกรมของคุณ
และในที่สุดเราจะไปกว่าบาง การเรียงลำดับและขั้นตอนวิธีการค้นหา
ที่คุณเห็นในการบรรยายและเรามี จะรหัสจริงไม่เพียง
pseudocode แต่รหัสการค้นหาแบบไบนารี จัดเรียงฟองและการเลือกการจัดเรียง
>> ดังนั้นครั้งแรกที่ฉันต้องการจะไป เหนือทรัพยากร
นี้เป็นรายการที่ครอบคลุมและเป็น ตัวอักษรขนาดเล็กเพราะผมมีจำนวนมากที่จะ
พอดีกับที่นี่
แต่เหล่านี้ไม่เพียง แต่จะช่วยให้คุณ อีกครั้งกับชุดปัญหาและ
ข้อมูลย่อยที่คุณได้เรียนรู้ แต่ แน่นอนเวลามาตอบคำถามเหล่านี้จะ
จะเป็นประโยชน์อย่างไม่น่าเชื่อ
ดังนั้นครั้งแรกที่บันทึกการบรรยาย
ถ้าคุณไปที่ cs50.net/lectures และ เลื่อนไปสัปดาห์ที่เฉพาะเจาะจงและวัน
คุณจะเห็นว่ามีการบันทึกสำหรับแต่ละ บรรยายซึ่งไม่เพียง
บันทึก แต่ฉบับแก้ไขของ สิ่งที่ถูกกล่าวถึงในการบรรยายที่มีรหัส
เกร็ดเล็กเกร็ดน้อยและ tidbits ประโยชน์อื่น ๆ
ผมขอแนะนำให้ไปกว่านั้น
แล้วเป็นอย่างดีมีรหัสแหล่งที่มา จากการบรรยายแต่ละครั้ง
และอีกครั้งสไลด์เหล่านี้ยังจะมี ออนไลน์ที่ cs50.net/sections
คืนนี้
>> ดังนั้นสองเป็นกางเกงขาสั้นในแต่ละสัปดาห์ที่ หัวข้อที่ครอบคลุมมัก 5-15
นาทีในความยาว
และผู้ที่หวังว่าจะให้คุณ ไพรเมอร์ที่ดีในหัวข้อที่แตกต่างกัน
สาม -
และนี่คือแบรนด์ใหม่นี้ ปี - เป็น study.cs50.net
หากคุณยังไม่ได้ตรวจสอบมันออกผม ขอแนะนำให้คุณทำเช่นนั้น
คุณจะได้รับการเลือกหัวข้อ
เรามีหลายสิบของหัวข้อที่เกี่ยวกับการมี
ดังนั้นตัวอย่างเช่นคุณสามารถเลือกฟังก์ชั่น
มันจะช่วยให้คุณสไลด์บาง และบันทึกการทำงาน
เหล่านั้นเป็นจริงภาพนิ่งที่ TFs มีการส่งเสริมให้ใช้ในระหว่างเรา
การนำเสนอผลงานในส่วน
นอกจากนี้ยังมีเคล็ดลับและเทคนิคในการจัดการ กับการทำงานและมี
ปัญหาการปฏิบัติที่จะช่วยให้ คุณทำงานกับฟังก์ชั่น
นอกจากนี้เรายังให้คุณเชื่อมโยงไปยังสั้น ฟังก์ชั่นและเวลาที่ฟังก์ชั่น
ได้มาในการบรรยาย
ดังนั้น study.cs50.net แบรนด์ใหม่นี้ ปีเป็นทรัพยากรที่ยอดเยี่ยม
>> ต่อไปผมจะมีคนซึ่งเป็นคู่มือ คำสั่งที่คุณสามารถเรียกใช้ที่
บรรทัดคำสั่ง
ดังนั้นถ้าคุณมีคำถามใด ๆ เกี่ยวกับ คำสั่งเช่นแรนด์ซึ่งเรา
พบเมื่อสัปดาห์ที่แล้วในส่วน และคุณจะพบใน
ปัญหาของคุณตั้งเมื่อจะผ่าน สร้างรหัส แต่ถ้าคุณพิมพ์คน
แรนด์, คุณจะได้รับหน้าเว็บที่ จะบอกคุณทั้งหมดเกี่ยวกับแรนด์
มันช่วยให้คุณมีสิ่งที่ต้องใช้ พารามิเตอร์ก็จะเป็นผลตอบแทน
ชนิดและคำอธิบายสั้น ๆ ฟังก์ชั่นที่
>> เพื่อตรวจสอบแรนด์
ก็สามารถที่จะพูดมากไปหน่อยและสับสน ดังนั้นบางครั้งที่ผมพบว่า
เพียง Googling สิ่งที่ฉันต้องการที่จะรู้ว่า วิธีที่ดีที่สุดที่จะหาคำตอบ
ดังนั้นการปฏิบัติด้วย Google
ได้รับสิ่งที่ดีที่ Google
มันจะกลายเป็นเพื่อนที่ดีที่สุดของคุณ
>> เช่นเดียวกับที่ Google ถ้าคุณไม่สามารถหามัน บน Google, cs50.net/discuss ก็
ฟอรั่มการสนทนา
โอกาสที่ถ้าคุณมีคำถามหนึ่ง 700 + เพื่อนของคุณนอกจากนี้ยังมีที่
คำถามและอาจจะมีการถาม มันมีอยู่แล้วในหารือ
ฟอรั่มและมีมันตอบ
ดังนั้นหากคุณมีคำถามทั่วไปหรือ คุณมีคำถามที่คุณคิดว่า
บางทีคนอื่นอาจจะใช้เป็น ตรวจสอบ cs50.net/discuss
>> ในที่สุดสองถ้าคุณต้องการที่จะ พูดคุยกับมนุษย์สำนักงานจริง
ชั่วโมงวันจันทร์ถึงศุกร์
นอกจากนี้ยังมีเวลาทำงานออนไลน์ สำหรับนักเรียนนามสกุล
และสุดท้าย แต่ไม่แน่นอนอย่างน้อย ฉันเครื่องหมายอัศเจรีย์
พวกคุณทุกคนมีข้อมูลที่ติดต่อของฉัน
ถ้าคุณต้องการอะไรที่ไม่เคยโปรด ลังเลที่จะติดต่อฉัน
มักจะรู้สึกอิสระที่จะทำเช่นนั้น
น้อยมากของคุณได้เพิ่มฉันใน Gchat, เพื่อให้ได้รับการที่น่าผิดหวัง
แต่หวังที่จะเปลี่ยนระหว่าง ส่วนต่อไปนี้และ
คำถามใด ๆ เพื่อให้ห่างไกลในทรัพยากรหรือไม่
ยิ่งใหญ่
>> สุดท้ายปลั๊กอีก ข้อเสนอแนะ sayat.me/cs50
คุณสามารถให้ข้อเสนอแนะที่ไม่ระบุชื่อฉัน เกี่ยวกับวิธีการที่ฉันทำ
ที่เป็นประโยชน์จริงๆเมื่อสัปดาห์ที่แล้ว
ฉันมีคู่ของความเห็นจากพวกคุณ หลังจากที่ส่วนบวกจาก
นักเรียนคนอื่น ๆ ที่เฝ้าดูมัน ในช่วงสัปดาห์และมัน
เป็นประโยชน์อย่างไม่น่าเชื่อ
ฉันจะพยายาม จำกัด การใช้งานของฉัน คำว่า "หวาน" แต่ฉันจะแสดงให้ฉัน
ความกระตือรือร้นและความตื่นเต้น งั้น
แต่มีอื่น ๆ เพิ่มเติม ตอบสำคัญ,
ทั้ง pluses และเดลต้า
ดังนั้นโปรดผมให้พวกคุณความคิดเห็นที่ ในชุดปัญหาของคุณ
อย่าลังเลที่จะให้ฉันความคิดเห็น เกี่ยวกับการเรียนการสอนของฉัน
ฉันอยู่ที่นี่สำหรับคุณผู้ชาย
>> ยิ่งใหญ่
นั่นคือทั้งหมดที่ฉันมี ส่วนแรก
ไม่มีใครมี คำถามเพื่อให้ห่างไกล
และฉันมีบันทึกสำหรับ ศูนย์ควบคุม
นักเรียนได้ขยาย messaged ฉัน กล่าวว่าพวกเขาไม่ได้รับเสียงใด ๆ
แต่ที่ออกมาจากอำนาจของฉันในการแก้ไขปัญหา
เพื่อหวังที่จะได้รับ การแก้ไขในไม่ช้า
ถ้าคุณกำลังรับชมออนไลน์สวัสดี แต่คุณไม่สามารถได้ยินเสียงฉัน
>> ดังนั้นก่อนที่เราจะไป ผ่านไป GDB
GDB ที่ผมเป็นนัยก่อนหน้านี้ เป็นเครื่องมือการแก้จุดบกพร่อง
ดีกว่า printf
ดังนั้นการเริ่มต้นกับ GDB พวกคุณถ้า คุณต้องการที่จะเปิดขึ้นเครื่องของคุณ
และนำไฟล์ที่ผมส่งไปยังคุณ ก่อนหน้านี้ - ไฟล์นี้จะเป็น
พร้อมใช้งานออนไลน์ในบิต -
และเรียกใช้ GDB. / ชื่อของไฟล์
ครั้งแรกของหลักสูตรที่คุณจะต้องรวบรวม ไฟล์ GDB เพราะใช้งานได้เฉพาะบน
แฟ้มที่ปฏิบัติการได้
>> แต่ถ้าคุณเคยต้องการที่จะเริ่มต้น GDB, สิ่งแรกที่คุณทำ
คุณเรียกใช้ GDB. / ซีซาร์
เพื่อให้เป็นชื่อของโปรแกรมที่เรากำลัง จะไปกับมันตอนนี้
ดังนั้นฉันจะเขียนให้ซีซาร์ที่ จะให้ฉันแฟ้มที่ปฏิบัติการ
ไฮไลต์อยู่ที่นี่ในสีเขียว
แล้วฉันจะทำงาน GDB. / ซีซาร์
>> และมีคุณไป
คุณจะเห็นเรามีข้อความบางส่วนที่บอกผม เกี่ยวกับรุ่นของ GDB, ให้ฉัน
ข้อมูลการรับประกันบางอย่างแล้วเรา มีให้จีดีพีซึ่งมีลักษณะการจัดเรียง
เช่นบรรทัดคำสั่งแจ้งเรา แต่คุณจะเห็นมันเปิด
paren, GDB, วงเล็บปิด
ก่อนที่เราจะดำเนินต่อไปและการแก้ปัญหาไฟล์นี้ ที่ผมส่งไปยังทุกท่านให้ดูที่
คำสั่งที่มีประโยชน์บางอย่างเพื่อให้เรามีความรู้สึก ของสิ่งที่เรากำลังจะครอบคลุม
>> คำสั่งเหล่านี้มีการระบุไว้ที่นี่ใน ลำดับที่ผมมักจะใช้พวกเขา
ดังนั้นผมจึงเริ่มต้นโปรแกรมของฉันโดยใช้ GBD. / ชื่อของโปรแกรม
ในกรณีนี้ซีซาร์
และแล้วสิ่งแรกที่ผมทำ 99.9% ของเวลาที่จะหยุดพักประเภทหมายถึง
ที่กำหนดจุดพักที่หลัก
เป็นหลักสิ่งที่คุณกำลังทำมี เป็นโปรแกรมที่จะไปหยุดที่
หลักเพื่อให้คุณสามารถเริ่มต้นการตรวจสอบมันเส้น โดยสายมากกว่าที่ทำงานอยู่ทั้งหมด
ทางผ่าน
คุณสามารถทำลายที่จุดที่แตกต่างกันใน รหัสของคุณ แต่หลักทั่วไป
สถานที่ที่ดีในการเริ่มต้น
>> คำสั่งต่อไปที่ผมทำงานเป็นระยะ
ที่จะเริ่มต้นโปรแกรมการทำงานและ ถ้าคุณต้องป้อนบรรทัดคำสั่ง
ข้อโต้แย้งที่คุณเรียกใช้คำสั่งที่
ทำงานด้วยความขัดแย้ง
ดังนั้นตั้งแต่ที่เรากำลังจะไปรุ่น ของ C ซึ่งเป็นโปรแกรมที่พวกคุณ
เขียน pset สอง -
หนึ่งนี้แน่นอนมีข้อบกพร่องบางอย่าง ในนั้นที่หวังว่าเราจะพบว่า -
เรากำลังจะวิ่งด้วยคำสั่งบางอย่าง อาร์กิวเมนต์บรรทัดเพราะซีซาร์
เป็นพวกคุณรู้ต่อปัญหา กำหนดสเปคจะใช้เวลาบางส่วน
อาร์กิวเมนต์บรรทัดคำสั่ง
>> คู่ถัดไปของคำสั่งต่อไป หนึ่งเรียกว่าจริงต่อไป
อย่างใดอย่างหนึ่งที่จะพาคุณทีละบรรทัด ผ่านโปรแกรมของคุณ
ดังนั้นการกดปุ่ม n แล้​​วใส่จะนำคุณ ยังบรรทัดถัดไปการดำเนินงาน
บรรทัดก่อนหน้า
ขั้นตอนที่ไม่เพียง แต่จะนำคุณไป บรรทัดถัดไป แต่มัน
จะนำคุณภายในฟังก์ชั่น
ดังนั้นถ้าคุณมีการเขียนฟังก์ชั่นใน รหัสของคุณหรือถ้าคุณต้องการที่จะสำรวจ
ที่ผมยกตัวอย่างเช่นคุณสามารถกด s และ แทนที่จะไปบรรทัดถัดไปของ
แฟ้มที่คุณกำลังจะผ่านที่ถูกต้อง ตอนนี้คุณจริงจะก้าวเข้าสู่
ฟังก์ชั่นนี้และดูรหัส
>> รายการจะแสดงในผู้เป็นมิตร รูปแบบที่ 10 หรือเพื่อให้เส้นรอบ
ที่คุณกำลังอยู่ในรหัสของคุณ จริงเพื่อให้คุณสามารถดูไฟล์
แทนที่จะต้องสลับไป มาระหว่างมุมมองที่แตกต่างกัน
พิมพ์เป็นเหมือน printf, เป็นชื่อของมันหมายถึง
นั่นแสดงให้เห็นว่าตัวแปรเท่ากับ
>> ชาวบ้านที่ข้อมูลที่เป็นประโยชน์จริงๆ
นี้เป็นรุ่นพิเศษของการพิมพ์
ชาวบ้านที่แสดงให้คุณเห็นข้อมูลทั้งหมดของท้องถิ่น ตัวแปรพิมพ์พวกเขาทั้งหมดออกสำหรับคุณ
ที่มีอยู่ในปัจจุบัน
ดังนั้นผมทั่วไปแทนที่จะต้อง พิมพ์สี่ตัวแปรที่ฉัน
อยากรู้อยากเห็นเกี่ยวกับถ้าฉันอยู่ในห่วงสำหรับ ตัวอย่างเช่นฉันเพียงแค่เขียนที่ชาวบ้านข้อมูล
และมันจะแสดงให้ฉันสิ่งที่ฉันเคาน์เตอร์ของฉัน เท่ากับเป็นอาร์เรย์ที่ฉัน
ทำงานเท่ากับ
>> สุดท้ายให้ดำเนินการต่อ
พิมพ์หยุดหยุดคุณ ที่จุดพัก
คุณสามารถเดินผ่านสายโดย สอดคล้องกับขั้นตอนต่อไปและ
ยังคงทำงานโปรแกรมต่อไปของคุณ ทำลายจุดหรือจนกว่าจะเสร็จสิ้นหาก
มีจุดพักไม่มาก
ปิดการใช้งานเอาจุดพักถ้าคุณ ตัดสินใจหยุดพักที่หลักคือ
ไม่เหมาะสมที่คุณต้องการ ตั้งไว้ที่อื่น
และในที่สุดก็ q, เลิกรับจาก GDB
>> ดังนั้นโปรแกรมนี้. / ซีซาร์เราจะไป มองผ่านได้ในขณะนี้และเรา
จะใช้ GDB จะหา ข้อบกพร่องในโปรแกรมนี้
ฉันวิ่งโปรแกรมนี้ก่อนหน้านี้กับ ตรวจสอบ 50 และฉันมีหนึ่งหน้านิ่วคิ้วขมวด
ทุกอย่างมันมีอยู่ก็รวบรวมมัน ผ่านการทดสอบจำนวนมาก แต่สำหรับ
ด้วยเหตุผลบางอย่างมันไม่ผ่านที่ห้า การทดสอบการเปลี่ยน BARFOO, ตัวพิมพ์ใหญ่ทั้งหมดใน
E-D-U-I-R-R, ตัวพิมพ์ใหญ่ทั้งหมด ใช้สามเป็นสำคัญ
ผมสวยใกล้
ฉันได้ออกตามตัวอักษรอย่างใดอย่างหนึ่ง
จึงมีบางอย่างผิดพลาดเล็ก ๆ ในที่นี่
ฉันมองผ่านรห​​ัสของฉัน
ฉันไม่สามารถคิดออก
หวังว่าพวกคุณจะช่วยฉัน คิดออกว่าปัญหานี้เป็น
>> เพื่อให้เป็นความผิดพลาดของเรา ค้นหา
ขอย้ายลงใน GDB
อีกครั้งผมเคยทำงาน GDB. / ซีซาร์ ดังนั้นตอนนี้เราอยู่ใน GDB
และสิ่งที่เป็นครั้งแรกที่ สิ่งที่ฉันควรทำอย่างไร
ฉันได้เพียงแค่ป้อน GDB
ใครบางคนให้ฉันดี คำสั่งที่จะเข้าสู่
>> นักเรียน: ทะลุหลัก
>> เจสัน Hirschhorn: ทะลุหลัก
น่าอัศจรรย์
ลองพิมพ์คำว่าค่ะ
พวกคุณสามารถดูได้ที่นี่หรือทำตาม พร้อมกับเครื่องคอมพิวเตอร์ของคุณ
ทำลายหลักและคุณจะเห็น จุดพักตั้งอยู่ที่ -
มันทำให้ฉันอยู่หน่วยความจำบางอย่างที่แปลก และมันยังทำให้ฉันมีจำนวนบรรทัด
ถ้าฉันจะมองย้อนกลับไปที่ไฟล์นี้ ฉันจะตระหนักถึงหลักที่
ที่เกิดขึ้นบนเส้น 21
สิ่งที่ฉันควรจะทำงานต่อไปหรือไม่
เป็นโปรแกรมของฉันทำงานอยู่หรือไม่
เลขที่
ดังนั้นสิ่งที่ฉันควรจะทำงานต่อไปหรือไม่
>> นักเรียน: Run
>> เจสัน Hirschhorn: เรียกใช้
ฉันควรจะทำงานเพียงวิ่งหรือควร ฉันจะเพิ่มบางสิ่งอื่น ๆ มีอะไรบ้าง
>> นักเรียน: เรียกใช้ที่มีการโต้แย้ง
>> เจสัน Hirschhorn: เรียกใช้ด้วย ข้อโต้แย้งคำสั่ง
และตั้งแต่ผมแก้จุดบกพร่องที่เฉพาะเจาะจงมาก กรณีที่ผมควรจะใส่ที่
อาร์กิวเมนต์บรรทัดคำสั่ง
ดังนั้นฉันจะไม่ทำงานสามซึ่งเป็นอีกครั้ง เอาท์พุทที่ผมได้รับจากการตรวจสอบ 50
โปรแกรมเริ่มต้น
เราผ่านคู่สาย
ตอนนี้คุณจะเห็นว่าเราอยู่ในบรรทัด 21
ฉันจะรู้ว่าเราอยู่ในสาย 21 ได้อย่างไร
เพราะถ้าคุณมองไปทางซ้าย ของหน้าต่าง terminal ของฉันมี
มันบอกว่าสาย 21
และที่ให้ฉันจริง รหัสที่เป็นที่บรรทัด 21
ดังนั้นผม misspoke ก่อนหน้านี้
ที่สำคัญคือไม่จริงที่บรรทัด 21
ที่สำคัญคือคู่ของสายไป 21
แต่ในสาย 21 ที่เป็น ที่เรากำลังทำลาย
บรรทัดของรหัสนี้มี ไม่ได้ดำเนินการยัง
นั่นคือสิ่งที่สำคัญ
สายที่คุณเห็นไม่ได้ รับการดำเนินการยัง
ที่บรรทัดถัดไปของรหัส คุณกำลังจะดำเนินการ
>> ดังนั้นบรรทัดถัดไปในขณะที่พวกคุณมี อาจคุ้นเคยกับนี้เป็น
สภาพการตรวจสอบเพื่อดูว่าฉันมี ป้อนอาร์กิวเมนต์บรรทัดคำสั่ง
และให้ฉันสิ่งที่เป็นครั้งที่สอง ส่วนหนึ่งของที่ทำอะไร
เป็นสิ่งที่ฉัน?
>> นักศึกษา: การเปลี่ยนมันเป็นจำนวนเต็ม
>> เจสัน Hirschhorn: ขอโทษ?
>> นักเรียน: มันเปลี่ยน อาร์กิวเมนต์เป็นจำนวนเต็ม
>> เจสัน Hirschhorn: ดังนั้นฉันจะเปลี่ยนแปลงหาเรื่อง v1 จากสตริงเป็นจำนวนเต็ม
และแล้วสิ่งที่มันตรวจสอบ?
>> นักศึกษา: ถ้ามีเป็นครั้งที่สอง อาร์กิวเมนต์บรรทัดคำสั่งไว้
จากการใช้งานโปรแกรม
>> เจสัน Hirschhorn: และสิ่งที่ ช่วงครึ่งปีหลังนี้
การตรวจสอบนิพจน์บูลีน?
ส่วนนี้กว่าที่นี่ให้ฉัน?
>> นักศึกษา: ถ้ามันเป็นเชิงลบ
>> เจสัน Hirschhorn: ให้แน่ใจว่าสิ่งที่
>> นักศึกษา: การตรวจสอบว่า ในความเป็นจริงบวก
>> เจสัน Hirschhorn: แน่นอน
นี้คือการตรวจสอบเพื่อดูว่ามันเป็น เชิงลบและถ้ามันเป็นลบผม
มีความรู้สึกที่อาจจะสายไป ฉันจะตะโกนใส่หน้าผู้ใช้
เพื่อขอให้ยุติการตีรันบรรทัดนี้
เราไม่เห็นเส้นที่ว่าพวกคุณ คาดว่าอาจจะได้เห็นตะโกนใส่
ผู้ใช้และจากนั้นก็กลับมาเพราะ บรรทัดนี้ไม่ได้ดำเนินการ
ผมเข้า 3
ดังนั้นผมจึงไม่ในความเป็นจริงให้ใส่สองคำสั่ง อาร์กิวเมนต์บรรทัดและ 3 เป็น
มากกว่าศูนย์
ดังนั้นเราจึงเห็นเส้นที่เราดำเนินการ แต่เราไม่ได้ก้าว
ภายในถ้าเงื่อนไข
>> ดังนั้นตอนนี้ต่อไปผมเห็นฉันตั้ง int สำคัญเท่ากับการที่ฉัน arg v1
เพื่อให้เป็นฉันสร้างตัวแปรที่สำคัญ
ดังนั้นถ้าผมพิมพ์ออกมาที่สำคัญในขณะนี้เพราะ ที่ช่วยให้คุณเห็น
ค่าภายในตัวแปร สำคัญเท่ากับ 47
ที่แปลก แต่แน่นอน ว่าเป็นเพราะผมยังไม่ได้
ดำเนินการบรรทัดที่ยัง
ดังนั้นตอนนี้ถ้าผมตี n รันบรรทัดนั้น และทำกุญแจสำคัญในการพิมพ์ที่สำคัญจะเท่ากับ 3
ซึ่งเป็นสิ่งที่เราคาดหวังให้เท่ากับ
>> ดังนั้นอีกครั้งใน GDB สายคุณ เห็นคุณยังไม่ได้ดำเนินการยัง
คุณจะต้องกด n หรือหรือจำนวน ของคำสั่งอื่น ๆ ที่จะเป็นจริง
รันบรรทัดที่
กุญแจสำคัญในการพิมพ์
คีย์ที่ 3
เพื่อให้ห่างไกลที่ดีเพื่อให้
String เป็นข้อความธรรมดา
ลองรันบรรทัดที่
ฉันได้รับข้อความจากผู้ใช้
>> ลองมาดูกันในการตรวจสอบของฉัน 50 ฉัน ป้อน BARFOO ตัวพิมพ์ใหญ่ทั้งหมดเพื่อ
นั่นคือสิ่งที่ผมจะเข้ามา
ถ้าตอนนี้ผมพิมพ์ข้อความธรรมดา
คุณจะเห็นมันเท่ากับสตริง
มันทำให้ฉันแปลกบางฐานสิบหกอื่น ๆ จำนวน แต่มันไม่อยู่ใน
ความจริงที่บอกว่าสายของฉันคือ BARFOO
ถ้าผมอยากจะเห็นสิ่งที่สำคัญเท่ากับที่ จุดนี้วิธีการที่ฉันสามารถตรวจสอบที่สำคัญ
>> นักเรียน: ที่สำคัญพิมพ์
>> เจสัน Hirschhorn: กุญแจสำคัญในการพิมพ์ว่า
และที่จริงมีทางลัด
ถ้าคุณได้รับเหนื่อยกับการพิมพ์การพิมพ์ คุณก็สามารถพิมพ์พี
ดังนั้นปุ่ม p จะเป็นสิ่งที่แน่นอนเดียวกัน
และอีกครั้งที่ผมเห็นมันเท่ากับ 3
>> ถ้าผมต้องการที่จะหาสิ่งที่สำคัญทั้ง และ BARFOO เท่ากับในเวลาเดียวกัน
แต่ผมก็เหนื่อยกับการพิมพ์แต่ละ อย่างใดอย่างหนึ่งออกมาเป็นรายบุคคลผม
ชาวบ้านที่สามารถพิมพ์ข้อมูล
ที่ทำให้ผมเท่ากับที่สำคัญ 3
ข้อความธรรมดาเท่ากับ BARFOO
นอกจากนี้ยังทำให้ผมเหล่านี้สองสิ่งที่แปลก ที่ด้านบนตัวแปรนี้ฉันและ
n ตัวแปรนี้
>> เหล่านี้จะมีอยู่จริงๆ ในโปรแกรมหลักของฉัน
เรายังไม่ได้พบพวกเขายัง แต่เป็นตัวอย่างเหล่านั้น
ที่มีอยู่ในของฉันสำหรับวง
ดังนั้นตอนนี้พวกเขาเท่ากับบางลาง ตัวเลขเพราะพวกเขายังไม่ได้รับ
เริ่มต้นได้ แต่พวกเขายังคงมีอยู่ ในหน่วยความจำเพื่อให้พวกเขากำลังตั้งเพียง
ค่าขยะบาง
แต่เราไม่เห็นสำคัญในที่ราบ ข้อความที่นั่น
>> ดังนั้นฉันจะรันบรรทัดนี้ สาย 34, ห่วงสำหรับ
เรากำลังจะกระโดดลงไปใน สำหรับวงโดยการกดปุ่ม n
และเราอยู่ในห่วงสำหรับ
เราอยู่ที่การตรวจสอบครั้งแรกของเรา
และอีกครั้งเหล่านี้จัดเรียงของควรดู คุ้นเคยกับคุณเพราะนี่คือ
ซีซาร์โปรแกรมที่ถูกเขียน แต่ อีกครั้งมีการจัดเรียงของข้อผิดพลาดบางอย่าง
>> และตอนนี้ถ้าผมทำข้อมูลท้องถิ่นเพราะฉัน ภายในที่ห่วงคุณจะเห็น
ที่ฉันเท่ากับศูนย์ในขณะที่เราคาดหวัง
นั่นคือสิ่งที่เราตั้งค่าให้เริ่มต้นและ ไปในห่วงสำหรับ
n เท่ากับ 6
ที่ยังทำให้รู้สึกเพราะเราตั้ง ให้ strlen ของข้อความธรรมดา
ดังนั้นผมจึงชอบที่จะทำในท้องถิ่นหรือข้อมูลการพิมพ์ มักจะให้กับตัวแปรเพื่อให้แน่ใจว่า
ทุกอย่างเป็นสิ่งที่เสมอ ผมคาดว่ามันจะเท่ากัน
ในกรณีนี้ทุกอย่างเป็น สิ่งที่ผมคาดหวังว่ามันจะเท่ากับ
>> เพื่อขอเริ่มต้นเคลื่อนที่ผ่าน นี้สำหรับวง
สายฉันเป็นสาย 36, ถ้าธรรมดา ฉันข้อความที่มีค่ามากกว่าและธรรมดา
ฉันข้อความที่มีค่าน้อยกว่าหรือเท่ากับซี
ฉันรู้ว่าปัญหาของฉันไม่ได้กับครั้งแรกของฉัน จดหมายก็มีจดหมายฉบับที่สอง
ถ้าเรามองกลับไปที่ตรวจสอบ 50, B ไปอีดี
ฉันการและปล่อยให้มันเป็น ไม่เปลี่ยนไปดีดังนั้น
บางสิ่งบางอย่างผิดปกติกับ จดหมายฉบับที่สอง
ดังนั้นฉันจะย้าย มีในที่สอง
>> แต่ถ้าผมไม่ต้องการที่จะตรวจสอบสิ่งที่ธรรมดา ข้อความฉันเท่ากับนี้โดยเฉพาะ
กรณีที่ผมคิดว่ามันควรจะเป็นอะไร
สิ่งที่ควรข้อความธรรมดาฉันเท่ากับในครั้งนี้ รอบแรกผ่านสำหรับวง?
>> นักเรียน: ศูนย์?
>> เจสัน Hirschhorn: ข้อความธรรมดาของฉัน
ดังนั้นจึงควรจะเป็นเงินทุน B. ฉันแน่นอน เท่ากับศูนย์ แต่ข้อความธรรมดา
วงเล็บวงเล็บปิดศูนย์เท่ากับ B เพราะสายที่เราเห็นเมื่อสัปดาห์ที่แล้ว
มีอาร์เรย์ดังนั้นเราจึงได้รับ ตัวอักษรตัวแรกจากที่
ดังนั้นอีกครั้งถ้าผมพิมพ์ออกมาของข้อความธรรมดา ฉันฉันในความเป็นจริงจะได้รับตัวละคร
บีและที่เรียบร้อยใช่ไหม
ฉันไม่จริงมีหนึ่งข้อความธรรมดา ที่ไม่ได้เป็นหนึ่งในตัวแปรที่ฉันตั้ง
หรือเริ่มต้น แต่คุณสามารถพิมพ์ ออกพื้นที่ทั้งหมดของสิ่งที่
ถ้าคุณต้องการที่จะ
>> แต่ขอย้ายผ่าน
หากข้อความธรรมดาผมมากกว่าและ ฉันข้อความธรรมดามีค่าน้อยกว่าหรือเท่ากับ
Z ที่ชัดเจนเป็นความจริงเพราะเรามี บีเมืองหลวงของฉันจะทำงาน
คำสั่งบางอย่างกับมัน
เราเห็นคณิตศาสตร์ที่เมื่อสัปดาห์ที่แล้วเราจึงจะ ใช้มันเพื่อรับที่ทำงาน
ที่เหมาะสมตามที่ตรวจสอบ 50
>> เหล่านี้วงเล็บปีกกาคนแรก แสดงให้เห็นว่าผมออกจากถ้า
เงื่อนไขที่สองแสดงให้เห็นว่า ที่ฉันออกจากวง
และอื่น ๆ ตอนนี้เมื่อผมตีต่อไปเราจะเห็น เรากลับไปที่ห่วงอีกครั้ง
เรากำลังจะผ่าน สำหรับวงอีกครั้ง
ลองจริงก้าวเข้าสู่ปีท​​ี่สอง ซ้ำของการวนและชนิด
ชาวบ้านที่ข้อมูล
>> ดังนั้นเราอยู่ในการทำซ้ำครั้งที่สอง สำหรับวงของเรา
ฉันเท่ากับ 1 ซึ่งเราคาดว่า
ยังไม่มีเท่ากับ 6 ซึ่งเราคาดว่า
ที่สำคัญเท่ากับ 3 ซึ่งเราคาดว่า
และข้อความธรรมดาคุณจะเห็นเท่ากับ EARFOO ตอนนี้ไม่ได้อีกต่อไปเพราะ BARFOO
ในรอบก่อนหน้าของเรา, B เป็น เปลี่ยนไปเป็นทุนอีดังนั้นเรากำลัง
ที่จะพบกับปัญหาเช่นนี้ เป็นที่ที่เราจะไป
ดำน้ำในการแก้จุดบกพร่อง
แต่ใครจะมีคำถามใด ๆ เกี่ยวกับสิ่งที่เราได้ทำเพื่อให้ห่างไกล
น่าอัศจรรย์
>> ดังนั้นเรากำลังจะดำเนินการนี​​้หาก สภาพวงเล็บข้อความธรรมดาฉันปิด
วงเล็บมากกว่าและฉันข้อความธรรมดา น้อยกว่าหรือเท่ากับถึง Z แต่ก่อน
ฉันไปเป็นว่าเพราะนี่คือที่ ฉันรู้ว่าข้อผิดพลาดของฉันคือฉันต้องการที่จะชี้ให้
ออกข้อความธรรมดาของฉันดังนั้น ขอนำพิมพ์ออก
มันไม่เท่ากับตัวละครเพื่อที่ว่า ดูเหมือนว่าจนถึงขณะนี้ทั้งหมดเป็นอย่างดีและดี
>> ดังนั้นผมจึงคาดหวังว่าสายต่อตรรกะของฉันนี้ บรรทัดนี้ควรจะเป็นจริง
มันเป็นอักษรตัวใหญ่
แต่ถ้าผมตี n, เราตระหนักดีว่านี้ สายในความเป็นจริงไม่ได้ดำเนินการ
ฉันกระโดดลงไปที่อื่นถ้า
ทำไมไม่ว่าเกิดขึ้นได้อย่างไร
>> นักเรียน: เพราะคุณมีสภาพของคุณ ของข้อความธรรมดามากขึ้น
กว่าไม่เท่ากับหรือมากกว่า
>> เจสัน Hirschhorn: ดังนั้นฉันมีข้อความธรรมดาของฉัน ฉันมากกว่าไม่มากขึ้น
มากกว่าหรือเท่ากับ
เพื่อให้ชัดเจนเมืองหลวงไม่ได้ เรียกนี้หากสภาพและเราได้ทำ
ไม่ได้เข้าสู่ขั้นตอนมันและเราไม่ได้ทำ ได้ทำการเปลี่ยนแปลงที่จำเป็น
ดังนั้นที่มันจริง
ฉันคิดว่าข้อผิดพลาดของฉัน
ฉันจะกลับไปในแฟ้มแหล่งที่ของฉัน เปลี่ยนและปรับปรุงมันและ
ทำงานตรวจสอบอีกครั้ง 50
>> แต่เราจะเห็นเพียงสำหรับการเรียนการสอนของ เพราะถ้าผมให้ไป
อื่นถ้าไม่ได้ดำเนินการอย่างใดอย่างหนึ่ง แต่ สิ่งที่แทนเท่ากับเป็นคำสั่ง
ที่ไม่เปลี่ยนแปลง
ดังนั้นจึงไม่ได้เปลี่ยนเลยและถ้าผม พิมพ์ข้อความธรรมดาที่นี่เราจะเห็นไป
ผ่านห่วงไม่ได้ในความเป็นจริง เปลี่ยนลักษณะที่สองที่เลย
ก็ยังคง A. ทุน
>> ดังนั้นอีกครั้งเราบั๊กข้อผิดพลาดของเรา
เรารู้ว่ามี ตรรกะบางส่วนหายไป
และเราบั๊กมันไปข้างหน้าของเวลาก่อนที่ จริงการดำเนินสายที่
แต่คุณจะได้สังเกตเห็นมีเราเพียงแค่ ตีถัดไปและข้ามไปยังที่อื่นถ้า
นั่นหมายความว่าถ้าเงื่อนไข ไม่เป็นความจริง
เราไม่ได้ในความเป็นจริงได้รับ ผลที่เราคาดหวัง
ดังนั้นแล้วเราจะได้รับแจ้งมี เราไม่ได้รับการที่ชาญฉลาดเพื่อที่จะมองไปที่
ว่าถ้าสภาพและตรวจสอบว่าในความเป็นจริง เงื่อนไขของเราควรที่จะประเมิน
จริงในบริบทปัจจุบัน
>> นั่นคือทั้งหมดสำหรับการแก้จุดบกพร่องโปรแกรมนี้
ไม่มีใครมีคำถามหรือข้อสงสัย
คำสั่งสิ่งที่ฉันสามารถตีจะเลิก GDB?
Q. แล้วฉันจะได้รับแจ้ง, เลิกหรือไม่
ใช่หรือไม่
ฉันจะตีใช่และฉันจะได้เลิก GDB
>> เพื่อให้เป็นไพรเมอร์อย่างรวดเร็วเพื่อ GDB
ที่จริงในสถานการณ์จริง ฉันทำอย่างนี้ในเวลาที่สำนักงาน
ฉัน GDBed โปรแกรมนี้แน่นอนที่ เวลาทำงานกับนักเรียน
และถ้าเรากลับไปที่คำสั่งที่เราเห็น ก่อนที่เราจะนำมาใช้ทำลายหลักแรก
สิ่งที่เราทำ
เราใช้การทำงานกับการขัดแย้งบรรทัดคำสั่ง สิ่งที่สองที่เราได้
เราใช้ต่อไปมากที่จะย้าย เราผ่านสาย
และอีกครั้งรุ่นสั้น ของต่อไปคือ n
ที่อยู่ในวงเล็บ สีเทาบนภาพนิ่ง
>> เราไม่ได้ใช้ขั้นตอน แต่เราไม่ได้ จำเป็นต้องในกรณีนี้
แต่เราอาจจะใช้มันในบิตต่อมา ในวันนี้ถ้าเราจะแก้จุดบกพร่องสำหรับ
ตัวอย่างเช่นการค้นหาไบนารีเมื่อไบนารี การค้นหาที่เรียกว่าแยก
ฟังก์ชั่น แต่มี ข้อผิดพลาดบางอย่างกับมัน
เรากำลังจะต้องการที่จะก้าวเข้าสู่ โทรไปค้นหาแบบไบนารีและ
แก้ปัญหาได้จริง
รายการเราไม่ได้ใช้อย่างใดอย่างหนึ่งเพราะเรามี ความรู้สึกที่ดีของรหัสของเรา แต่ถ้าฉัน
ไม่ต้องการที่จะได้รับความรู้สึกของสิ่งที่รหัสฉัน เป็นรอบผมก็สามารถใช้รายการ
>> พิมพ์เราใช้ชาวบ้านข้อมูลที่เราใช้ใน
ยังคงที่เราไม่จำเป็นต้องใช้ในการนี​​้ กรณีมิใช่เราจำเป็นต้องใช้
ปิดการใช้งาน แต่เราไม่ใช้ออกจาก
อีกครั้งเหล่านี้ 10 คำสั่ง ปฏิบัติได้
หากคุณเข้าใจเหล่านี้ 10 คำสั่ง คุณควรจะตั้งค่าสำหรับการแก้จุดบกพร่องใด ๆ
ปัญหากับ GDB
>> ดังนั้นเรากำลังจะไปอีกครั้งเพื่อ ปมของส่วนในวันนี้จะไป
เหล่านี้การเรียงลำดับและการค้นหา ขั้นตอนวิธีการ
ก่อนที่เราจะทำเช่นนั้นอีกครั้งคำถามใด ๆ ความเห็นความกังวลสำหรับ GDB?
ดังนั้นทุกคนที่จะใช้ GDB มากกว่า printf?
เพื่อให้ทุกคนเพื่อประโยชน์ความเป็นอมตะของ ทุกคนจะพยักหน้าขวาหัวของพวกเขา
ตอนนี้ดังนั้นผมจะเห็นคุณในเวลาทำการ และ TFs ทั้งหมดจะเห็นคุณและ
พวกเขาจะบอกว่าแสดงให้ฉันดูวิธีการใช้งาน GDB และคุณจะสามารถ
ที่จะแสดงให้พวกเขาใช่มั้ย
ชนิดของ?
อาจจะหวังว่า
เย็น
>> ดังนั้นเรากำลังจะย้ายเข้าไปอยู่ การเรียงลำดับและการค้นหา
คุณจะเห็นฉันมีรายการที่เรียงลำดับแล้ว สำหรับเรา แต่ที่ไม่ได้ไป
จะเป็นกรณีเสมอ
ดังนั้นในปัญหาที่กำหนดข้อกำหนดสำหรับ ปัญหาตั้งสามคุณจะมีกางเกงขาสั้น
ที่คุณสามารถดูและเป็นจริง ขอให้คุณดูกางเกงขาสั้นที่
นอกจากนี้ในการบรรยายเมื่อสัปดาห์ที่แล้วที่เราเดินไป จำนวนมากของขั้นตอนวิธีการเหล่านี้ดังนั้นฉัน
ไม่ได้จะใช้เวลาในการเรียนไป ผ่านขั้นตอนเหล่านี้อีกครั้งหรือรูปวาด
ภาพสำหรับวิธีการเหล่านี้ ขั้นตอนวิธีการทำงาน
อีกครั้งข้อมูลที่คุณสามารถดูอีกครั้งว่า การบรรยายหรือข้อมูลที่
ถูกจับโดดเด่นในกางเกงขาสั้น สำหรับการค้นหาเหล​​่านี้ทั้งหมด
ซึ่งมีอยู่ที่ cs50.net
>> ดังนั้นแทนที่จะสิ่งที่เรากำลังจะ ทำคือการเขียนโปรแกรมเหล่านี้
เรามีความรู้สึกแบบจิตของวิธี พวกเขาทำงานและเพื่อให้สิ่งที่เรากำลังจะ
ทำคือรหัสของพวกเขาจริง
เรากำลังจะเปิดรูปแบบจิตที่ ภาพว่าถ้าคุณจะเป็น
รหัสจริง
และถ้าคุณมีความสับสนเล็กน้อยหรือ หมอกในรูปแบบจิตผมโดยสิ้นเชิง
เข้าใจ
>> เราไม่ได้จริงจะ ข้ามไปยังรหัสทันที
ดังนั้นในขณะที่ให้ในสไลด์นี้ถาม คุณสามารถค้นหารหัสไบนารีและ
จริงรุ่นซ้ำของ ค้นหาแบบไบนารี, สิ่งแรกที่ผม
อยากให้คุณทำคือ เขียน pseudocode บาง
เพื่อให้คุณมีจิตแบบนี้ ไบนารีของวิธีการทำงานของการค้นหา
จะออกแผ่นกระดาษถ้าคุณมี หนึ่งพร้อมใช้งานหรือเปิดขึ้น
แก้ไขข้อความและฉันต้องการ ทุกคนที่จะเขียน
ใช้เวลาสี่นาทีในการเขียน pseudocode สำหรับการค้นหาไบนารี
>> อีกครั้งคิดเกี่ยวกับรูปแบบทางจิตที่
ฉันจะมารอบถ้าคุณมีคำถาม และเราสามารถวาดภาพออกมา
แต่ก่อนอื่นก่อนที่เราจะเริ่มต้นการเขียนโปรแกรม ผมอยากจะเขียน
pseudocode สำหรับการค้นหาไบนารีดังนั้นเมื่อเรา ดำน้ำในเรามีทิศทางบางส่วนเป็น
ไปยังที่ที่เราควรจะมุ่งหน้าไป
>> นักศึกษา: เราสามารถคิดอาร์เรย์ของ ค่าที่เราได้รับจะเรียงลำดับแล้ว
>> เจสัน Hirschhorn: ดังนั้นสำหรับการค้นหาไบนารี การทำงาน - คำถามที่ดี - คุณ
ต้องใช้เวลาในการเรียงลำดับ อาร์เรย์ของค่า
ดังนั้นถือว่ามันจะทำงาน
เราจะกลับไปที่สไลด์นี้
คุณจะเห็นในฟังก์ชั่นสีม่วง การประกาศเป็นบูล binary_search int
ค่าค่า int, int n
นี้ควรมีลักษณะที่คุ้นเคยถ้าคุณได้ เดินเข้ามาใกล้แล้วหรืออากาศของคุณ
มือสกปรกที่มีปัญหาการตั้งค่า
>> แต่นั่นคือการประกาศฟังก์ชันของคุณ
อีกครั้งไม่ควรต้องกังวลเกี่ยวกับ ที่มากในขณะนี้
สิ่งที่ผมต้องการให้คุณทำคือการใช้ สี่นาทีเพื่อไบนารี pseudocode
ค้นหาและจากนั้นเราจะไป กว่าที่เป็นกลุ่ม
แล้วเราจะมารอบ
หากคุณมีคำถามรู้สึก อิสระที่จะยกมือของคุณ
>> ทำไมคุณไม่ใช้เวลาสองนาที เพื่อเสร็จสิ้นการขึ้น pseudocode หรือไม่
ฉันรู้ว่านี้อาจจะดูไร้สาระที่ เรากำลังใช้เวลามากใน
บางสิ่งบางอย่างที่ไม่ได้จริงใน C แต่โดยเฉพาะอย่างยิ่งเหล่านี้มากขึ้น
ขั้นตอนวิธีการที่ท้าทายและปัญหา ชุดที่เราต้องคิดออก
เริ่มต้นใน pseudocode ไม่ต้องกังวล เกี่ยวกับไวยากรณ์เพียงกังวลเกี่ยวกับ
ตรรกะที่เป็นประโยชน์อย่างไม่น่าเชื่อ
และวิธีการที่คุณไม่ได้แก้สอง ปัญหาที่ยากอย่างไม่น่าเชื่อในครั้งเดียว
คุณเพียงแค่การมุ่งเน้นในตรรกะและ แล้วคุณจะย้ายเข้ามาในรูปแบบ
>> ตกลง
ขอเริ่มต้นที่จะผ่าน pseudocode
ฉันได้เขียนขึ้นที่นี่ไบนารี pseudocode ค้นหา
เราจะเขียนนี้ คณะกรรมการร่วมกัน
หรือฉันจะเขียนมันและคุณจะให้ ผมแจ้งให้ที่ฉันต้องการ
ดังนั้นใครสามารถให้ฉันเป็นครั้งแรก สายของ pseudocode คุณ
เขียนค้นหา binary?
ใช่แอนนี่?
>> นักศึกษา: ในขณะที่ความยาวของ รายการมีค่ามากกว่าศูนย์
>> เจสัน Hirschhorn: ในขณะที่ระยะเวลา ของรายการมากกว่าศูนย์
และอีกครั้งที่เราเห็นบางส่วน C-มอง สิ่งที่สร้างประโยคที่ขึ้นที่นี่
แต่ที่สำคัญที่สุดของเรื่องนี้เป็นภาษาอังกฤษ
ไม่ใครมีเส้นที่พวกเขาใส่ ก่อนหน้านี้ในนามแฝงรหัสของพวกเขา
>> นักเรียนที่ได้รับการอาร์เรย์ ของตัวเลขที่เรียงลำดับ
>> เจสัน Hirschhorn: คุณเขียนว่า "ได้รับ อาร์เรย์ของตัวเลขที่เรียงลำดับ. "ต่อ
การประกาศฟังก์ชันเราจะผ่าน อาร์เรย์ของตัวเลขที่เรียงลำดับ
>> นักเรียน: [ไม่ได้ยิน]
>> เจสัน Hirschhorn: ดังนั้น เราจะมีที่
แต่ใช่ว่าเราไม่ได้มีที่เรา จะต้องมีการจัดเรียงแถวของเรา
ตัวเลขเพราะค้นหาแบบไบนารี ใช้งานได้เฉพาะในอาร์เรย์เรียงลำดับ
ดังนั้นในขณะที่ความยาวของรายการเท่ากับศูนย์ฉัน จะใส่ในวงเล็บปีกกาบาง
เพื่อให้ดูนิด ๆ หน่อย ๆ เช่น C. แต่ในขณะที่ดูเหมือนว่าจะลงบนแผนที่
ในขณะที่วงดังนั้นในขณะนี้ ห่วงสิ่งที่เราจำเป็นต้อง
ทำเพื่อค้นหา binary?
>> คนอื่นที่ยังไม่ได้ให้ฉัน ตอบยัง แต่ที่เขียนนี้
>> นักเรียน: ไปที่ตรงกลางของรายการ
>> เจสัน Hirschhorn: ทอม
ไปที่ตรงกลางของรายการ
และคำถามที่ติดตามสิ่งที่ ที่เราทำเมื่อเราอยู่ที่
ตรงกลางของรายการหรือไม่
>> นักเรียน: จะตรวจสอบไม่ว่าจะเป็น หมายเลขที่คุณกำลังมองหา
>> เจสัน Hirschhorn: ยอดเยี่ยม
ไปตรงกลางของรายการและตรวจสอบ ถ้าค่าของเราคือการมี -
น่าอัศจรรย์
ไม่ใครมีสิ่งอื่น ที่แตกต่างจากนี้
นั่นคือสิ่งที่ถูกต้อง
>> สิ่งแรกที่เราทำในการค้นหาแบบไบนารี คือไปที่ตรงกลางของรายการและ
ตรวจสอบเพื่อดูว่าค่าของเราจะมี
ดังนั้นผมถือว่าถ้าค่าของเรา มีสิ่งที่เราจะทำอย่างไร
>> นักเรียน: พวกเรากลับเป็นศูนย์ [ไม่ได้ยิน]
>> เจสัน Hirschhorn: ใช่ถ้าเรา ค่าจะมีเราพบว่ามัน
ดังนั้นเราจึงสามารถบอกวิธีการบางอย่าง แต่นี้ ฟังก์ชั่นที่ถูกกำหนดให้เราบอกผู้ใช้
เราพบว่ามัน
ถ้ามันไม่ได้มี แต่ที่เป็น ที่นี้ได้รับยุ่งยาก
ดังนั้นถ้ามันไม่ได้มีคนอื่นที่ เป็นคนที่ทำงานในการค้นหาไบนารีหรือ
ได้ความคิดตอนนี้สิ่งที่เราจะทำอย่างไร
>> นักเรียน: คำถาม
>> เจสัน Hirschhorn: ใช่?
>> นักศึกษา: เป็นแถวเรียงลำดับแล้ว
>> เจสัน Hirschhorn: ใช่เราสมมติว่า อาร์เรย์จะเรียงลำดับแล้ว
>> นักศึกษา: ดังนั้นแล้วคุณต้องตรวจสอบว่า ค่าที่คุณเห็นคือมากกว่า
ค่าที่คุณต้องการคุณสามารถย้าย ไปตรงกลางของอีกครึ่งหนึ่ง
>> เจสัน Hirschhorn: ดังนั้นถ้าตรงกลางของ รายการที่มีค่ามากกว่าสิ่งที่เรากำลัง
มองหาแล้วเราจะเป็นอย่างไร
เราย้ายที่?
>> นักศึกษา: คุณต้องการที่จะย้ายไป ครึ่งหนึ่งของรายการด้วย
ตัวเลขต่ำกว่าที่
>> เจสัน Hirschhorn: ดังนั้นเราจะ เรียกว่าด้านซ้าย
ดังนั้นถ้ากลางมากขึ้นเราสามารถค้นหา ครึ่งที่เหลือของรายการ
แล้วโดยการค้นหาสิ่งที่ ฉันหมายถึงโดยการค้นหา
>> นักเรียน: [ไม่ได้ยิน]
>> เจสัน Hirschhorn: เราไปที่ตรงกลาง
เราจริงทำซ้ำสิ่งนี้
เรากลับไปที่ผ่านลูปในขณะที่ของเรา
ฉันจะให้คนสุดท้ายที่ -
อื่นถ้ากลางน้อยกว่าสิ่งที่ เราทำสิ่งที่เราทำที่นี่?
>> นักเรียน: ไปที่ด้านขวา
>> เจสัน Hirschhorn: ค้นหาขวา
นี้ดูดี แต่ไม่มีใครมี สิ่งที่เราอาจจะหายไปหรือ
สิ่งอื่นที่คุณใส่ ในนามแฝงรหัสของคุณหรือไม่
ดังนั้นนี่คือสิ่งที่เรามีเพื่อให้ห่างไกล
ในขณะที่ความยาวของรายการที่ยิ่งใหญ่ กว่าศูนย์เรากำลังจะไป
ที่ตรงกลางของรายการและ ตรวจสอบว่าค่าของเราจะมี
>> ถ้าตรงกลางเป็นส่วนใหญ่ที่เรากำลังจะ ค้นหาซ้ายอื่นถ้าตรงกลางเป็น
น้อยกว่าที่เรากำลังจะค้นหาขวา
ดังนั้นเราจึงได้มีทั้งหมดคุ้นเคยกับบาง คำที่เราใช้ในสาขาวิชาวิทยาการคอมพิวเตอร์
และเครื่องมือที่เรามี
แต่คุณจะสังเกตเห็นเรา การพูดในภาษาอังกฤษ แต่เราพบ
หลายสิ่งหลายอย่างที่ดูเหมือนจะแมปไปยัง เครื่องมือที่เรามีในชุดเครื่องมือการเข้ารหัสของเรา
ดังนั้นทันทีทันใดเราไม่ได้ ไปยังรหัสจริง
>> สิ่งใดที่เราเห็นที่นี่ในภาษาอังกฤษที่แผนที่ เพื่อสิ่งที่เราสามารถเขียนใน C?
>> นักศึกษา: ในขณะที่
>> เจสัน Hirschhorn: ในขณะที่
ดังนั้นขณะนี้ที่นี่ แผนที่เพื่ออะไร
>> นักเรียน: ห่วงขณะ
>> เจสัน Hirschhorn: วงในขณะที่?
หรืออาจจะมากกว่าปกติห่วง
เราต้องการที่จะทำอะไรบางอย่างซ้ำแล้วซ้ำอีก
ดังนั้นเราจะให้รหัสห่วง
และเรารู้อยู่แล้วว่าเพราะเราได้ทำ นี้สองสามครั้งและเรา
มีมากมายตัวอย่างออกมี วิธีการที่จริงการเขียน
ดัชนีนี้สำหรับวง
ดังนั้นที่ควรจะง่ายสวย
เราควรจะสามารถที่จะได้รับว่า เริ่มต้นสวยได้อย่างรวดเร็ว
>> เราทำในสิ่งที่คนอื่นเห็นในที่นี่
สิ่งอื่น ๆ ที่โครงสร้างไวยากรณ์สิ่งที่ ที่เราคุ้นเคยกับใน C เราทำ
แล้วมีความรู้สึกของตาม ออกจากคำที่เราใช้งานอย่างไร
มีแอนนา?
[ไม่ได้ยิน]
เพียงแค่ล้อเล่น
แอนนาไปข้างหน้า
>> นักศึกษา: ถ้าและอื่น
>> เจสัน Hirschhorn: ถ้าและ อื่น - ที่นี่
ดังนั้นสิ่งที่ผู้ที่มีลักษณะอย่างไร
>> นักศึกษา: ถ้ามีคำสั่งอื่น
>> เจสัน Hirschhorn: ใช่ เงื่อนไขใช่ไหม
ดังนั้นเราอาจจะต้อง เขียนเงื่อนไขบางอย่าง
และอีกครั้ง แต่อาจจะสับสนในตอน ครั้งแรกที่เรามักจะมีความรู้สึกตอนนี้
วิธีการเงื่อนไขและการเขียน ไวยากรณ์สำหรับเงื่อนไขที่
และถ้าเราทำไม่ได้เราก็เงยหน้าขึ้นมอง ไวยากรณ์สำหรับเงื่อนไขตัดและวาง
ว่าเพราะเรารู้ว่าเรา ต้องมีสภาพที่นี่
ใด ๆ ที่สิ่งอื่น ๆ ที่เราเห็นบนแผนที่ที่ สิ่งที่เราอาจจะต้องทำใน C?
ใช่ Aleha?
>> นักเรียน: นี้อาจจะเห็นได้ชัด โดยเพียงแค่การตรวจสอบว่า
ค่าเท่ากับสิ่งที่
>> เจสัน Hirschhorn: เราเพื่อตรวจสอบว่า และ - เพื่อไปที่ตรงกลางของรายการ
และตรวจสอบว่าค่าของเราอยู่ที่นั่น
เราจะทำอย่างไรที่ใน C?
อะไรไวยากรณ์สำหรับการที่ได้หรือไม่
>> นักเรียน: เท่ากับเท่ากับ
>> เจสัน Hirschhorn: เท่ากับเท่ากับ
ดังนั้นการตรวจสอบนี้อาจจะ จะเท่ากับเท่ากับ
ดังนั้นเราจะต้องรู้ว่าเราอยู่ที่ไหนสักแห่งที่
และอันที่จริงเพียงแค่ในการเขียนมัน เราจะเห็นสิ่งอื่น ๆ เหล่านั้น
เราจะต้องทำบาง ดำเนินการเปรียบเทียบในมี -
น่าอัศจรรย์
ดังนั้นจึงดูเหมือนจริงโดยและ ขนาดใหญ่เรายังไม่ได้เขียน
คำพูดของรหัส C ยัง
แต่เราได้รูปแบบจิตลง ผ่านการบรรยายและกางเกงขาสั้นที่
>> เราเขียนหลอกรหัสเป็นกลุ่ม
และแล้วเรามี 80% หากไม่ได้ 90% ของสิ่งที่เราต้องทำ
ตอนนี้เราเพียงแค่ต้องรหัส มันอีกครั้งซึ่งเป็น
ปัญหาไม่เล็กน้อยที่จะแก้ปัญหา
แต่อย่างน้อยเรากำลังติดอยู่บนตรรกะ
อย่างน้อยตอนนี้เมื่อเราไปเวลาทำงาน ฉันสามารถกล่าวว่าฉันรู้ว่าสิ่งที่ฉันต้องการ
ที่จะทำ แต่คุณสามารถเตือน ฉันของไวยากรณ์หรือไม่
หรือแม้กระทั่งถ้าเวลาทำการจะแออัดคุณ สามารถ Google สำหรับรูปแบบค่อนข้าง
กว่าการติดอยู่ในตรรกะ
>> และอีกครั้งมากกว่าการพยายามที่จะแก้ปัญหา ตรรกะและปัญหาไวยากรณ์ทั้งหมด
ในครั้งเดียวก็มักจะเป็นมากดีกว่าที่จะ ทำลายทั้งสองปัญหาที่ยากออกไป
สองคนที่จัดการได้มากขึ้นและทำ หลอกรหัสแรกแล้วรหัสใน C.
ดังนั้นเรามาดูสิ่งที่ฉันได้สำหรับ ก่อนหลอกรหัสเวลา
>> ในขณะที่ความยาวของรายการที่ยิ่งใหญ่ กว่าศูนย์ให้ดูที่ตรงกลาง
ของรายการ
ถ้าจำนวนที่พบกลับเป็นจริงอื่น ถ้าจำนวนที่สูงกว่าด้านซ้ายค้นหา
เพราะว่าถ้าตัวเลขที่ต่ำกว่าการค้นหา ที่ถูกต้องกลับเท็จ
ดังนั้นที่มีลักษณะเหมือนกันเกือบถ้าไม่ เกือบจะเหมือนกับสิ่งที่เราเขียน
ที่จริงทอมสิ่งที่คุณกล่าวว่าเป็นครั้งแรก ทำลายกลางของรายการและถ้า
จำนวนที่พบออกเป็นสองงบ เป็นจริงสิ่งที่ผมทำ
>> ฉันรวมพวกเขามี
ฉันควรจะได้ฟัง คุณเป็นครั้งแรก
เพื่อให้เป็นหลอกรหัสเรามี
ถ้าคุณต้องการตอนนี้เสียใจไป กลับไปที่ปัญหาที่เกิดขึ้นครั้งแรกของเรา
ขอรหัส binary.c
ดังนั้นการดำเนินการซ้ำของรุ่น ค้นหาแบบไบนารีใช้ต่อไปนี้
การประกาศฟังก์ชัน
>> และคุณไม่ต้องคัดลอก มันลงเพียง
ฉันจริงจะเปิด ขึ้นที่นี่ binary.c
จึงมีการประกาศฟังก์ชัน อยู่ตรงกลางของหน้าจอ
และคุณจะเห็นผมเอาหลอกรหัส จากด้านข้างของฉัน แต่เกือบจะเหมือนกัน
กับสิ่งที่เราเขียนและ ใส่ที่ในสำหรับคุณ
ดังนั้นตอนนี้ขอใช้เวลาห้านาที รหัสฟังก์ชั่นนี้
>> และอีกครั้งถ้าคุณมีคำถามใด ๆ ยกมือของคุณให้ฉันรู้ว่าฉันจะ
มารอบ
>> นักเรียน: [ไม่ได้ยิน]
>> เจสัน Hirschhorn: ดังนั้นฉันเอาไบนารี ความหมายของการค้นหาที่
ด้านบน, บนเส้น 12
นั่นคือสิ่งที่ผมได้รับการสไลด์ของฉัน
แล้วทั้งหมดนี้หลอกรหัสฉัน คัดลอกและวางจากภาพนิ่ง
สไลด์หลอกรหัส
ฉันยังคงไม่ได้ยิน [ไม่ได้ยิน]
>> ดังนั้นถ้าคุณได้ดำเนินการเสร็จสิ้นของคุณ การดำเนินงานที่ฉันต้องการที่จะตรวจสอบ
ฉันส่งอีเมลที่คุณแฟ้ม helpers.h ก่อนหน้านี้ในชั้นนี้
และมันจะมีออนไลน์เช่นกัน สำหรับการดาวน์โหลดสำหรับคนดู
เวลาส่วนนี้ล่าช้า
และฉันก็ใช้การกระจายทั่วไป รหัสจาก pset3
ดังนั้นฉันจึง find.C ใช้ไฟล์ helpers.h ของฉัน มากกว่าไฟล์ helpers.h
ที่ได้รับในการจัดจำหน่ายรหัส
>> และฉันได้เพื่อให้การเปลี่ยนแปลงอย่างใดอย่างหนึ่งใน find.C มากกว่าเพียงแค่โทร
ค้นหา binary_search โทร
ดังนั้นหากคุณต้องการที่จะทดสอบโค้ดของคุณ รู้ว่าเป็นวิธีการที่จะทำมัน
ในความเป็นจริงเมื่อเราจะใช้รหัสนี้ ตอนนี้ผมเพิ่งทำสำเนาของ
ไดเรกทอรี pset3 ของฉันอีกครั้งสลับออก ไฟล์ช่วยเหลือและทำแล้วว่า
การเปลี่ยนแปลงใน find.C เรียก binary_search มากกว่าเพียงแค่ค้นหา
>> เจสัน Hirschhorn: ใช่
คุณมีคำถามหรือไม่
>> นักศึกษา: ไม่เป็นไร
>> เจสัน Hirschhorn: ไม่ต้องกังวล
ดีขอเริ่มต้น
เราจะรหัสนี้เป็นกลุ่ม
บันทึกหนึ่งที่อื่น ๆ
อีกครั้งนี้คือสามารถสลับ ในเซตปัญหาสาม
ผมมีไฟล์ helpers.h ของฉันที่ค่อนข้าง helpers.h กว่าที่เรากำหนด
ประกาศค้นหาแบบไบนารีฟอง เรียงลำดับและการจัดเรียงเลือก
และใน find.c คุณจะสังเกตเห็นในบรรทัด สิ่งที่เป็นที่สาย 68, เราเรียกเลขฐานสอง
ค้นหามากกว่าการค้นหา
ดังนั้นอีกครั้งรหัสที่มีอยู่ ออนไลน์หรือรหัสที่คุณเป็น
สร้างได้ในขณะนี้สามารถสลับได้อย่างง่ายดาย ในสำหรับ p 3 ชุดเพื่อตรวจสอบ
>> แต่ก่อนอื่นขอรหัสค้นหาแบบไบนารี
การประกาศฟังก์ชันของเรา เรากลับบูล
เราจะใช้ค่าจำนวนเต็มเรียกว่า
เราจะใช้อาร์เรย์ของจำนวนเต็มเรียกว่า ค่านิยมและเราจะเป็น n
ขนาดของอาร์เรย์
สาย 10 ที่นี่ผมมี คมชัดรวมถึง stdbool.h
ไม่มีใครรู้ว่าทำไมที่นั่น
ดังนั้นสิ่งที่จะบรรทัดของรหัสที่จะทำอย่างไร
>> นักเรียน: มันช่วยให้คุณสามารถ ใช้พิมพ์กลับบูล
>> เจสัน Hirschhorn: แน่นอน
>> นักเรียน: หรือจะเป็นห้องสมุดที่ช่วยให้ ที่จะใช้พิมพ์กลับบูล
>> เจสัน Hirschhorn: ดังนั้นคมรวม สาย stdbool.h ทำให้ผมบาง
คำจำกัดความและการประกาศหาสิ่งที่ ที่ฉันได้รับอนุญาตให้ใช้ในการ
ห้องสมุดนี้
ดังนั้นในหมู่ผู้จะบอกว่ามี ชนิดนี้เรียกว่าบูลและจะสามารถ
จริงหรือเท็จ
ดังนั้นนั่นคือสิ่งที่สายที่ไม่
และถ้าฉันไม่ได้มีเส้นที่ผมจะ ได้รับในปัญหาสำหรับการเขียนนี้
คำที่เหมาะสมที่นี่บูล, ขวามี
ขวาตรง
ดังนั้นผมจึงต้องการที่อยู่ในรหัสนี้
ตกลง
ดังนั้นนี้อีกครั้งซ้ำแล้วซ้ำอีก รุ่นที่ไม่ซ้ำใคร
เพื่อให้เราเริ่มต้น
>> เริ่มต้นให้กับครั้งแรกนี้ บรรทัดของรหัสหลอก
และหวังว่าเราจะ - หรือไม่หวังว่า
เรากำลังจะไปรอบห้อง
เราจะไปทีละบรรทัดและฉันจะช่วยให้ คุณคิดออกเส้นที่เราต้องการ
ที่จะเขียนเป็นครั้งแรก
ดังนั้นในขณะที่ความยาวของรายการ มีค่ามากกว่าศูนย์
ขอเริ่มต้นที่ด้านหน้า
สายอะไรที่ฉันควรจะเขียน ที่นี่ในรหัส?
>> นักศึกษา: ในขณะที่วงเล็บ n มากกว่า 0
>> เจสัน Hirschhorn: ในขณะที่ n คือดีกว่า 0
ดังนั้น n คือขนาดของรายการที่ และเรากำลังตรวจสอบว่า -
>> [VOICES interposing]
>> เจสัน Hirschhorn - ขอโทษ?
>> นักเรียน: เราจะรู้ว่าวิธี n คือขนาดของรายการหรือไม่
>> เจสัน Hirschhorn: ขออภัย
ตามข้อกำหนด pset ค้นหา และฟังก์ชั่นการจัดเรียงที่คุณต้องการจะเขียน
n คือขนาดของรายการ
ฉันลืมที่จะอธิบายว่าที่นี่
แต่ใช่ n คือขนาดของ รายการในกรณีนี้
ดังนั้นในขณะที่ n มากกว่า 0
ตกลง
ที่อาจพิสูจน์บิตที่มีปัญหา แต่ถ้าสิ่งที่ไปกับ
เพราะเราจะยังคงรู้ว่า ขนาดของรายการนี​​้ตลอด
ฟังก์ชั่น แต่บอกว่าเราเริ่มต้น กับอาร์เรย์ของจำนวนเต็ม 5
และเราผ่านไปและเราได้ ตอนนี้คอมันลงมา
อาร์เรย์ของจำนวนเต็ม 2
ซึ่ง 2 จำนวนเต็มคือ?
ขนาดคือ 2 ตอนนี้ที่เราต้องการ ดู แต่ที่ 2 คือ?
ไม่ทำให้รู้สึกว่าเป็นคำถามที่
>> ตกลง
ฉันจะขอให้มันอีกครั้ง
ดังนั้นเราจึงเริ่มต้นด้วยอาร์เรย์ของ 5 นี้ จำนวนเต็มและ n เท่ากับ 5 ใช่ไหม
เราจะวิ่งผ่านที่นี่
เราอาจจะเปลี่ยนขนาด ที่ถูกต้องเป็นสิ่งที่เป็นไปใน
ซึ่งเป็นสิ่งที่เราบอกว่าเราต้องการจะทำ
เราไม่ต้องการที่จะค้นหา สิ่งที่เต็มรูปแบบอีกครั้ง
เพื่อบอกว่าเราเปลี่ยนเป็น 2
เราใช้เวลาครึ่งรายการที่แปลก
ดังนั้นเพียงแค่เลือกที่ 2
ดังนั้นตอนนี้ n เท่ากับ 2
ฉันขอโทษสำหรับคนยากจน เครื่องหมายลบแห้ง
ใช่มั้ย?
และเรากำลังค้นหาผ่านรายการ อีกครั้งกับรายการที่มีขนาด 2
ดีอาเรย์ของเรายังคงเป็นขนาด 5
เราบอกว่าเราเพียง แต่ต้องการที่จะ ค้นหาจุดที่ 2 อยู่ในนั้น
ดังนั้นที่ 2 จุดที่มีเหล่านั้นหรือไม่
>> ไม่ที่ทำให้รู้สึก?
พวกเขาจะออกจากจุดที่ 2?
พวกเขามีสิทธิที่ 2 จุด?
พวกเขาอยู่ตรงกลาง 2 จุด?
เราได้หักปัญหาลง แต่เรา จริงไม่ทราบว่าเป็นส่วนหนึ่งของ
ปัญหาที่เรายังคงมองหาที่ เพียงแค่มี 2 ตัวแปรเหล่านี้
ดังนั้นเราจึงจำเป็นต้องมีนิด ๆ หน่อย ๆ แล้ว ในขณะที่ n มากกว่า 0
เราจำเป็นต้องรู้ว่าที่ n คือในอาร์เรย์ที่แท้จริงของเรา
>> ดังนั้นทุกคนจะมี เปลี่ยนเป็นสายนี้
ส่วนใหญ่ของสายนี้คือ ที่ถูกต้องสมบูรณ์
นอกจากนี้ยังมีอื่นได้หรือไม่
เราสามารถสลับบางสิ่งบางอย่างออกมาเพื่อที่จะ n ทำให้สายนี้บิตดีขึ้นหรือไม่
มม. แฮะ
>> นักศึกษา: คุณสามารถเริ่มต้นตัวแปร เช่นระยะเวลาในการที่จะ n นั้นจะสามารถใช้
ต่อมาในการทำงานหรือไม่
>> เจสัน Hirschhorn: ดังนั้นเริ่มต้น ความยาวตัวแปร n,
และเราใช้ที่ภายหลังได้หรือไม่
แต่แล้วเราก็ปรับปรุงระยะเวลาและเรา ยังคงทำงานในปัญหานี้ที่เรา
ลดระยะเวลาของปัญหาของเรา แต่เราไม่เคยรู้ว่าที่จริง
ระยะเวลาที่แผนที่บน
>> นักศึกษา: ไม่ว่าจะเกิดขึ้น ในภายหลังเมื่อคุณกำลังจะบอกว่าค้นหาซ้าย
ค้นหาใช่ไหม
คุณกำลังจะไปที่ที่แตกต่างกัน พื้นที่ของคุณ -
>> เจสัน Hirschhorn: เรากำลังจะไป ไปยังพื้นที่ แต่วิธีการที่เราจะรู้
ซึ่งเป็นที่ที่จะไป?
หากเรามีเพียงอาร์เรย์และนี้ n อย่างไรเรารู้จักที่จะ
ไปในอาร์เรย์
ในด้านหลังที่ใช่?
>> นักศึกษา: คุณมีเหมือนที่ต่ำกว่า ผูกพันและตัวแปรผูกพันบนหรือ
สิ่งที่ต้องการนั้น
>> เจสัน Hirschhorn: OK
ดังนั้นนี่คือความคิดอื่น
มากกว่าแค่การติดตาม ขนาดเราติดตามการลดลงและ
ตัวแปรบนผูกพัน
ดังนั้นทำอย่างไรเราคำนวณขนาดจาก จำกัด ล่างและบนปก?
>> [VOICES interposing]
>> เจสัน Hirschhorn: ลบ
และยังมีการติดตามที่ต่ำกว่า ผูกพันและผูกพันบนเพื่อแจ้งให้เราทราบ
เรากำลังค้นหาทั้งสองเหล่านี้หรือไม่
เรากำลังค้นหาทั้งสองไปที่นี่?
เรากำลังค้นหากลางสอง?
อาจจะไม่ตรงกลางสองเพราะ นี้ในความเป็นจริงคือการค้นหาไบนารี
แต่ตอนนี้เราจะสามารถที่จะได้รับขนาด แต่ยังขอบเขตของอาร์เรย์
ในสาระสำคัญถ้าเรามียักษ์ของเรา สมุดโทรศัพท์ที่เราตัดไว้ในครึ่ง
ตอนนี้เรารู้ว่าที่มีขนาดเล็ก สมุดโทรศัพท์เป็น
แต่เราไม่ได้จริงริป สมุดโทรศัพท์ในช่วงครึ่งปี
เรายังคงจำเป็นที่จะต้องทราบว่า ขอบเขตใหม่ของปัญหาของเราก็คือ
ไม่มีใครมีคำถามใด ๆ เกี่ยวกับที่
ใช่?
>> นักเรียน: มันจะทำงานโดยการสร้าง ตัวแปร i, ที่คุณแล้วเพียงแค่เปลี่ยน
ตำแหน่งของผมเทียบกับของ ตำแหน่งปัจจุบันและระยะเวลาที่ n?
>> เจสัน Hirschhorn: และสิ่งที่เป็นฉัน?
>> นักเรียน: เหมือนฉันเป็นเหมือนการจัดเรียงของ -
เช่นเดียวกับที่คุณจะเริ่มต้นที่ฉันจะเป็น ตำแหน่งตรงกลางของแถว
แล้วถ้าค่าในตำแหน่งที่ฉันใน ตรงกลางของอาร์เรย์ในการตรวจพบว่า
จะน้อยกว่าค่าที่คุณต้องการฉันตอนนี้ จะกลายเป็นความยาวของอาร์เรย์บวก
ค่าของ i หารด้วย 2
เหมือนเห็นคุณเปลี่ยน i -
>> เจสัน Hirschhorn ขวา
>> นักศึกษา: - ถึง -
>> เจสัน Hirschhorn: ดังนั้นฉันเกือบ เชิงบวกที่จะทำงาน
แต่เป็นจุดที่คุณจะต้องสอง ชิ้นส่วนของข้อมูลที่นี่
คุณสามารถทำมันกับจุดเริ่มต้นและสิ้นสุด หรือคุณสามารถทำมันมีขนาดและจากนั้น
เครื่องหมายบาง
แต่คุณจะต้องสองชิ้น ข้อมูลที่นี่
คุณไม่สามารถได้รับโดยมีเพียงหนึ่ง
ไม่ที่ทำให้รู้สึก
>> ดังนั้นเรากำลังจะผ่านไปและ เรากำลังจะทำ [ไม่ได้ยิน]
และสร้างตัวบ่งชี้บางอย่าง
ดังนั้นแกเขียนในรหัสของคุณหรือไม่
>> นักเรียน: ฉันเพียงแค่กล่าวว่า int ผูกพัน หนึ่งเท่ากับ 0
>> เจสัน Hirschhorn: ขอเรียก int ที่เริ่มต้น
>> นักเรียน: OK
>> เจสัน Hirschhorn: นั่นทำให้ รู้สึกมากขึ้นสำหรับผม
และ?
>> นักเรียน: ฉันว่าฉันเดา int สิ้นสุด
>> เจสัน Hirschhorn: int สิ้นสุด
>> นักเรียน: ฉันเดา n ลบ 1, หรือสิ่งที่ต้องการ
เช่นองค์ประกอบสุดท้าย
>> เจสัน Hirschhorn: คุณเขียน int เริ่มต้นเท่ากับ 0, อัฒภาคและ int
ตอนจบเท่ากับ n ลบ 1, อัฒภาค
เพื่อเป็นหลักสิ่งที่เรากำลังทำ ที่นี่ 0 ตำแหน่งแรก
และเท่าที่เรารู้ในอาร์เรย์พวกเขาไม่ได้ไป ถึง n พวกเขาไปถึง n ลบ 1
ดังนั้นเราจึงมีขอบเขตของอาร์เรย์ของเราบางส่วน
และขอบเขตเริ่มต้นเหล่านี้จะเกิดขึ้น ขอบเขตเริ่มต้นของปัญหาของเรา
ตกลง
เพื่อให้ฟังดูดี
แล้วถ้าเรากลับไปที่บรรทัดนี้ไปในขณะที่ ความยาวของรายการมากกว่า 0,
สิ่งที่แทน n ควร ที่เราใส่ในที่นี่
>> นักเรียนเขียนตอนจบลบจุดเริ่มต้น
>> เจสัน Hirschhorn: ในขณะที่สิ้นสุดการลบ จุดเริ่มต้นมากกว่า 0?
ตกลง
และเราได้ถ้าเราต้องการที่จะ ทำให้บิตดีกว่าสิ่งที่
อื่นที่เราสามารถทำอะไรได้บ้าง
ถ้าเราต้องการที่จะทำความสะอาด รหัสนี้ขึ้นเล็กน้อยหรือไม่
เราสามารถกำจัดของ 0?
นี่เป็นเพียงรูปแบบคำถาม
มันถูกต้องได้ในขณะนี้
>> นักเรียน: จบไม่ได้ จุดเริ่มต้นเท่ากัน
>> เจสัน Hirschhorn: เราสามารถทำในสิ่งที่?
>> [VOICES interposing]
>> นักเรียน: สิ้นสุดมากขึ้น?
>> เจสัน Hirschhorn: ใช่
เราก็สามารถทำในขณะที่สิ้นสุด เป็นจุดเริ่มต้นที่ยิ่งใหญ่กว่า
ขวา
เราเพิ่มเริ่มต้นในด้านอื่น ๆ ของที่เราและเราได้กำจัดของ 0
ดังนั้นนี่ก็ดู ทำความสะอาดนิด ๆ หน่อย ๆ
ตกลง
ดังนั้นในขณะที่ความยาวของรายการเป็น 0 เราเขียน ว่าในขณะที่ตอนจบที่ยิ่งใหญ่
กว่าการเริ่มต้น
เรากำลังจะไปใส่ในของเราที่จำเป็น วงเล็บปีกกาและแล้วสิ่งแรกที่
เราต้องการที่จะทำคือการมองไปที่ พวกเขาในรายการเล็ก ๆ น้อย ๆ
คุณ?
คุณสามารถให้ฉัน -
>> นักศึกษา: ถ้าวงเล็บ ค่าวงเล็บเหลี่ยม -
>> เจสัน Hirschhorn: ถ้าวงเล็บ ค่าวงเล็บเหลี่ยม
>> นักเรียน: สิ้นสุดหารด้วย 2
>> เจสัน Hirschhorn: สิ้นสุด?
>> นักเรียน: ฉันเห็นมีปัญหากับคุณ -
>> เจสัน Hirschhorn: OK
ดีดูที่ตรงกลาง
ทำอย่างไรเราจะรู้ว่าสิ่งที่อยู่ตรงกลางคืออะไร
ใช่
เพื่อให้ฉันลบรหัสที่
ทำอย่างไรเราจะรู้ว่าสิ่งที่อยู่ตรงกลางคืออะไร
อะไรในเมื่อคุณมีจุดเริ่มต้น และท้ายที่สุดคุณจะพบ
ตรงกลางหรือไม่
>> นักศึกษา: คุณเฉลี่ย
>> นักศึกษา: คุณเพิ่มเข้าไป ร่วมกันและแล้ว -
>> เจสัน Hirschhorn: เพิ่มพวกเขา ร่วมกันและแล้ว
>> นักศึกษา: คุณเฉลี่ย
หารด้วย 2
>> เจสัน Hirschhorn: เพิ่มพวกเขา ร่วมกันและหารด้วย 2
ดังนั้นกลาง int เท่ากับ?
ทอม, คุณสามารถให้มันกับผมหรือเปล่า
>> นักเรียน: เริ่มต้นบวกจบ -
>> เจสัน Hirschhorn: จุดเริ่มต้น บวกสิ้นสุด
>> นักเรียน: ทั้งหมดวงเล็บหารด้วย 2
>> เจสัน Hirschhorn: ทั้งหมดในวงเล็บ หารด้วย 2
เพื่อที่จะให้ผมตรงกลาง อะไรที่ถูกต้องหรือไม่
>> นักศึกษา: คุณยังต้องรอบมันขึ้น
>> เจสัน Hirschhorn: สิ่งที่คุณ หมายความว่าฉันต้องรอบมันได้หรือไม่
>> [VOICES interposing]
>> นักเรียน: เพราะถ้ามันแปลก จำนวนแล้วมันก็เหมือน -
>> เจสัน Hirschhorn: ดี, โอคลาโฮมา
ดังนั้นฉันสามารถรอบขึ้น
แต่ถ้าเป็นเลขคี่, 5, ที่ฉันสามารถ การ 1 อยู่ห่างจากตรงกลาง
หรือถ้าหากมันเป็นเลขคู่ค่อนข้าง ที่เป็นกรณีที่ดีกว่า
ถ้าเป็น 4 เรามี 4 เท่านั้นผมสามารถใช้ ครั้งแรกที่ "กลาง" อ้างไม่ได้นำมาอ้างหรือ
สอง "กลาง" อย่างใดอย่างหนึ่ง
ทั้งสองจะทำงานสำหรับการค้นหาแบบไบนารี ดังนั้นผมจึงไม่จริงต้องรอบมัน
แต่มีสิ่งหนึ่งที่ผมอื่น ๆ ต้องดูที่บรรทัดนี้
เราอาจจะไม่ตระหนักถึงมันยัง แต่เราจะกลับมา
เพราะสายนี้จริงยังคง ต้องการสิ่งหนึ่ง ๆ
>> แต่จนถึงขณะนี้เราได้เขียน สี่บรรทัดของรหัส
เรามีจุดเริ่มต้นของเรา และสิ้นสุดเครื่องหมาย
เรามีห่วงในขณะที่ของเราซึ่งแผนที่ บนโดยตรงกับ pseudocode ของเรา
เรากำลังมองหาที่ตรงกลางที่แผนที่ โดยตรง pseudocode ของเรา
ผมจะบอกว่านี้ไปตรงกลาง ของรายการบรรทัดของรหัสนี้
และจากนั้นเมื่อเราไปที่ตรงกลางของ รายการในสิ่งต่อไปที่เราต้องทำ
มีการตรวจสอบว่าค่าของเราที่มีให้ pseudocode เราเขียนก่อนหน้านี้
>> ดังนั้นเราจะตรวจสอบว่าถ้าค่าของเรา เป็นที่ตรงกลางของรายการหรือไม่
คุณ
ทำไมคุณไม่ทำเช่นนี้?
>> นักศึกษา: ถ้าค่าของเราคือ ที่ตรงกลางมีค่าเท่ากับ
สิ่งที่เราตั้ง -
ผมหมายถึงเท่ากันเท่ากับ -
>> เจสัน Hirschhorn: มัน -
ตกลง
>> นักเรียน: ผมไม่แน่ใจว่าสิ่งที่ ตัวแปรที่เรากำลังมองหา
เพื่อ แต่เป็นเพราะ -
>> [VOICES interposing]
>> นักเรียน: [ไม่ได้ยิน]
>> เจสัน Hirschhorn: แน่นอน
ต่อการประกาศฟังก์ชั่น เรากำลังมองหาค่า
ดังนั้นเราจึงกำลังมองหาค่า ในอาร์เรย์ของค่า
ดังนั้นคุณตรงขวา
คุณจะทำอย่างไรถ้าค่าวงเล็บวงเล็บเปิด กลางปิดเท่ากับวงเล็บ
เท่ากับค่าและภายในมี สิ่งที่เราจะต้องทำอย่างไร
ถ้าค่าของเรามีสิ่งที่ เราจะต้องทำอย่างไร
>> [VOICES interposing]
>> นักเรียน: กลับมาเป็นศูนย์
>> เจสัน Hirschhorn: กลับจริง
>> นักเรียน: กลับจริง
>> เจสัน Hirschhorn: ไมเคิล สิ่งที่ไม่บรรทัดนี้ทำอย่างไร
>> นักเรียน: [ไม่ได้ยิน] โปรแกรมได้ทำงาน แน่นอนและที่มีมากกว่าและ
คุณได้สิ่งที่คุณต้องทำอย่างไร
>> เจสัน Hirschhorn: โปรแกรมหรืออะไร
ในกรณีนี้
>> นักเรียน: ฟังก์ชั่น
>> เจสัน Hirschhorn: ฟังก์ชั่น
และเพื่อที่จะกลับไปในสิ่งที่เรียกว่า มันและให้มันคุ้มค่าจริง
ขวาตรง
หลัก
อะไรประเภทกลับ หลักไมเคิล?
>> นักเรียน: int จำนวนเต็ม?
>> เจสัน Hirschhorn: int ตรง
จำนวนเต็ม
นั่นเป็นเพียงคำถามเพื่อให้แน่ใจว่า พวกคุณได้รับในด้านบนของมัน
มันจะมีอะไรมักจะกลับมาถ้า ทุกสิ่งที่กำลังทำงานด้วยหรือไม่
>> นักเรียน: ศูนย์
>> เจสัน Hirschhorn: ศูนย์
ขวาตรง
>> นักศึกษา: ถ้าเพียงแค่นี้ผลตอบแทนจริง มีข้อมูลที่จะได้รับไม่มี
เกี่ยวกับสิ่งที่ -
โอ้นี่เป็นเพียงคำพูดที่ว่า ค่าภายในอาร์เรย์
>> เจสัน Hirschhorn: แน่นอน
โปรแกรมนี้ไม่ได้ให้ข้อมูล ของที่ว่ามีค่าเป็น
มันเพียง แต่บอกว่าใช่ที่เราพบ มันหรือไม่เราไม่พบมัน
ดังนั้นหากจำนวนพบกลับจริง
ดีจริงเราก็ทำอย่างนั้นจริงๆ ได้อย่างรวดเร็วด้วยที่หนึ่งบรรทัดของรหัส
ดังนั้นฉันจะย้ายสายของ pseudocode ที่
>> นักเรียน: อย่าที่เราต้องการ ที่จะเปลี่ยนอาร์เรย์?
มันควรจะเป็นค่าไม่ใช่ค่าใช่ไหม
>> เจสัน Hirschhorn: ขออภัย
ขอบคุณ
>> นักเรียน: ใช่
>> เจสัน Hirschhorn: บรรทัดนี้ ควรจะเป็นค่า
ขวาตรง
ตกลง
ดังนั้นเราจึงได้มองไปที่กลางรายการ
หากพบจำนวนผลตอบแทนที่แท้จริง
อย่างต่อเนื่องกับ pseudocode ของเราถ้า กลางใหญ่กว่าด้านซ้ายค้นหา
ดังนั้นผมจึงมีอยู่ในที่นี่ถ้าจำนวน สูงกว่าด้านซ้ายค้นหา
คอนสแตนติคุณสามารถให้ ฉันบรรทัดของรหัสนี้
>> นักเรียน: ค่าถ้าของกลาง -
>> เจสัน Hirschhorn: ดังนั้นถ้าค่า -
ถ้า paren เปิดค่าวงเล็บ วงเล็บปิดกลาง -
>> นักเรียนสินค้าน้อยกว่าค่า?
>> เจสัน Hirschhorn สินค้าน้อยกว่า
>> นักเรียน: น้อยกว่าค่า
>> เจสัน Hirschhorn: ค่า
ดีจริงคุณต้องการ ตรวจสอบว่าจำนวน -
ขอโทษ
นี้เป็นสับสนเล็กน้อย
แต่อย่างอื่นถ้าตัวเลขที่อยู่ใน ตรงกลางของรายการที่ยิ่งใหญ่
>> นักเรียน: โอ้, โอคลาโฮมา
>> เจสัน Hirschhorn: ผมจะเปลี่ยนที่
เพราะว่าถ้าตรงกลางจะสูงกว่าเรา ต้องการค้นหาซ้าย, OK?
และสิ่งที่เราจะทำภายใน ถ้าเงื่อนไขนี้?
>> นักเรียน: ฉันสามารถให้การเปลี่ยนแปลงขนาดเล็กเพื่อ สภาพเปลี่ยนเป็นอื่นถ้า?
>> เจสัน Hirschhorn: เพราะว่าถ้า?
ตกลง
ดังนั้นรหัสนี้จะดำเนินการ ไล่เลี่ยกัน
แต่สิ่งที่ดีเกี่ยวกับการใช้ถ้าอื่น ถ้าอื่นหรือถ้าหากอื่นถ้าอื่น
หมายความว่ามีเพียงหนึ่งในบรรดาเป็นไป มีการตรวจสอบไม่ได้ทั้งหมดสามของพวกเขา
ที่อาจเกิดขึ้น
และที่ทำให้มันนิด ๆ หน่อย ๆ ดีกว่าบนเครื่องคอมพิวเตอร์ที่
เรียกใช้โปรแกรมของคุณ
>> ดังนั้น [? คอนสแตนติ?]
เราอยู่ในสายนี้อื่นถ้าค่า วงเล็บกลางวงเล็บปิด
มากกว่าค่า
เราทำอะไรต้องทำอย่างไร
เราจำเป็นต้องค้นหาทางด้านซ้าย
เราจะทำอย่างไรที่
ฉันจะให้คุณเริ่มต้น
>> เรามีทั้งสองสิ่งที่เรียกว่า เริ่มต้นและสิ้นสุด
ดังนั้นสิ่งที่ต้องเกิดขึ้น ที่จุดเริ่มต้นหรือไม่
ถ้าคุณต้องการที่จะค้นหาทางด้านซ้ายของ รายการที่เราได้รับการเริ่มต้นของเราในปัจจุบัน
เราทำอะไรต้องทำมันได้หรือไม่
>> นักเรียน: เราตั้งค่าเริ่มต้น กลางบวก 1
>> เจสัน Hirschhorn: ดังนั้นถ้าเรา ค้นหาซ้ายหรือไม่
>> นักเรียน: ขออภัยลบกลาง -
ดังนั้นตอนจบจะเป็นตรงกลาง ลบ 1 และจุดเริ่มต้น -
>> เจสัน Hirschhorn: และสิ่งที่ เกิดขึ้นที่จุดเริ่มต้นหรือไม่
>> นักเรียน: มันอยู่เหมือนกัน
>> เจสัน Hirschhorn: ดังนั้น ความหมายอยู่เหมือนกัน
ถ้าเรากำลังค้นหาทางด้านซ้ายเรา โดยใช้จุดเริ่มต้นเดียวกัน -
ตรงขวา
และสิ้นสุด
ขออภัยสิ่งที่ไม่ สิ้นสุดที่เท่ากันอีกครั้งหรือไม่
>> นักเรียน: ลบกลาง 1
>> เจสัน Hirschhorn: ลบกลาง 1
ตอนนี้ทำไมลบ 1 ตรงกลางไม่ได้เพียงแค่
>> นักเรียน: กลางออกจาก ภาพอยู่แล้วเพราะเรามี
ตรวจสอบว่ามันเป็นออก
>> เจสัน Hirschhorn: นั่น ตรงขวา
ตรงกลางเป็นออกจากภาพ
เราตรวจสอบแล้วตรงกลาง
ดังนั้นเราจึงไม่ต้องการให้ "กลาง" คำพูด ได้นำมาอ้างเพื่อดำเนินการต่อที่จะอยู่ใน
อาร์เรย์ที่เรากำลังมองหา
ดังนั้นนี้เป็นที่ยอดเยี่ยม
>> เพราะว่าถ้าค่าตัวยึดตรงกลางที่มีขนาดใหญ่ กว่าค่าที่สิ้นสุดเท่ากับ
กลางลบ 1
เจฟฟ์สิ่งที่เกี่ยวกับบรรทัดสุดท้ายนี้
>> นักเรียน: อื่น
ค่ากลางมีค่าน้อยกว่าค่า?
>> เจสัน Hirschhorn: เราจะ คุณกำลังให้ฉันอื่น
ดังนั้นถ้าคุณไม่ให้ฉัน -
>> นักศึกษา: ดังนั้นแล้วการเริ่มต้น ตรงกลางจะเป็นบวก 1
>> เจสัน Hirschhorn: เริ่มต้นเท่ากับ กลางบวก 1 อีกครั้งสำหรับเดียวกัน
ด้วยเหตุผลที่ว่าคอนสแตนติ ให้เราก่อนหน้านี้
และในตอนท้ายที่ไม่ได้ให้ ฉันบรรทัดของรหัสหรือยัง
กลับเท็จ Aleha สิ่งที่ เราจะเขียนที่นี่?
>> นักเรียน: กลับเท็จ
>> เจสัน Hirschhorn: กลับเท็จ
และเราจำเป็นต้องทำเช่นนั้นเพราะถ้าเรา พบว่ามันไม่เราต้องบอกว่าเรา
ไม่พบมัน
และเราบอกว่าเรากำลังจะกลับ บูลดังนั้นเราแน่นอนต้องกลับ
บูลอยู่ที่ไหนสักแห่ง
>> จึงขอเรียกใช้รหัสนี้
ฉันจริงไป -
ดังนั้นเราอยู่ในสถานี
เราจะล้างหน้าต่างของเรา
ขอให้ทุก
เราพบว่ามีข้อผิดพลาดอย่างใดอย่างหนึ่ง
มีข้อผิดพลาดในบรรทัด 15 ที่คาดว่าจะเป็น อัฒภาคที่ส่วนท้ายของ
การประกาศ
ดังนั้นสิ่งที่ฉันไม่ลืม
>> นักเรียน: อัฒภาค
>> เจสัน Hirschhorn: อัฒภาค ขวาขึ้นที่นี่
ผมคิดว่าเป็นรหัสของทอม
ดังนั้นทอม [ไม่ได้ยิน]
ล้อเล่น
ขอไม่ให้ทั้งหมดอีกครั้ง
>> นักเรียน: อะไร Dropbox ไดเรกทอรี เราควรจะอยู่ในสำหรับการนี​​้
>> เจสัน Hirschhorn: เพื่อให้คุณได้ เพียงแค่ดูสำหรับบิตนี้
อีกครั้ง แต่ถ้าคุณต้องการที่จะย้ายไปนี้ รหัสในไดเรกทอรี pset3 ของคุณเพื่อให้
มันออกมาว่าเป็นสิ่งที่ผมทำ
ถ้าคุณจะสังเกตเห็นที่นี่ - ขอโทษคำถามที่ดี
>> [? LS,?]
ฉันมีในที่นี่รหัส find.c จากรหัส distro ในสัปดาห์นี้
ฉันมี helpers.h
ผมมีไฟล์ที่ทำให้ว่าที่จริงผม แก้ไขบิตที่จะรวมเหล่านี้ใหม่
ไฟล์ที่เรากำลังเขียน
ทั้งหมดของรหัสที่จะสามารถใช้ได้ไม่ รหัสกระจาย แต่ใหม่
ทำให้ไฟล์ไฟล์ helpers.h ใหม่จะ มีออนไลน์สำหรับการดาวน์โหลด
อีกครั้งเพื่อให้ผู้ที่มี รหัสพิเศษที่เรามี
>> เพื่อให้ทุกคนต่อบรรทัดนี้ทำให้พบ ไบนารีเลือกฟอง - ทำให้
ทั้งสามของพวกเขาและรวบรวมเป็น หารหัสนี้ปฏิบัติการ
ดังนั้นโดยทั่วไปเราไม่ต้องการ ที่จะตรงไปยัง check50
เราต้องการที่จะเรียกใช้การทดสอบบางส่วนของเราเอง
แต่เพียงเพื่อให้เราสามารถเร่งนี้เล็กน้อย check50 2013 pset3.find จะผ่าน
ใน helpers.c - ไม่ดีของฉัน
>> ผมไม่ได้ว่าตอนนี้
ดังนั้นเราจริงจะ ใช้รหัสจริง
Usage.find / คุณรู้ว่าสิ่งที่หมายถึง
>> นักศึกษา: คุณต้องที่สอง บรรทัดคำสั่งบน
>> เจสัน Hirschhorn: ฉันต้องการ บรรทัดคำสั่งที่สอง
และตามข้อกำหนดที่ฉันต้องการ ที่จะเข้าสู่สิ่งที่เรากำลังมองหา
ดังนั้นลองมองหา 42
เราจะเก็บไว้ในที่เรียงลำดับเพราะเรา ไม่ได้เขียนฟังก์ชั่นการจัดเรียงยัง -
42, 43, 44
>> และการควบคุม D ไม่พบ เข็มในกองหญ้า
ที่ไม่ดี
มันแน่นอนมี
ลองอย่างอื่น
อาจจะเป็นเพราะฉันใส่ มันที่จุดเริ่มต้น
>> ขอทำ 41, 42, 43
มีเราไป
มันก็พบว่ามัน
ขอวางไว้ที่ท้ายในขณะนี้เพียง เพื่อให้เราสามารถเป็นอย่าง -
40, 41, 42
ไม่พบเ​​ข็ม
ดังนั้นที่ผมกล่าวถึงก่อนหน้านี้
แต่น่าเสียดายที่ฉันรู้ว่านี้ ที่จะเกิดขึ้น
>> แต่สำหรับวัตถุประสงค์สอน มันเป็นเรื่องที่ดีที่จะสำรวจมัน
มันไม่ทำงาน
ด้วยเหตุผลบางอย่างก็ไม่สามารถหาได้
เรารู้ว่าสิ่งที่อยู่ในมี แต่ เราไม่ได้หามัน
ดังนั้นสิ่งหนึ่งที่เราจะทำคือไปผ่าน GDB ที่จะหาได้ แต่ไม่ทุกคน
โดยไม่ต้องผ่าน GDB มี ความรู้สึกของการที่เราเมาขึ้น?
[? madu? ?]
>> นักเรียน: ฉันคิดว่ามันอาจจะมีเมื่อสิ้นสุด เท่ากับที่จุดเริ่มต้นและเป็น
เพียงแค่รายการหนึ่งองค์ประกอบ
แล้วมันก็จะไม่สนใจมันแทน ของจริงการตรวจสอบ
>> เจสัน Hirschhorn: นั่น ตรงขวา
เมื่อสิ้นสุดเท่ากับจุดเริ่มต้นที่เราทำ ยังคงมีองค์ประกอบในรายการของเราหรือไม่
>> นักเรียน: ใช่
>> เจสัน Hirschhorn: ใช่ในความเป็นจริงเรา มีหนึ่งและมีเพียงองค์ประกอบหนึ่ง
และว่าส่วนใหญ่มีแนวโน้มที่จะเกิดขึ้นเมื่อ รหัสต่อเราทดสอบเราอยู่ที่
ด้านหน้าของกองหญ้าหรือที่ ในตอนท้ายของกองหญ้า
นั่นคือสิ่งที่จุดเริ่มต้นและ ตอนจบจะเท่ากับ
หนึ่งที่มีการค้นหาแบบไบนารี
ดังนั้นในทั้งสองกรณีก็ไม่ได้ผล เพราะตอนจบเท่ากับจุดเริ่มต้น
>> แต่ถ้าจบเท่ากับจุดเริ่มต้น ไม่ห่วงขณะนี้ดำเนินการ?
มันไม่ได้
และเราจะได้มีการตรวจสอบ ที่อีกครั้งผ่าน GDB
ดังนั้นวิธีที่เราสามารถแก้ไขรหัสนี้เพราะ เมื่อในขณะที่ตอนจบมีค่าเท่ากับ
เริ่มต้นเรายังต้องการนี​​้ ในขณะที่วงในการทำงาน
>> ดังนั้นสิ่งที่เราสามารถแก้ไขปัญหาให้กับสาย 18?
>> นักเรียน: [ไม่ได้ยิน] เป็นมากขึ้น มากกว่าหรือเท่ากับ
>> เจสัน Hirschhorn: แน่นอนขวา
ในขณะที่ตอนจบมากกว่า หรือเท่ากับที่จุดเริ่มต้น
ดังนั้นตอนนี้เราให้แน่ใจว่าจะได้รับที่ กรณีมุมในตอนท้าย
และขอดู
ขอใช้นี้อีกครั้งหนึ่ง
>> ขอให้ทุกคน
อีกครั้งคุณจะมีเพียงแค่ ทำตามที่นี่
ค้นหา 41 เวลานี้
เพียงแค่ให้มันสอดคล้อง
>> ค้นหา 42
ขอวางไว้ที่จุดเริ่มต้น -
42, 43, 44
เราพบว่ามัน
เพื่อให้เป็นจริงการเปลี่ยนแปลง เราต้องการที่จะทำให้
>> นั่นเป็นจำนวนมากของการเข้ารหัสเรา เพียงแค่ทำค้นหาแบบไบนารี
ไม่มีใครมีคำถามใด ๆ ก่อนที่จะ ฉันย้ายเข้าไปในเส้นที่เราเขียนใน
ค้นหาแบบไบนารีหรือวิธีการที่เราคิด สิ่งที่เราไม่คิดออก?
ก่อนที่เราจะย้ายไปฉันยังต้องการที่จะชี้ให้ โดยที่และขนาดใหญ่เราแมป
หลอกรหัสหนึ่งของเรา อย่างใดอย่างหนึ่งลงในรหัสของเรา
>> เราไม่ได้ว่าสิ่งที่ยุ่งยาก ที่จะคิดออกด้วย
เริ่มต้นและสิ้นสุด
แต่คุณไม่ได้คิดออกว่าคุณ จะได้เขียนสวยมาก
รหัสเหมือนกันบันทึก ที่ด้านบนสองเส้น
แล้วคุณจะได้รู้ว่าเมื่อ คุณทำให้มันในการตรวจสอบและกรณีที่
คุณต้องการอะไร
ดังนั้นแม้ว่าคุณจะได้ปฏิบัติตามของเรา สายหลอกรหัสกับสายที่คุณจะได้
อากาศทั้งหมด แต่สองบรรทัด รหัสที่คุณจำเป็นในการเขียน
>> และผมยินดีที่จะเดิมพันที่พวกคุณ จะได้ทั้งหมดคิดว่าออก
สวยได้อย่างรวดเร็วว่าคุณต้องการที่จะใส่ จัดเรียงบางส่วนของเครื่องหมายในนั้นที่จะคิด
ออกที่คุณได้
อีกครั้งเป็นอำนาจของการทำ ก่อนหลอกรหัสเวลา
เพื่อให้เราสามารถทำตรรกะแรกแล้ว เราสามารถกังวลเกี่ยวกับไวยากรณ์
>> เราได้รับการสับสนเกี่ยวกับตรรกะ ในขณะที่พยายามที่จะเขียนรหัสนี้ใน C
เราจะมีอากาศทั้งหมด messed up
แล้วเราต้องการจะถามคำถามเกี่ยวกับ ตรรกะและไวยากรณ์และสอดคล้อง
พวกเขาทั้งหมดเข้าด้วยกัน
และเราจะมีอากาศที่หายไป ในสิ่งที่ได้อย่างรวดเร็วสามารถกลายเป็น
ปัญหาที่ยากมาก
จึงขอย้ายไปตอนนี้ ในการเรียงลำดับการเลือก
>> เรามี 20 นาทีที่เหลือ
ดังนั้นผมจึงมีความรู้สึกที่เราจะไม่สามารถที่จะ ได้รับผ่านทั้งหมดของการจัดเรียงเลือก
และฟองเรียง
แต่ให้เราพยายามอย่างน้อย เพื่อเสร็จสิ้นการจัดเรียงเลือก
ดังนั้นการเลือกใช้การเรียงลำดับการใช้ ต่อไปนี้การประกาศฟังก์ชัน
>> อีกครั้งนี้จะมาจาก กำหนดปัญหาการตั้งค่า
ค่า int เป็นวงเล็บคือ อาร์เรย์ของจำนวนเต็ม
และ int.n คือขนาดของอาร์เรย์ที่
เรียงลำดับการเลือกที่จะ ในการจัดเรียงแถวนี้
>> ดังนั้นต่อแบบจิตของเราเลือก จัดเรียงเราดึง -
ครั้งแรกที่เราไปผ่านรายการแรก เวลาหาจำนวนที่เล็กที่สุด
วางไว้ที่จุดเริ่มต้นหาที่สอง จำนวนที่เล็กที่สุดใส่ไว้ใน
ตำแหน่งที่สองถ้าเราต้องการที่จะ การจัดเรียงลำดับจากน้อยไปมาก
ฉันไม่ได้บังคับให้คุณเขียน หลอกรหัสได้ในขณะนี้
>> แต่ก่อนที่เราจะทำรหัสเป็นชั้นใน ห้านาทีที่เรากำลังจะเขียน
หลอกรหัสเพื่อให้เรามีความรู้สึกบางอย่าง ที่เรากำลังจะ
ดังนั้นความพยายามที่จะเขียนหลอกรหัส ด้วยตัวคุณเอง
แล้วพยายามที่จะเปิดที่ นามแฝงรหัสลงในรหัส
เราจะทำอย่างไรที่เป็นกลุ่ม ในห้านาที
>> และแน่นอนให้เราทราบว่า คุณมีคำถามใด
>> นักเรียน: นั่นมันได้หรือไม่
>> เจสัน Hirschhorn: ดูวิธีไกลคุณ จะได้รับในสองนาที
ผมเข้าใจว่าคุณจะไม่ สามารถจบ
แต่เราจะไปกว่านี้เป็นกลุ่ม
>> คุณกำลังทั้งหมดเพื่อให้การเข้ารหัส [ไม่ได้ยิน] ดังนั้นฉัน ขอโทษที่จะหยุดสิ่งที่คุณทำ
แต่ขอไปผ่านทางนี้เป็นกลุ่ม
และอีกครั้งค้นหาแบบไบนารีคุณทั้งหมดให้ ฉันหนึ่งถ้าไม่สายของรหัส
ขอขอบคุณสำหรับการที่
เรากำลังจะทำในสิ่งเดียวกัน ที่นี่รหัสร่วมกันเป็นกลุ่ม
>> ดังนั้นการเลือกการจัดเรียง - ขอเขียน หลอกรหัสบางอย่างรวดเร็ว
ต่อรูปแบบทางจิตใครสามารถให้ฉัน บรรทัดแรกของหลอกรหัสกรุณา?
สิ่งที่ฉันต้องการจะทำอย่างไร
>> นักศึกษา: ในขณะที่รายการ คือออกคำสั่ง
>> เจสัน Hirschhorn: OK ในขณะที่ รายการจะออกคำสั่ง
และสิ่งที่คุณหมายถึง "ออกจากการสั่งซื้อ"
>> นักศึกษา: ในขณะที่ [ไม่ได้ยิน]
ไม่ได้รับการจัดเรียง
>> เจสัน Hirschhorn: ในขณะที่รายการ คือออกคำสั่งทำในสิ่งที่เราจะทำอย่างไร
ให้ฉันบรรทัดที่สอง กรุณามาร์คัส
>> นักเรียน: เพื่อหาต่อไป จำนวนที่เล็กที่สุด
นี้จะเยื้อง
>> เจสัน Hirschhorn: เพื่อหา จำนวนน้อยที่สุดต่อไป
แล้วคนอื่น?
เมื่อเราหาที่เล็กที่สุดต่อไป จำนวนสิ่งที่เราจะทำอย่างไร
ฉันจะบอกว่าหา จำนวนที่เล็กที่สุด
นั่นคือสิ่งที่เราต้องการจะทำ
>> เพื่อหาจำนวนที่เล็กที่สุด
แล้วเราจะทำอย่างไร
>> นักเรียน: [ไม่ได้ยิน] ที่จุดเริ่มต้น
>> เจสัน Hirschhorn: ขอโทษ?
>> นักเรียน: วางไว้ใน จุดเริ่มต้นของรายการ
>> เจสัน Hirschhorn: ดังนั้นวางไว้ใน จุดเริ่มต้นของรายการ
และสิ่งที่เราทำเพื่อสิ่งที่ ที่อยู่ในจุดเริ่มต้น
ของรายการใช่ไหม
เรากำลังเขียนทับอะไรบางอย่าง
ดังนั้นเราจะใส่หรือไม่ที่
ใช่แอนนา?
>> นักเรียน: ที่เล็กที่สุดที่ จำนวนของคน?
>> เจสัน Hirshhorn: เพื่อวางจุดเริ่มต้น ของรายการที่
จำนวนที่เล็กที่สุดคือ
ดังนั้นในขณะที่รายการจะออกคำสั่งให้ค้นหา จำนวนที่เล็กที่สุดที่วางไว้ใน
จุดเริ่มต้นของรายการที่วาง จุดเริ่มต้นของรายการที่
จำนวนที่เล็กที่สุดคือ
มาร์คัสคุณสามารถใช้ถ้อยคำใหม่บรรทัดนี้ ในขณะที่รายชื่อออกจากการสั่งซื้อ
>> นักศึกษา: ในขณะที่ตัวเลข ยังไม่ได้รับการเรียงลำดับ?
>> เจสัน Hirshhorn: OK ดังนั้นเพื่อที่จะ รู้ว่าตัวเลขที่ยังไม่ได้รับ
เรียงลำดับสิ่งที่เราต้องทำอย่างไร
เท่าไหร่เราต้อง ผ่านรายการนี​​้
>> นักศึกษา: ดังนั้นผมคิดว่าสำหรับวงหรือ ในขณะที่ในขณะที่ตัวเลขการตรวจสอบน้อย
กว่าความยาวของรายการหรือไม่
>> เจสัน Hirshhorn: ตกลงที่ดี
ฉันคิดว่าฉัน misphrased คำถามของฉันไม่ดี
ผมเพียงแค่พยายามที่จะได้รับที่ เราจะต้องไป
ผ่านรายการทั้งหมด
ดังนั้นในขณะที่รายการจะออกคำสั่ง สำหรับผมเป็นเรื่องยากที่จะแมปบน
แต่โดยทั่วไปว่าเป็นวิธีที่ ผมคิดว่าเกี่ยวกับเรื่องนี้
ผ่านรายการทั้งหมดที่พบ จำนวนที่เล็กที่สุดวางไว้ใน
เริ่มต้น - ที่จริงคุณขวา
ขอนำพวกเขาทั้งสอง
>> ดังนั้นในขณะที่รายการเป็นออกคำสั่งเรา ต้องผ่านรายการทั้งหมด
เมื่อหาที่เล็กที่สุดในจำนวนสถานที่ที่ มันอยู่ในจุดเริ่มต้นของรายการที่วาง
จุดเริ่มต้นของรายการที่ จำนวนที่เล็กที่สุดคือแล้วถ้า
รายการยังคงออกคำสั่งเราได้ ได้ไปผ่านทางนี้
กระบวนการอีกครั้งใช่ไหม
นั่นเป็นเหตุผลที่เลือกจัดเรียง, Big-O รันไทม์ ของการจัดเรียงเลือกใคร?
>> นักเรียน: n ยกกำลัง
>> เจสัน Hirshhorn: n ยกกำลังสอง
เพราะชอบมาร์คัสและฉันรู้เพียงแค่ ที่นี่เรากำลังจะต้อง
ผ่านรายการรายการ จำนวนครั้ง
ดังนั้นจะผ่านอะไรบางอย่างที่ ระยะเวลา n n จำนวนครั้ง
ในความเป็นจริง n ยกกำลัง
>> ดังนั้นนี่คือ pseudocode ของเรา
นี้ดูดีมาก
ไม่มีใครมีคำถามใด ๆ เกี่ยวกับ pseudocode หรือไม่
เพราะอันที่จริงการจัดเรียงควรเลือก อาจมา 1-1 รหัสจาก
pseudocode
ดังนั้นคำถามใด ๆ เกี่ยวกับ ตรรกะของ pseudocode หรือไม่
กรุณาสอบถามตอนนี้
>> เรียงลำดับการเลือก - ในขณะที่รายชื่อออก คำสั่งที่เรากำลังจะผ่านมันไป
และหาทุกครั้งที่มีขนาดเล็กที่สุด และวางไว้ในหน้า
ดังนั้นในขณะที่รายการจะออกคำสั่งได้ ใครสักคนที่ให้ฉันบรรทัดของรหัสที่ว่า
ไม่ได้ให้ฉันบรรทัด ของรหัสยังได้มั้ย
มันเสียงเหมือนสิ่งที่?
>> นักเรียน: นั่นสำหรับวง
>> เจสัน Hirshhorn: มันเสียง เช่นสำหรับวง
ตกลงคุณสามารถให้ฉันสำหรับวง?
สำหรับ -
>> นักเรียน: i เท่ากับ 0
>> เจสัน Hirshhorn: i หรือ -
สิ่งที่เราขาดหายไป
สิ่งที่จะไปที่นี่?
>> นักเรียน: Int
>> เจสัน Hirshhorn: แน่นอน
(int i = 0; -
>> นักเรียน: ฉัน <n; i + +)
>> เจสัน Hirshhorn: ตอกมันเจฟฟ์
เรากำลังจะผ่านรายการใช่ไหม
เราได้เห็นว่าก่อนที่รหัส
สมบูรณ์
ดังนั้นขอใส่วงเล็บปีกกาของเราที่นี่
ผมจะนำบางส่วน วงเล็บปีกกาที่นี่
>> ดังนั้นในขณะที่มันเป็น 0 เราจำเป็นต้องไป ผ่านรายการทั้งหมด
ดังนั้นทุกครั้งที่เราไปผ่านรายการ สิ่งที่เราต้องการที่จะติดตาม?
>> นักศึกษา: ถ้าสัญญาใด ๆ ที่ทำ
>> เจสัน Hirshhorn: ค้นหา จำนวนที่เล็กที่สุด
ดังนั้นเราควรจะติดตาม จำนวนที่เล็กที่สุดในแต่ละครั้ง
ดังนั้นสายที่ฉันสามารถทำได้ในการติดตาม ของจำนวนที่เล็กที่สุดหรือไม่
Aleha วิธีการที่ฉันสามารถให้ ติดตามอะไร
>> นักเรียน: เริ่มต้นตัวแปรใหม่
>> เจสัน Hirshhorn: เริ่มต้นตัวแปรใหม่
ดังนั้นเรามาสร้างตัวแปร
ประเภทใด?
>> นักเรียน: Int
>> เจสัน Hirshhorn: Int
ขอเรียกว่าเล็ก
และสิ่งที่ไม่ได้เท่ากับเมื่อ เราเพิ่งเริ่มออก
เราไม่ได้ไปผ่านรายการยัง
เราอยู่ที่ส่วนแรกของ รายการเป็นครั้งแรกของเราผ่าน
สิ่งที่ไม่ได้เท่ากัน จำนวนที่เล็กที่สุด?
>> นักเรียน: ค่าฉัน
>> เจสัน Hirshhorn: ค่าฉัน
ที่เสียงตรงขวาใช่มั้ย?
จำนวนที่เล็กที่สุดที่จุดเริ่มต้น เป็นที่ที่เรามี
ดังนั้นตอนนี้เรามีของเรามีขนาดเล็กที่สุดและเราต้อง ที่จะไปผ่านรายการทั้งหมดและ
เปรียบเทียบนี้มีขนาดเล็กที่สุด ที่จะทุกอย่างอื่น
ดังนั้นเราจะไปผ่านรายการอีกครั้งหรือไม่
ไมเคิล?
>> นักศึกษา: คุณจำเป็นต้องทำ อีกวง
>> เจสัน Hirshhorn: อีกสำหรับวง
ลองทำมัน
ให้ฉันรหัสบางส่วน
>> นักศึกษา: สำหรับวง -
เพื่อที่เล็กที่สุด -
เพียง int เจที่คุณสามารถพูด
= 0; ดังกล่าวว่า -
>> เจสัน Hirshhorn: ดีถ้าเราต้องการ ไปผ่านรายการทั้งหมด -
>> นักเรียน: เจ <n, เจ + + +)
>> เจสัน Hirshhorn: Fantastic
เรากำลังจะผ่านไป สำหรับวงอีกครั้ง
และเราจะพบ จำนวนที่เล็กที่สุด?
ทอม?
ขณะนี้มีจำนวนที่เล็กที่สุดในปัจจุบัน ดังนั้นวิธีที่เราจะหาที่เล็กที่สุดใหม่หรือไม่
>> นักศึกษา: เราสามารถตรวจสอบว่ามีขนาดเล็กที่สุด จำนวนที่เรามีนั้นยิ่งใหญ่กว่า
ค่าวงเล็บเจ
>> เจสัน Hirshhorn: ดังนั้นถ้ามีขนาดเล็กที่สุดคือ สูงกว่าค่าวงเล็บเจ
ดังนั้นถ้ามีขนาดเล็กที่สุดในปัจจุบันของเรา มากกว่า -
ฉันจะย้ายทั้งสองสาย ของรหัสออกมีเป็นครั้งที่สอง
เพราะก่อนที่เราจะทำการแลกเปลี่ยนใด ๆ เรา ต้องผ่านรายการทั้งหมด
ดังนั้น pseudocode นี้ควรจะจริง จะอยู่นอกที่ด้านในสำหรับวง
เพื่อไปผ่านรายการทั้งหมด
หากมีขนาดเล็กมากกว่า ค่าเจแล้วสิ่งที่?
>> นักเรียน: แล้วที่เล็กที่สุด เท่ากับค่าเจ
>> เจสัน Hirshhorn: Fantastic
หนึ่งคำถามที่รวดเร็ว -
ครั้งแรกที่เราไปถึงวงนี้ ฉันจะเท่ากับ 0, เจที่เกิด
เท่ากับ 0 เมื่อเราได้รับที่นี่
ดังนั้นเรากำลังจะได้รับการเปรียบเทียบ จำนวนตัวเอง
ที่มีประสิทธิภาพ
ไม่มีก็ไม่ได้มีประสิทธิภาพจริงๆ
ดังนั้นเจของเราไม่จำเป็นต้องไป จาก 0 ถึง n แต่ละครั้ง
เรามักจะต้องตรวจสอบ ผ่านรายการทั้งหมดหรือไม่
[ไม่ได้ยิน]?
>> นักเรียน: เริ่มต้นด้วยฉันแทน
>> เจสัน Hirshhorn: เจสามารถ เริ่มต้นด้วยอะไร
>> นักเรียน: ฉัน
>> เจสัน Hirshhorn: เจสามารถเริ่มต้นด้วยฉัน
ดังนั้นตอนนี้เราเปรียบเทียบการเริ่มต้น กับคนที่เรากำลัง
แต่แม้แล้วคือเป็น ที่มีประสิทธิภาพเป็นไปได้หรือไม่
>> นักเรียน: i + 1
>> เจสัน Hirshhorn: i + 1 น่าจะเป็น มีประสิทธิภาพมากที่สุดเพราะเรา
มีฉัน
เรากำลังที่ระบุว่าเป็น ที่เล็กที่สุดในสาย 15
เรากำลังจะเริ่มต้นด้วย อย่างใดอย่างหนึ่งต่อไปโดยอัตโนมัติ
ดังนั้นเราจึงไปผ่านห่วงสำหรับ
เราจะผ่านไปในแต่ละครั้ง
เราจะผ่านไปหลายครั้ง
ตอนนี้เราเคยผ่าน ภายในนี้สำหรับวง
เรามีค่าที่น้อยที่สุดประหยัด
เราต้องวางไว้ที่ จุดเริ่มต้นของรายการ
ดังนั้นฉันจะวางไว้ที่ จุดเริ่มต้นของรายการหรือไม่
เป็นตัวแปรที่หมายถึงอะไร ที่จุดเริ่มต้นของรายการหรือไม่
เรากำลังอยู่ในด้านนอกนี้ห่วง ดังนั้นสิ่งที่หมายถึง
จุดเริ่มต้นของรายการหรือไม่
>> นักเรียน: ค่าฉัน
>> เจสัน Hirshhorn: แน่นอนขวา
ค่า i เป็นจุดเริ่มต้นของ -
หรือขอโทษไม่ได้เริ่มต้น
นั่นคือทำให้เกิดความสับสน
มันเป็นที่ที่เราอยู่ในจุดเริ่มต้นของ ส่วนที่ไม่ได้คัดแยกของรายการ
ดังนั้นค่าฉัน
และสิ่งที่ไม่ว่าเท่ากัน
>> นักเรียน: เล็ก
>> เจสัน Hirshhorn: ค่า i เท่ากับอะไร
>> นักเรียน: เล็ก
>> เจสัน Hirshhorn: เล็ก
ขวาตรง
ดังนั้นเราวางไว้ที่จุดเริ่มต้น ของรายการและตอนนี้เราต้องการที่จะนำ
จุดเริ่มต้นของรายการที่ จำนวนที่เล็กที่สุดคือ
ดังนั้นฉันจะเขียนที่ จำนวนที่เล็กที่สุดคือ?
คุณค่าของสิ่งที่
>> นักเรียน: 0
>> เจสัน Hirshhorn: ขนาดเล็ก จำนวนเป็นที่ 0?
>> นักเรียน: ใช่
>> เจสัน Hirshhorn: ถ้ามีขนาดเล็กที่สุด จำนวนของคนที่ส่วนท้ายของ
ไม่ได้คัดแยกรายชื่อนี้
>> นักเรียน: ขออภัยสิ่งที่เป็นคำถามได้หรือไม่
>> เจสัน Hirshhorn: อยู่ที่ไหน จำนวนที่เล็กที่สุดหรือไม่
เราเอาที่เล็กที่สุดและวางมันไว้ที่ เริ่มต้นด้วยบรรทัดนี้ที่นี่
>> นักเรียน: มันควรจะมี ถูกเก็บไว้ในบาง -
>> นักเรียน: ค่าเจ
>> เจสัน Hirshhorn: ดีก็ ไม่จำเป็นต้องเห็นคุณค่าของเจ
มันไม่ได้อยู่ที่จุดนี้
>> นักศึกษา: คุณมีการประกาศ ตัวแปรก่อนหน้านี้และ
แล้วกำหนดให้ -
เมื่อคุณพบว่าจำนวนที่เล็กที่สุด กำหนดดัชนีของตัวเลขที่จะ
ตัวแปรบางส่วนหรือสิ่งที่ต้องการที่
>> เจสัน Hirshhorn: ดังนั้นสามารถ คุณบอกว่าอีกครั้งหรือไม่
>> นักศึกษา: ดังนั้นที่คุณประกาศ int ที่เล็กที่สุดที่คุณควรประกาศ int
ดัชนีที่เล็กที่สุด = I, หรือ สิ่งที่ต้องการที่
>> เจสัน Hirshhorn: เพื่อที่ฉันจะ int ที่เล็กที่สุดที่ฉันไม่ควรจะติดตาม
ของค่า แต่ตำแหน่ง
int = smallest_location ในครั้งนี้ กรณีเราก็จะทำผม
เราจำเป็นต้องรู้ว่ามันอยู่ที่ไหน
เรามีที่ส่วนท้ายของรหัสและเรา ตระหนักว่าเรามีความคิดที่มันก็ไม่
และอื่น ๆ อีกครั้งที่เรามีการทำแผนที่ นี้ 00:59
พวกคุณเขียนโปรแกรมนี้จะของคุณเอง อาจจะได้รับปัญหาเดียวกัน
วิธี heck ฉันจะหามันได้หรือไม่
แล้วคุณจะรู้ว่ารอผม ต้องติดตามว่า
>> ดังนั้นถ้ามีขนาดเล็กมากขึ้น กว่าค่าที่เจ
เราตั้งค่าที่เล็กที่สุดเท่ากับค่าเจ
เราไม่อะไรที่ต้องเปลี่ยน
คอนสแตนติ, สิ่งที่อื่นทำ เราจำเป็นต้องเปลี่ยน
>> นักเรียน: สถานที่ตั้ง
>> เจสัน Hirshhorn: แน่นอน
เพื่อให้ฉันบรรทัดในรหัสที่
>> นักเรียน: smallest_location = เจ
>> เจสัน Hirshhorn: แน่นอน
แล้วลงที่ท้ายที่สุดถ้าเราต้องการที่จะ ใส่จุดเริ่มต้นของรายการที่
จำนวนที่เล็กที่สุดเป็นวิธีการที่ เราจะดูที่
จำนวนที่เล็กที่สุดคือ?
มาร์คัส?
>> นักเรียน: จำนวนที่เล็กที่สุดคือ ตั้งอยู่ในสถานที่มีขนาดเล็กที่สุด
>> เจสัน Hirshhorn: ดังนั้นที่ค่า smallest_location
และสิ่งที่เราใส่มี
จุดเริ่มต้นของ รายการสิ่งที่
>> นักเรียน: เราไม่ทราบจริงๆ อีกต่อไปเพราะเราเขียนทับ
ดังนั้นจึงเป็นสถานที่เปลี่ยน ของทั้งสองสาย?
หากคุณสลับทั้งสองเส้นรอบ
>> เจสัน Hirshhorn: ตกลงดังนั้นที่เราทำไม่ได้ อีกต่อไปเพราะเราได้ตั้งค่าสาย
ก่อนที่ค่าฉันไปหาน้อยที่สุด
ดังนั้นเราจึงหายไปที่ค่าเริ่มต้น
ดังนั้นคุณกล่าวว่าการแลกเปลี่ยนทั้งสองสาย
ดังนั้นตอนนี้วางจุดเริ่มต้นของรายการ ซึ่งมีจำนวนที่เล็กที่สุดคือ
ดังนั้น smallest_location เท่ากับค่าฉัน
นั่นคือจุดเริ่มต้นของการเคลื่อนไหวนี้ ส่วนที่ไม่ได้คัดแยกของรายการ
สถานที่เล็กที่สุด
แล้วฉันเป็นค่าที่เรากำลังจะย้าย จำนวนน้อยที่สุดที่
>> ที่ทำให้รู้สึกว่าทำไมเรา ก็จะทำให้การแลกเปลี่ยนที่
เราจะมีการเขียนทับค่าที่ - สิ่งที่คุณอาจจะมีอีก
คิดออกและพบว่าจีดีพี
ดังนั้นเราจึงได้รับการดูแล ทั้งหมด pseudocode
มีอะไรอีกที่เรา ต้องเขียนที่นี่
ทุกคนสามารถคิดอะไร?
>> นักศึกษา: คุณจะรู้ได้อย่างไร เมื่อคุณกำลังทำ
>> เจสัน Hirshhorn: วิธีที่เราทำ รู้ว่าเรากำลังทำอะไร
คำถามที่ดี
ดังนั้นทำอย่างไรเรารู้ว่าเมื่อเราดำเนินการเสร็จแล้ว
>> นักเรียน: สร้างตัวแปรให้นับ หากมีการแลกเปลี่ยนที่ทำหรือไม่
และผ่านผ่าน
>> เจสัน Hirshhorn: OK
ที่จะทำงานในการเรียงลำดับฟอง
แต่สำหรับการจัดเรียงเลือกถ้าเราทำไม่ได้ ทำให้การแลกเปลี่ยนที่ก็อาจจะมี
เพราะค่าที่น้อยที่สุดคือ ในสถานที่ที่เหมาะสมของ
เราอาจจะมีรายการที่ 1, 2, 4, 3
ครั้งที่สองผ่านทางเรา จะไม่ทำให้สัญญาใด ๆ
เราจะอยู่กับจำนวน 2 แต่เราจะ ยังคงต้องให้ไป
ดังนั้นเราต้องติดตามเมื่อ ที่เรากำลังทำหรือไม่เราเพียงแค่ต้องการที่จะไป
จนนี้เสร็จสมบูรณ์?
>> นักเรียน: เราก็สามารถไป จนกว่าจะมีการดำเนินการเสร็จสิ้น
>> เจสัน Hirshhorn: เราสามารถเพียง ไปจนกว่าจะถึงนี้จะเสร็จสิ้น
ในการเรียงลำดับฟองคุณตรงขวา เจฟฟ์และ Aleha กับทางออกของคุณ -
มันเป็นสิ่งที่ดีในการติดตามของวิธีการที่หลาย สัญญาที่คุณทำเพราะในฟอง
จัดเรียงถ้าคุณทำในความเป็นจริงทำให้ไม่มีสัญญาแลกเปลี่ยน, คุณกำลังทำและคุณอาจจะสามารถตัดของคุณ
ปัญหาลงเล็กน้อย
แต่สำหรับการจัดเรียงการเลือกคุณได้จริงๆ ได้ไปผ่านไปยังจุดสิ้นสุดของ
รายการแต่ละครั้งประมาณ
>> ดังนั้นนี่คือที่
เรามีสองนาทีที่เหลือ
ขอให้ทุกคน
ผมขอเพียงแค่เปิดหาที่นี่และทำให้ แน่ใจว่าฉันในความเป็นจริงการเรียกขึ้นไป -
ฉันไม่ได้เรียกร้องการจัดเรียงฟอง
ลองเปลี่ยนนี้ในการเรียงลำดับการเลือก
ทำให้ทุก. / หา
ลองหา 42
เวลาที่เรากำลังจะผ่านไปนี้ รายการไม่ได้คัดแยกเพราะมันควรจะเรียงลำดับ
ครั้งแรกต่อการหารหัส - ควรเรียงลำดับ ครั้งแรกที่ใช้ฟังก์ชั่นการจัดเรียงของเราแล้ว
มองหาสิ่งที่
นิ้วมือข​​องทุกคนข้าม
>> โอ้ความดีของฉัน
โอ้หัวใจของฉันได้รับการตี
เพื่อให้เป็นที่ถูกต้อง
ในความเป็นจริงถ้าเราวิ่งมากขึ้น อย่างกว้างขวางรหัสเท่าที่ฉันสามารถ
บอกเป็นที่ถูกต้องสมบูรณ์
มีคำแนะนำบางส่วน ฉันจะมีให้คุณ
ตัวอย่างเช่น 15 และ 16 ดูเหมือน ซ้ำซ้อนน้อย
ดูเหมือนว่าคุณไม่จำเป็นต้อง จำเป็นที่จะต้องประหยัดทั้งผู้ที่
หากคุณมีสถานที่เล็กที่สุดที่คุณ สามารถหาค่าที่น้อยที่สุดโดย
ค่าการพิมพ์ของฉัน
>> ดังนั้นถ้าผมจะถูกจัดลำดับรหัสของคุณ ซึ่งในความเป็นจริงฉันจะเป็นฉัน
อาจจะใช้เวลาปิดจุดถ้าคุณ รวมทั้งสองแบบนี้เพราะคุณ
ไม่จำเป็นต้องมีทั้งสองแบบนี้
หากคุณมีสถานที่ที่คุณสามารถ ได้อย่างง่ายดายมากได้รับค่า
และดูเหมือนว่าแปลก ๆ ในการจัดเก็บทั้งสอง
อาจจะไม่ได้ใช้จุด แต่ แน่นอนความคิดเห็นที่ว่าอาจจะเป็น
ไม่ใช่ทางเลือกที่โวหาร ที่คุณต้องทำ
แน่นอนยังคงรหัส ทำงานสมบูรณ์ดี
>> ดังนั้นน่าเสียดายที่เราไม่ได้ ได้รับการจัดเรียงฟอง
ฉันขอโทษเกี่ยวกับว่า
เราได้เลือกการจัดเรียงเสร็จ
ไม่มีใครมีคำถามสุดท้ายใด ๆ เกี่ยวกับการจัดเรียงการเลือก?
>> ตกลงก่อนที่เราจะออกหัวฉันต้องการให้คุณ ที่จะเปิดเบราว์เซอร์ Chrome ของคุณ
ขออภัยที่เป็นเพียงปลั๊กที่เห็นได้ชัด สำหรับประเภทหนึ่งของเบราว์เซอร์อินเทอร์เน็ต
คุณสามารถเปิดชนิดของเบราว์เซอร์ใด ๆ แต่มันอาจจะเป็นโครเมี่ยม
และไปที่เว็บไซต์ต่อไปนี้ -
sayat.me/cs50
หากคุณไม่ได้พิมพ์ในเครื่องคอมพิวเตอร์ของคุณ ตอนนี้คุณกำลังอย่างชัดเจน
ไม่ได้ทำมันทอม
>> และโปรดทำอย่างใดอย่างหนึ่งที่เหมาะสม ในขณะนี้หรือในชั่วโมงถัดไป -
ให้ข้อเสนอแนะบางอย่างฉัน
นี้เป็นเพียงส่วนสอง
เรามีอื่น ๆ อีกมากมายด้วยกันดังนั้นฉัน มีจำนวนมากในการปรับปรุงห้องพัก
ฉันหวังว่ายังไม่ได้ทำบางสิ่งบางอย่างที่ดี
เพื่อให้คุณสามารถทำให้ฉันรู้สึกไม่ดีเลย แต่ถ้า คุณยังต้องการที่จะให้ฉันยิ้ม
ใบหน้าฉันอยากจะขอบคุณที่ได้เป็นอย่างดี
ที่เติมเข้ามา
>> และมีหนึ่งนาทีที่เหลือ ว่าเป็นสัปดาห์ที่สาม
ฉันจะยืนอยู่นอกสำหรับบิต ถ้าคุณมีคำถามใด ๆ
ผมจะเห็นพวกคุณใน บรรยายในวันพรุ่งนี้