การออกแบบอัลกอริทึมและความซับซ้อน - วิธีคิดในแบบนั้น


15

คำถามของฉันเป็นคำถามทั่วไป: ฉันจะเริ่มคิดในแง่ของการออกแบบอัลกอริทึมและความซับซ้อนได้อย่างไร ฉันจะเข้าเรียนหลักสูตรบัณฑิตศึกษาในการออกแบบอัลกอริทึม ฉันลงทะเบียนก่อนหน้านี้แล้ว แต่ทิ้งไว้ในภายหลังเพราะฉันทำไม่ทัน ฉันต้องเรียนหลักสูตรนี้ตามความต้องการ

มีวิธีการคิดแบบนี้หรือไม่? ฉันรู้ว่าสิ่งนี้ทำให้มันค่อนข้างหยาบ แต่บางครั้งมุมมองที่สดใหม่ช่วยให้คิดถึงเรื่องที่แตกต่าง

ปัญหาหลักที่ฉันมีกับหลักสูตรนี้ (และหลักสูตรเชิงทฤษฎีที่คล้ายกัน) คือ: ฉันจะรู้ได้อย่างไรว่าวิธีแก้ไขปัญหาที่ฉันคิดถูกต้อง ฉันพบว่าส่วนใดส่วนหนึ่งในเชิงทฤษฎีเป็นสิ่งที่ไม่มีกฎเกณฑ์โดยเฉพาะอย่างยิ่งเมื่อ 'พิสูจน์' อัลกอริทึมที่แน่นอนทำหน้าที่หรือพฤติกรรมในทางใดทางหนึ่ง?

หลักสูตรของเราจะใช้ข้อความมาตรฐาน: บทนำสู่อัลกอริทึมโดย CLRS

มีตำรา / ไซต์ / หนังสือ / อื่น ๆ หรือไม่ ที่อาจเสนอวิธีในการสร้างความมั่นใจในสาขานี้

ขอบคุณทุกคน,

Jason Dane


2
ฉันขอแนะนำให้ดูที่โพสต์นี้ ฉันแนะนำหนังสือของ Udi Manber เป็นพิเศษ
MS Dousti

1
การอภิปรายเกี่ยวกับ StackOverflow นี้มีข้อเสนอแนะหลายประการ: stackoverflow.com/questions/2256721/…
Jeffε

2
ฉันสองคำแนะนำ Manber ตรวจสอบวิธีคิดเกี่ยวกับอัลกอริทึมโดย Jeff Edmonds: amazon.com/Think-About-Algorithms-Jeff-Edmonds/dp/0521614104
Jeffε

"ฉันจะรู้ได้อย่างไรว่าโซลูชันที่ฉันคิดถูกต้อง" คุณหมายถึง (1) คุณคิดอัลกอริทึม แต่ไม่ทราบวิธีการพิสูจน์ว่าถูกต้องหรือ (2) คุณมีหลักฐาน แต่คุณไม่แน่ใจว่าถูกต้องหรือไม่
Jukka Suomela

ขั้นตอนที่หนึ่ง: หยุดให้คำตอบแบบตรงและอ้างอิงโซลูชันของผู้อื่นแทน ;)
Raphael

คำตอบ:


18

ฉันคิดว่าหลักสูตรเกี่ยวกับการออกแบบอัลกอริทึมและความซับซ้อนในการคำนวณนั้นเป็นสิ่งที่ท้าทายสำหรับนักเรียนที่ไม่คุ้นเคยกับวิชาเหล่านี้เพราะพวกเขาต้องการวุฒิภาวะทางคณิตศาสตร์และทักษะการแก้ปัญหาในระดับหนึ่ง ในหลักสูตรระดับบัณฑิตศึกษาครั้งแรกของฉันใน "ความซับซ้อนในการคำนวณ" เพื่อนของฉันที่มีปริญญาคณิตศาสตร์บริสุทธิ์ของฉันบอกฉันว่าเขาประหลาดใจโดยข้อเท็จจริงที่ว่าแม้ว่าหลักสูตรนั้นไม่ต้องการพื้นหลังคณิตศาสตร์มาก (อย่างน้อยนั่นคือสิ่งที่บอก โครงร่างหลักสูตร) ​​จริง ๆ แล้วมันต้องใช้ทักษะเกือบทั้งหมดที่เขาได้รับจากคณิตศาสตร์บริสุทธิ์ทั้งหมดของเขาในระดับปริญญาตรี!

ฉันพบว่าฉันได้รู้เกี่ยวกับ "ทาง" มากที่สุด (เมื่อครั้งแรกที่ผมเริ่มต้นการศึกษาระดับบัณฑิตศึกษาของฉัน) โดยการอ่านและการทำแบบฝึกหัดจากหนังสือ Sipser ของ ตรวจสอบให้แน่ใจว่าคุณทำแบบฝึกหัดเพราะทักษะการแก้ปัญหาและวุฒิภาวะทางคณิตศาสตร์เป็นสิ่งที่คุณต้องการเรียนรู้ไม่ใช่แค่ข้อเท็จจริงหรือคำจำกัดความ

อย่างไรก็ตามหนังสือของ Sipser นั้นเหมาะสำหรับความซับซ้อนและสิ่งของที่มีความสมบูรณ์แบบสมบูรณ์เท่านั้นจึงไม่เพียงพอที่จะทดแทนหนังสือ CLRS ปัญหาเดียวของหนังสือ CLRS คือข้อดีของการครอบคลุมที่ครอบคลุมอาจกลายเป็นจุดอ่อนเนื่องจากหนังสืออาจดูน่ากลัวหรือล้นหลามสำหรับนักเรียน ดังนั้นคำแนะนำของฉันคือคุณควรไปที่ห้องสมุดและค้นหาหนังสือเกี่ยวกับอัลกอริทึมตรวจสอบทีละรายการและเลือกหนังสือที่เหมาะสมกับรูปแบบการคิดของคุณมากที่สุด และอย่าลืมทำแบบฝึกหัดอีกครั้ง!

สำหรับอัลกอริทึมส่วนตัวแนะนำหนังสือต่อไปนี้ (นอกเหนือจากที่แนะนำโดย Sadeq และ JeffE):

  • อัลกอริทึมหนังสือที่อ่านง่ายและสวยงามโดย S. Dasgupta, CH Papadimitriou และ UV Vazirani
  • นักฆ่าโน้ต (หรือร่างหนังสือ) โดย Jeff Erickson (เนื่องจาก JeffE นั้นถ่อมตัวเกินไปที่จะแนะนำบันทึกของเขาเองฉันจึงต้องทำเอง)

โดยทั่วไปเมื่อใดก็ตามที่คุณศึกษาอัลกอริทึมหรือโครงสร้างข้อมูลบางอย่างหากการอธิบายในตำราเรียนของคุณไม่ชัดเจนเพียงพอสำหรับคุณวิธีที่ดีที่สุดคือการค้นหาบันทึกการบรรยายในหัวข้อนั้นใน google ในบางกรณีคำอธิบายที่แตกต่างกันของสิ่งเดียวกันในที่สุดก็ให้ภาพที่สมบูรณ์ อย่างน้อยนั่นก็เป็นวิธีการทำงานสำหรับฉัน


8
+1 สำหรับบันทึกย่อของฆาตกรของ Jeff ฉันสนุกกับการอ่านมันเสมอ การประดิษฐ์ตัวอักษรภาษาอาหรับของอัลกอริทึมคำว่าสวยงามมาก
Mohammad Al-Turkistany
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.