การวิเคราะห์โครงสร้างข้อมูลและอัลกอริธึมด้วย Python (ฉบับที่ 2)
หนังสือเล่มนี้เป็นหนังสือเรียนคลาสสิกที่ใช้ภาษา Python ในการอธิบายโครงสร้างข้อมูลและอัลกอริธึม โดยครอบคลุมหัวข้อต่างๆ เช่น การทบทวนพื้นฐานของ Python, การวิเคราะห์อัลกอริธึม (การเขียนแบบโอใหญ่), โครงสร้างข้อมูลพื้นฐาน (สแตก, คิว, ลิสต์), การเรียกซ้ำ, การค้นหาและการจัดเรียงข้อมูล, อัลกอริธึมของต้นไม้และกราฟ พร้อมด้วยรายการโค้ดจริงเพื่อช่วยให้ผู้อ่านเข้าใจวิธีการนำเอาชนิดข้อมูลเชิงนามธรรมต่างๆ มาใช้งานอย่างมีประสิทธิภาพผ่านภาษา Python
ภาพรวมคอร์สเรียน
สรุปเนื้อหา
หนังสือเล่มนี้เป็นตำราคลาสสิกที่ใช้ภาษา Python ในการอธิบายโครงสร้างข้อมูลและอัลกอริธึม โดยครอบคลุมหัวข้อต่าง ๆ เช่น การทบทวนพื้นฐานของ Python, การวิเคราะห์อัลกอริธึม (การเขียนเชิงคำนวณแบบโอใหญ่), โครงสร้างข้อมูลพื้นฐาน (สแตก, คิว, ลิสต์), การเรียกซ้ำ, การค้นหาและการจัดเรียง, อัลกอริธึมของต้นไม้และกราฟ ผ่านรายการโค้ดที่ใช้งานจริง เพื่อช่วยให้ผู้อ่านเข้าใจวิธีการนำเอาประเภทข้อมูลที่ถูกนามธรรมมาใช้ในภาษา Python ได้อย่างมีประสิทธิภาพ
เพียงแค่เข้าใจโครงสร้างข้อมูลและอัลกอริธึมอย่างลึกซึ้ง จึงจะสามารถเชี่ยวชาญภาษา Python ได้จริง
ผู้แต่ง: แบรดลีย์ มิลเลอร์ (ศาสตราจารย์เกียรติคุณด้านวิทยาการคอมพิวเตอร์ มหาวิทยาลัยลูเธอรัน สหรัฐอเมริกา) และ เดวิด ราแนม (วิศวกรซอฟต์แวร์ด้านความฉลาดทางปัญญาจาก IBM Watson)
ขอบคุณ: ขอขอบคุณเพื่อนร่วมงานสตีฟ ฮับบาร์ด สำหรับข้อเสนอแนะจำนวนมากในฉบับที่ 1 และข้อมูลใหม่สำหรับฉบับที่ 2 รวมถึงผู้อ่านทุกท่านที่ส่งอีเมลแจ้งข้อผิดพลาดและข้อเสนอแนะ ขอบคุณพนักงานที่ร้านกาแฟ "จาเว่ จอห์น" ในเมืองดิโกล่า อย่างเมรี่ บ๊อบ เป็นต้น ที่ยอมให้เราเป็น “นักเขียนประจำ” ระหว่างหยุดพัก ขอขอบคุณทีมงานบริษัทสำนักพิมพ์แฟรงคลิน บีเดิล & แอสโซซิเอทส์ (โดยเฉพาะเจมส์ ไลซี่ และทอม ซัมเนอร์) ที่ทำงานร่วมกันอย่างสนุก ท้ายที่สุด ขอขอบคุณภรรยาของเราทั้งสองคน แจน มิลเลอร์ และเบรนดา ราแนม ที่มอบความรักและความสนับสนุน ทำให้หนังสือเล่มนี้กลายเป็นจริงได้
วัตถุประสงค์การเรียนรู้
- เข้าใจความสัมพันธ์ระหว่างวิทยาการคอมพิวเตอร์ อัลกอริธึม และการเขียนโปรแกรม พร้อมทั้งเข้าใจแนวคิดเรื่องประเภทข้อมูลที่ถูกนามธรรม (ADT) และการซ่อนข้อมูล (Information Hiding)
- ใช้ประเภทข้อมูลรวมภายในภาษา Python (ลิสต์ ทูเปิล เซต ไดก์ชันนารี) และโครงสร้างควบคุม (การวนซ้ำ การแยกเงื่อนไข การจัดการข้อผิดพลาด) ได้อย่างคล่องแคล่ว
- เข้าใจหลักการสำคัญของการเขียนโปรแกรมแบบวัตถุ (OOP) ของภาษา Python ได้แก่ การกำหนดคลาส การตั้งค่าคอนสตรัคเตอร์ การใช้โอเวอร์โหลดตัวดำเนินการ (เช่น การบวกเศษส่วน) การประยุกต์ใช้อัลกอริธึมยูคลิด และความแตกต่างระหว่างการเทียบเท่าแบบลึกกับแบบตื้น
- วิเคราะห์หลายแนวทางของอัลกอริธึม: สามารถอธิบายแนวทางสี่แบบในการตรวจจับคำที่มีตัวอักษรสลับกัน (การนับจำนวน, การเรียงลำดับ, การลองทุกกรณี, การนับจำนวน) พร้อมทั้งระบุความซับซ้อนตามเวลา (Time Complexity) ที่สัมพันธ์กัน
- วัดประสิทธิภาพของตัวเก็บข้อมูลในภาษา Python: เข้าใจประสิทธิภาพระดับโอใหญ่ (Big O) ของฟังก์ชันหลักในลิสต์ (List) และไดก์ชันนารี (Dict) และสามารถแยกความแตกต่างด้านประสิทธิภาพระหว่าง
pop()กับpop(i)ได้ - ความสามารถในการตรวจสอบประสิทธิภาพ: สามารถออกแบบการทดลองโดยใช้โมดูล
timeitเพื่อยืนยันความสอดคล้องระหว่างความซับซ้อนทางทฤษฎีกับเวลาทำงานจริง - เข้าใจและแยกแยะลักษณะเชิงตรรกะของโครงสร้างข้อมูลแบบเส้นตรง (สแตก คิว ควีว ลิสต์)
- สามารถใช้ประเภทข้อมูลพื้นฐานของภาษา Python (เช่น ลิสต์) สร้างสแตก คิว และควีวที่กำหนดเองได้
- เข้าใจการประยุกต์ใช้สแตกในการจัดการนิพจน์ (แปลงจากแบบปรกติเป็นแบบโพสต์ฟิกซ์ คำนวณผลลัพธ์จากแบบโพสต์ฟิกซ์) และการประยุกต์ใช้คิวในการจำลองระบบ (เช่น การจำลองเครื่องพิมพ์)
- เข้าใจหลักการสามข้อพื้นฐานของอัลกอริธึมแบบเรียกซ้ำ: สามารถระบุและเขียนฟังก์ชันแบบเรียกซ้ำที่มีเงื่อนไขพื้นฐาน สถานะที่เปลี่ยนแปลง และการเรียกตนเองได้อย่างแม่นยำ