เจสัน 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; - นักเรียน: ฉัน