1 / 53

Introduction to Data Structure and Algorithm

Introduction to Data Structure and Algorithm. บทที่ 2 ความรู้เบื้องต้นเกี่ยวกับโครงสร้างข้อมูล และขั้นตอนวิธี. วัตถุประสงค์เพื่อ. เข้าใจหลักนามธรรมที่มุ่งเน้นการแก้ไขปัญหาด้วยการตัดทอนสิ่งซับซ้อนปลีกย่อยที่ไม่จำเป็นออกไป

Download Presentation

Introduction to Data Structure and Algorithm

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. Introduction to Data Structure and Algorithm บทที่ 2 ความรู้เบื้องต้นเกี่ยวกับโครงสร้างข้อมูล และขั้นตอนวิธี

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

  3. หัวข้อที่บรรยาย • หลักนามธรรม • อัลกอริทึมกับความเป็นนามธรรมโดยธรรมชาติ • ซูโดโค้ด • การสร้างประโยคคำสั่ง • ความรู้เกี่ยวกับชนิดข้อมูลนามธรรม • การวัดผลอัลกอริทึม • ประสิทธิภาพของอัลกอริทึม • สัญลักษณ์บิ๊กโอ • ตัวอย่างการวิเคราะห์บิ๊กโอ

  4. 1. หลักนามธรรม (Abstraction) หลักนามธรรมจะทำให้ทุกสิ่งในโลกแห่งความเป็นจริงดูง่ายดายขึ้น ด้วยการพิจารณาบางสิ่งแยกออกจากความเป็นจริงของสิ่งเหล่านั้นโดยอธิบายว่าสิ่งสิ่งนั้นทำอะไร ไม่ต้องมุ่งเน้นในรายละเอียดว่าต้องทำงานอย่างไร ดังนั้นการคิดด้วยหลักนามธรรมนี้ จึงทำให้เราสามารถคิดวิธีการแก้ไขปัญหาด้วยการตัดทอนสิ่งที่ซับซ้อน หรือรายละเอียดปลีกย่อยที่ไม่จำเป็นออกไปได้ Grady Boochกล่าวว่า.. “Abstraction เป็นหนึ่งในแนวทางพื้นฐานของมนุษย์ที่ใช้สำหรับจัดการกับความซับซ้อน”

  5. 2. อัลกอริทึมกับความเป็นนามธรรมโดยธรรมชาติ • อัลกอริทึมสามารถทำให้เป็นรูปธรรมได้ด้วยการผ่าน “ตัวแทน (Representation)” • เรื่องราวในนวนิยาย ถือเป็นนามธรรม หรือแนวคิด • หนังสือ คือตัวแทนทางกายภาพของนวนิยาย • อัลกอริทึม ก็คือกระบวนการที่นำไปใช้สร้างโปรแกรมเพื่อทำงานและแก้ไขปัญหาตามที่เราต้องการ • ตัวแทนก็คือโปรแกรมที่ได้รับการพัฒนาขึ้นจากอัลกอริทึมนั้น หรือกล่าวอีกนัยหนึ่งก็คือ • โปรแกรม คือตัวแทนของอัลกอริทึม • โปรเซส คือกิจกรรมที่เอ็กซีคิวต์อัลกอริทึมนั้น

  6. 3. ซูโดโค้ด (Pseudo Code) • ซูโดโค้ดมีรูปแบบคล้ายประโยคภาษาอังกฤษ ที่ใช้อธิบายรายละเอียดการพัฒนาอัลกอริทึม • ซูโดโค้ดใช้สำหรับออกแบบการทำงานและตรรกะของโปรแกรมที่สร้างขึ้น ดังนั้นซูโดโค้ดจึงไม่สามารถนำไปเอ็กซีคิวต์บนคอมพิวเตอร์ได้โดยตรง และจะออกแบบเพื่อนำไปพัฒนาเป็นโปรแกรมจริงต่อไป • ซูโดโค้ดไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง แต่สามารถแปลงเป็นภาษาคอมพิวเตอร์ เช่น ภาษา PASCAL, C++ หรือ JAVA ได้ง่าย

  7. 3. ซูโดโค้ด (Pseudo Code) • การเขียนซูโดโค้ดจะเขียนมุ่งเน้นประโยคกิจกรรมที่ใช้ในการเอ็กซีคิวต์โปรแกรมเป็นสำคัญ โดยสามารถสร้างประโยคคำสั่งแบบเรียงลำดับ กำหนดทางเลือก และการทำงานเป็นรอบ

  8. ตัวอย่างซูโดโค้ด Algorithm sample (pageNumber) This algorithm reads a file and prints a report. Pre pageNumber passed by reference Post Report Printed pageNumber contains number of pages in report Return Number of lines printed 1 Loop (not end of file) 1 read file 2 if (full page) 1 increment page number 2 write page heading 3 end if 4 write report line 5 increment line count 2 end loop • return line count end sample

  9. ส่วนประกอบของอัลกอริทึมส่วนประกอบของอัลกอริทึม • ส่วนหัวของอัลกอริทึม • จุดประสงค์ เงื่อนไข และการรีเทิร์นค่า • เลขลำดับประโยคคำสั่ง • ตัวแปร

  10. ส่วนหัวของอัลกอริทึม • เรียกทับศัพท์ว่า เฮดเดอร์ (Header) • กำหนดชื่ออัลกอริทึม • อธิบายรายละเอียดของพารามิเตอร์ (Parameters) • เงื่อนไขก่อน (Preconditions) และเงื่อนไขหลัง (Postconditions)

  11. จุดประสงค์ เงื่อนไข และการรีเทิร์นค่า • อธิบายเรื่องทั่วไปของการประมวลในอัลกอริทึมนั้น แต่ไม่ได้อธิบายรายละเอียดทั้งหมดของกระบวนการว่าทำงานอย่างไร • ในกรณีที่ไม่มีเงื่อนไขก่อน สามารถเขียนให้อยู่ในรูปแบบ ดังนี้ • ตัวอย่างการกำหนดรายละเอียดในเฮดเดอร์ Pre nothing Algorithm search (list, argument, location) Search array for specific item and return index location. Pre list contains data array to be searched argument contains data to be located in list Post location contains matching index -or- undetermined if not found Return true if found, false if not found

  12. เลขลำดับประโยคคำสั่ง • ประโยคคำสั่งจะมีเลขลำดับกำกับไว้ ซึ่งจะใช้เลขทศนิยม ด้วยการลำดับหมายเลขเพิ่มขึ้นทีละหนึ่งภายในโครงสร้างของบล็อกนั้นๆ • ตัวอย่าง เช่น จากอัลกอริทึม Sample • เลขลำดับ 1.1 คือประโยคคำสั่ง read file • เลขลำดับ 1.2.2 คือประโยคคำสั่ง write page heading

  13. ตัวแปร (Variables) • ไม่ควรตั้งชื่อตัวแปรด้วยอักขระเพียงตัวเดียว เช่น A, B, C ยกเว้นตัวแปรในการกำหนดลูป ส่วนใหญ่ใช้ตัวแปร iและ j แต่หากหลีกเลี่ยงได้ก็จะดี เช่น • ต้องการค้นหาข้อมูลในอาร์เรย์สองมิติ โดยแต่ละแถวใช้แทนนักศึกษา และแต่ละคอลัมน์ใช้แทนคะแนนทดสอบ ดังนั้นตัวแปรที่ใช้แทนตัวชี้ตำแหน่งแถวและคอลัมน์ควรใช้ student และ score จะสื่อความหมายได้ดีกว่า • ไม่ควรใช้คำทั่วไปที่มีความหมายเฉพาะ (Generic Names) เช่น count, sum, total, row, column, file เป็นต้น ถ้าต้องการตัวแปรที่เก็บจำนวนนักศึกษา อาจกำหนดตัวแปรว่า studentCountหรือ numberOfStudentดีกว่าชื่อ count

  14. ตัวแปร (Variables) • หากจำเป็นต้องใช้คำย่อก็ควรตั้งชื่อให้สื่อความหมายได้ดี เช่น stdCntใช้แทน studentCountหรือ numOfStdใช้แทน numberOfStudentไม่ควรใช้ noStdเพราะอาจตีความหมายว่า noStudentที่หมายถึงไม่มีนักศึกษา

  15. 4. การสร้างประโยคคำสั่ง • แบบเรียงลำดับ (Sequence) • แบบเลือกการทำงาน (Selection) • แบบทำงานซ้ำ (Repetition/Loop)

  16. ตัวอย่างผังงาน

  17. ตัวอย่างผังงาน

  18. ตัวอย่างอัลกอริทึม Algorithm deviation Pre nothing Post average and numbers with their deviation printed 1 loop (not end of file) 1 read number into array 2 add number to total 3 increment count 2 end loop 3 set average to total/count 4 print average 5 loop (not end of array) 1 set devFromAve to array element-average 2 print array element and devFromAve 6 end loop end deviation

  19. 5. ความรู้เกี่ยวกับชนิดข้อมูลนามธรรม • ข้อมูลเชิงเดี่ยวและข้อมูลเชิงประกอบ • ชนิดข้อมูล • โครงสร้างข้อมูล • ชนิดข้อมูลนามธรรม

  20. ข้อมูลเชิงเดี่ยวและข้อมูลเชิงประกอบข้อมูลเชิงเดี่ยวและข้อมูลเชิงประกอบ • ข้อมูลเชิงเดี่ยว (Atomic Data) คือข้อมูลที่ประกอบด้วยค่าเดียวที่ไม่สามารถแบ่งส่วนข้อมูลนี้ออกไปเพื่อสื่อความหมายได้อีก เช่น เลขจำนวนเต็ม 4562 เป็นต้น • ข้อมูลเชิงประกอบ (Composite Data) โดยข้อมูลเชิงประกอบนั้นสามารถที่จะทำการแตกออกเป็นฟิลด์ย่อย (Subfields) และสิ่งที่แตกออกไปก็ยังมีความหมายด้วย เช่น หมายเลขโทรศัพท์ที่เป็นตัวเลขล้วนๆ คือ ตัวเลข 3 ตัวแรกเป็นรหัสจังหวัด ส่วนที่เหลือคือเบอร์หมายเลข เป็นต้น

  21. ชนิดข้อมูล (Data Type)

  22. โครงสร้างข้อมูล (Data Structure) • โครงสร้างข้อมูล คือการรวมกันของข้อมูลเชิงเดี่ยวและข้อมูลเชิงประกอบเข้าด้วยกันเป็นกลุ่มพร้อมกับการกำหนดความสัมพันธ์ ซึ่งรวมไปถึงวิธีการเพิ่มข้อมูลใหม่ การนำข้อมูลที่เก็บไว้ออก การเดินสำรวจข้อมูลที่เก็บไว้ และการค้นหาข้อมูล • ประเภทของโครงสร้างข้อมูลแยกตามการจัดเก็บข้อมูล • แบบเชิงเส้น (Linear) • แบบไม่เป็นเชิงเส้น (Non Linear)

  23. โครงสร้างข้อมูลแบบเชิงเส้นโครงสร้างข้อมูลแบบเชิงเส้น การจัดเก็บข้อมูลเรียงต่อกันไปทีละตัวในแนวเดียวกัน ให้ข้อมูลทั้งหมดเรียงอยู่ในแนวเส้นตรงเดียวกัน จากข้อมูลตัวแรกไปถึงข้อมูลตัวสุดท้าย หรือก็คือ ข้อมูลแต่ละตัวจะมีข้อมูลที่อยู่ถัดไปเพียง 1 ตัวเท่านั้น • อาร์เรย์ (Array) • สแตค (Stack) • คิว (Queue) • ลิงก์ลิสต์ (Linked List)

  24. โครงสร้างข้อมูลแบบไม่เชิงเส้นโครงสร้างข้อมูลแบบไม่เชิงเส้น • โครงสร้างข้อมูลแบบนี้จะไม่มีข้อจำกัดในเรื่องการนำข้อมูลเข้า-ออกจากโครงสร้างข้อมูล เนื่องจากข้อมูลไม่ได้เรียงต่อกันเป็นแนวเดียวกัน ทำให้สามารถนำข้อมูลเข้าและออกจากตำแหน่งใดๆก็ได้ • โครงสร้างข้อมูลที่ไม่มีลำดับของข้อมูลได้แก่ เซต ตารางแฮช • โครงสร้างข้อมูลที่มีลำดับของข้อมูล ได้แก่ ทรี กราฟ

  25. ชนิดข้อมูลนามธรรม(ADT : Abstract Data Type) ADT ไม่ใช่โครงสร้างข้อมูล แต่เป็นระดับแนวคิด ซึ่งเปรียบเสมือนกับภาษากลางที่ใช้นิยามโครงสร้างข้อมูลโดยไม่ขึ้นกับสถาปัตยกรรมใดๆ การนิยามดังกล่าวมีวัตถุประสงค์เพื่อถ่ายทอดและนำเสนอโครงสร้างข้อมูลให้ผู้อื่นเกิดความเข้าใจตรงกัน ประกอบด้วย 2 ส่วนที่สำคัญ คือ • ส่วนที่นิยามโครงสร้างข้อมูล • ส่วนนิยามฟังก์ชั่นที่ใช้จัดการกับโครงสร้างข้อมูล

  26. ความสัมพันธ์ของชนิดข้อมูล Logical & Physical

  27. การสร้าง ADT • Declaration of data • Declaration of operations • Encapsulation of data and operations

  28. พอยน์เตอร์ที่ซ่อนการทำงานอยู่ภายในโครงสร้างพอยน์เตอร์ที่ซ่อนการทำงานอยู่ภายในโครงสร้าง

  29. ตัวอย่างโครงสร้างข้อมูล QueueADT • ดูในเอกสารประกอบ (ไฟล์ประกอบ)

  30. 6. การวัดผลอัลกอริทึม T(n) = จำนวนเวลาที่ใช้ในการทำงานเพื่อจัดเรียงชุดข้อมูล n ตัว T(n) = O(n)

  31. กราฟเปรียบเทียบเวลาในการทำงานกราฟเปรียบเทียบเวลาในการทำงาน Time (T) ms Input (n)

  32. คุณสมบัติของอัลกอริทึมที่ดีคุณสมบัติของอัลกอริทึมที่ดี • อัลกอริทึมที่ดีต้องมีความถูกต้อง (Correctness) • อัลกอริทึมที่ดีต้องง่ายต่อการอ่าน (Readability) • อัลกอริทึมที่ดีต้องสามารถปรับปรุงได้ง่ายในอนาคต (Ease of Modification) • อัลกอริทึมที่ดีสามารถนำกลับมาใช้ใหม่ได้ (Reusability) • อัลกอริทึมที่ดีต้องมีประสิทธิภาพ (Efficiency)

  33. ปัจจัยที่ทำให้อัลกอริทึมมีประสิทธิภาพปัจจัยที่ทำให้อัลกอริทึมมีประสิทธิภาพ • เวลาที่ใช้ในการทำงาน (Running Time) • หน่วยความจำที่ใช้งาน (Memory Requirement) • เวลาที่ใช้ในการคอมไพล์โปรแกรม (Compile Time) • เวลาที่ใช้ในการติดต่อสื่อสาร (Communication Time)

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

  35. 7. ประสิทธิภาพของอัลกอริทึม • ประสิทธิภาพของอัลกอริทึมแทนด้วยฟังก์ชั่น • ลูปแบบเชิงเส้น • ลูปแบบลอการิธมิค • ลูปแบบซ้อน • ลูปแบบซ้อนชนิดลอการิธมิคเชิงเส้น • ลูปแบบซ้อนชนิดกำลังสอง • ลูปแบบซ้อนกำลังสองชนิดขึ้นต่อกัน f(n) = efficiency

  36. ลูปแบบเชิงเส้น (Linear Loops) • เพิ่มค่าด้วยการบวกหรือลดค่าด้วยการลบภายในลูปแบบคงที่ จนกระทั่งครบจำนวนรอบ • f(n) = n • f(n) = n/2 for (i = 0; i < 1000; i++) application code for (i = 0; i < 1000; i += 2) application code

  37. ลูปแบบลอการิธมิค (Logarithmic Loops) • เพิ่มค่าหรือลดค่าภายในลูปสองเท่าตัวด้วยการคูณ (เพิ่มค่าสองเท่า) หรือการหาร (ลดค่าสองเท่า) • multiply 2Iterations <= 1000 • divide 1000/2Iterations >= 1 • f(n) = [logn] หรือ [log2n] Divide Loops for (i = 1000; i >= 1; i /= 2) application code Multiply Loops for (i = 1; i <= 1000; i *= 2) application code

  38. ลูปแบบซ้อน (Nested Loops) • ภายในลูปจะมีลูปซ้อนอีกลูปหนึ่ง • สามารถแบ่งออกเป็น 3 รูปแบบย่อย • Linear Logarithmic • Quadratic • Dependent Quadratic Iterations = outer loop iterations x inner loop iterations

  39. ลูปแบบซ้อนชนิดลอการิธมิคเชิงเส้น (Linear Logarithmic) • ลูปชั้นในเพิ่มค่าเป็นสองเท่าด้วยการคูณ ในขณะที่ลูปชั้นนอกจะเป็นแบบเชิงเส้นที่มีการเพิ่มค่าทีละหนึ่งในลักษณะคงที่ • 10log10 • f(n) = nlogn for (i = 0; i < 10; i++) for (j = 1; j <= 10; j *= 2) application code

  40. ลูปแบบซ้อนชนิดกำลังสอง (Quadratic) • แต่ละลูปจะทำการเอ็กซีคิ้วต์ในจำนวนรอบที่เท่ากัน • f(n) = n2 for (i = 0; i < 10; i++) for (j = 1; j < 10; j++) application code

  41. ลูปแบบซ้อนกำลังสองชนิดขึ้นต่อกัน (Dependent Quadratic) • จำนวนรอบการทำงานของลูปชั้นในจะขึ้นอยู่กับลูปชั้นนอก • 1 + 2 + 3 + … + 9 + 10 = 55 for (i = 0; i < 10; i++) for (j = 0; j <i; j++) application code

  42. 8. สัญลักษณ์บิ๊กโอ (Big-O Notation) • อัตราการเติบโตของฟังก์ชั่น (Growth Rates) พิจารณาปัจจัยของขนาด • Big-O มาจาก Order of Magnitude • อัตราการเติบโตของฟังก์ชั่นจะนำไปใช้พิจารณาความซับ (Complexity) ของอัลกอริทึม โดยหากจำนวนข้อมูล (n) มีปริมาณมากแล้ว จะส่งผลต่อการเปลี่ยนแปลงด้านเวลาของอัลกอริทึมนั้นอย่างไร

  43. ตารางแสดงความแตกต่างของอัตราการเติบโตในแต่ละฟังก์ชั่นตารางแสดงความแตกต่างของอัตราการเติบโตในแต่ละฟังก์ชั่น

  44. ซูโดโค้ดการคำนวณคะแนนเฉลี่ยซูโดโค้ดการคำนวณคะแนนเฉลี่ย 1set sum to zero 2 set i to zero 3 dowhilei < n 1 add 1 to i 2 add score(i) to sum 4 enddo 5 compute mean = sum / n

  45. แนวทางในการหาบิ๊กโอ • พิจารณาเพียงเทอมที่มีค่าเลขยกกำลังมากที่สุด (Highest Exponent) เท่านั้น • ตัดเทอมส่วนที่เป็นค่าคงที่และตัวคูณออกไป • บิ๊กโอไม่ได้มีจุดประสงค์เพื่อวัดเวลาการทำงาน • บิ๊กโอจะใช้อธิบายขอบเขตของฟังก์ชั่นการเติบโตทางเวลา

  46. เกณฑ์วัดผลประสิทธิภาพของบิ๊กโอกับฟังก์ชั่นต่างๆเกณฑ์วัดผลประสิทธิภาพของบิ๊กโอกับฟังก์ชั่นต่างๆ

  47. แนวทางในการวัดผลประสิทธิภาพแนวทางในการวัดผลประสิทธิภาพ • ขนาดของอินพุต • ให้ละเลยค่าคงที่ที่อยู่ในสภาพแวดล้อมนั้น • สนใจเฉพาะกรณีเลวร้ายสุดเท่านั้น (Worst-case) • มองข้ามขนาดของอินพุตที่มีจำนวนน้อยๆ

  48. 9. ตัวอย่างการวิเคราะห์บิ๊กโอ • การบวกแมทริกซ์ • Quadratic Loop • O(n2) • การคูณแมทริกซ์ • Cubic Loop • O(n3)

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

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

More Related