1 / 86

บทที่ 1 บทนำ

บทที่ 1 บทนำ. วัตถุประสงค์คือ ความสามารถในการออกแบบอัลกอริทึมที่มีประสิทธิภาพในการแก้ไขปัญหาที่ได้รับ ซึ่งสามารถนำไปเขียนเป็นโปรแกรมคอมพิวเตอร์ ได้ ความสามารถ ในการออกแบบนี้จะเรียนและถ่ายทอดกันอย่างไร? 

Download Presentation

บทที่ 1 บทนำ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 1 บทนำ

  2. วัตถุประสงค์คือ ความสามารถในการออกแบบอัลกอริทึมที่มีประสิทธิภาพในการแก้ไขปัญหาที่ได้รับ ซึ่งสามารถนำไปเขียนเป็นโปรแกรมคอมพิวเตอร์ได้ • ความสามารถในการออกแบบนี้จะเรียนและถ่ายทอดกันอย่างไร?  • วิธีหนึ่งก็คือการยกตัวอย่างกลวิธีมาตรฐานต่างๆ ที่นักคอมพิวเตอร์เขาใช้กันอยู่ในการแก้ไขปัญหา พร้อมทั้งยกตัวอย่างปัญหาและอัลกอริทึมเพื่อแก้ไขปัญหาเหล่านั้น  

  3. ประเด็นสำคัญ คือ ไม่มีสูตรสำเร็จในการออกแบบ ดังนั้นปัญหาหนึ่งๆ จะมีขั้นตอนวิธีแก้ไขอยู่หลายแบบ จึงจำเป็นอย่างยิ่งที่เราจะต้องมีความรู้ในการวิเคราะห์เพื่อเปรียบเทียบข้อดีข้อเสียของแต่ละวิธีที่ออกแบบขึ้นได้  ดังนั้นสิ่งที่จะศึกษากันจะประกอบด้วย • การศึกษาลักษณะปัญหา • การออกแบบอัลกอริทึม • การวิเคราะห์อัลกอริทึม

  4. การออกแบบอัลกอริทึม

  5. ทุกๆโปรแกรม เบื้องหลังการทำงานก็คือ อัลกอริทึม ไม่มาเป็นโปรแกรมง่ายๆ จนไปถึงโปรแกรมยากๆ

  6. ปัญหาเชิงคำนวณ

  7. วงจรการออกแบบอัลกอริทึมวงจรการออกแบบอัลกอริทึม เริ่มต้น มีปัญหา หาทางแก้ไข ยอมรับได้ ? Y จบ

  8. เริ่มต้น มีปัญหา หาทางแก้ไข N ยอมรับได้ ? Y หมดหวัง N ปรับข้อกำหนดของปัญหา Y จบ

  9. ได้แต่ฝากความคิดของฉันเอาไว้เผื่อวันไหนเธอผ่านมาเห็นที่เดียวกันนี้ เธอจะนึกขึ้นได้ว่า เคยมีคนนึงยืนข้างเธอ อยู่ตรงนี้เสมอตลอดมา ได้, แต่, ฝาก, ความ, คิด, ของ, ฉัน, เอา, ไว้, เผื่อ, วัน, ไหน, เธอ, ผ่าน, มา, เห็น, ที่, เดียว, กัน, นี้, เธอ, จะ, นึก, ขึ้น, ได้, ว่า, เคย, มี, คน, นึง, ยืน, ข้าง, เธอ, อยู่, ตรง, นี้, เสมอ, ตลอดมา

  10. ข้อกำหนดของปัญหา • ลักษณะของข้อมูลขาเข้า (input) • ผลลัพธ์ที่ต้องการ

  11. ต.ย. : ปัญหาตัวหมู่มาก (majority problem) problem • Input : ข้อมูลจำนวน n ตัว • Output : คืนค่า TRUE เมื่อมีข้อมูลที่มีค่าซ้ำกันเกิน : นอกจากนั้น คืนค่า FALSE Problem instance Input instance

  12. Sorting

  13. Median and selection

  14. Minimum spanning tree

  15. Traveling salesman problem

  16. Bin packing

  17. Primarily testing NO

  18. factoring

  19. String matching

  20. Approximate string matching

  21. Satisfiablity

  22. Halting

  23. การออกแบบอัลกอริทึม

  24. อัลกอริทึม (Algorithm) • ลำดับการทำงานเชิงคำนวณซึ่งแปลงตัวอย่างข้อมูลขาเข้าของปัญหา ไปเป็นผลลัพธ์ที่ต้องการ • ขั้นตอนวิธีหารแก้ไขปัญหาด้วยคอมพิวเตอร์

  25. การบรรยายอัลกอริทึม

  26. บรรยายโดยการเขียนบรรยาย อัลกอริทึมการหารากที่ 3

  27. ตัวหมู่มาก : นับแต่และตัว แบบ brute force นับ 1 มี 2 ตัว นับ 4 มี 1 ตัว True นับ 3 มี 4 ตัว นับ 1 มี 2 ตัว นับ 4 มี 1 ตัว hasMajority(d[1..n]) { for (i = 1; i <= n; i++) { c = 0; for (j = 1; j <= n; j++) if (d[i]==d[j]) c++ if (c > n/2) return TRUE } return FALSE } นับ 7 มี 1 ตัว นับ 3 มี 2 ตัว นับ 1 มี 2 ตัว False นับ 2 มี 1 ตัว

  28. อัลกอริทึม • ต้องหาผลลัพธ์ที่ถูกต้อง ในเวลาอันจำกัด ให้กับข้อมูลขาเข้าทุกรูปแบบของปัญหา • เราต้องการอัลกอริทึม • ทำงานถูกต้อง • ทำงานได้รวดเร็วมีประสิทธิภาพ • ใช้หน่วยความจำน้อยๆ • ทำความเข้าใจง่าย

  29. กลวิธีการออกแบบอัลกอริทึมกลวิธีการออกแบบอัลกอริทึม Brute force Divide and Conquer Dynamic Programming Greedy Algorithm State-Space Search Randomized Algorithm Approximation Algorithm ………

  30. การวิเคราะห์อัลกอริทึมการวิเคราะห์อัลกอริทึม

  31. จับเวลาการทำงาน

  32. ตัวหมู่มาก : sort + นับ เรียงลำดับ TRUE นับ 1 มี 2 ตัว นับ 3 มี 4 ตัว hasMajority( d[1..n] ) { sort(d); c = 0; i = 1; for (j = 1; j <= n; j++) { if (d[i]==d[j]) { if (++c > n/2) return TRUE } else { i = j; c = 1 } } return FALSE }

  33. ตัวหมู่มาก : sort + นับตัวกลาง นับ 3 มี 4 ตัว นับ 3 มี 2 ตัว hasMajority( d[1..n] ) { sort(d); c = 0; i = ; for (j = 1; j <= n; j++) if (d[i]==d[j]) c++ if (c > n/2) return TRUE return FALSE }

  34. ตัวหมู่มาก: sort + นับตัวตรงกลาง hasMajority( d[1..n]){ sort(d); c = 0; i = for ( j = i; j >=1 AND d[i]==d[j]; j--) c++ for (j = i+1; j<=n AND d[i]==d[j]; j++) c++ if (c> n/2) return TRUE return FALSE }

  35. ตัวหมู่มาก: สุ่ม + นับ

  36. การวิเคราะห์เวลาการทำงานการวิเคราะห์เวลาการทำงาน • Experimental Analysis • แปลงอัลกอริทึมเป็นโปรแกรม • สั่งทำงานกับข้อมูลขาเข้าหลายๆ แบบ • จับเวลา วาดกราฟ หาความสัมพันธ์ของเวลากับปริมาณข้อมูล

  37. การวิเคราะห์เวลาการทำงานการวิเคราะห์เวลาการทำงาน • Mathematical Analysis • วิเคราะห์หาความสัมพันธ์ของจำนวนคำสั่งที่ทำงานกับปริมาณข้อมูลที่ได้รับ

  38. การปรับข้อกำหนด เริ่มต้น มีปัญหา หาทางแก้ไข N ยอมรับได้ ? Y หมดหวัง N ปรับข้อกำหนดของปัญหา Y จบ

More Related