1 / 33

รายวิชา ง40 206 โครงสร้างข้อมูลและขั้นตอนวิธี

รายวิชา ง40 206 โครงสร้างข้อมูลและขั้นตอนวิธี. โรงเรียนมหิดลวิทยานุสรณ์. ความรู้เบื้องต้นของโครงสร้างข้อมูลและขั้นตอนวิธี. ความหมาย “โครงสร้างข้อมูล”. การรวมประเภทข้อมูล (Data Type) เข้าไว้ด้วยกัน จนกลายเป็นกลุ่มประเภทข้อมูล และมีนิยามความสัมพันธ์ภายในกลุ่มข้อมูลอย่างชัดเจน

chessa
Download Presentation

รายวิชา ง40 206 โครงสร้างข้อมูลและขั้นตอนวิธี

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. รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี โรงเรียนมหิดลวิทยานุสรณ์

  2. ความรู้เบื้องต้นของโครงสร้างข้อมูลและขั้นตอนวิธีความรู้เบื้องต้นของโครงสร้างข้อมูลและขั้นตอนวิธี

  3. ความหมาย “โครงสร้างข้อมูล” • การรวมประเภทข้อมูล (Data Type) เข้าไว้ด้วยกัน จนกลายเป็นกลุ่มประเภทข้อมูล และมีนิยามความสัมพันธ์ภายในกลุ่มข้อมูลอย่างชัดเจน • การรวมกลุ่มนี้อาจเป็นการรวมกลุ่มกันระหว่างข้อมูลประเภทเดียวกัน ต่างประเภทกัน หรือต่างโครงสร้างข้อมูลกันก็ได้

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

  5. ประเภทของโครงสร้างข้อมูลประเภทของโครงสร้างข้อมูล • ด้านกายภาพ • Primitive Data Type เช่น char, int, float • Structure Data Type เช่น array, struct • ด้านตรรกกะ - Linear Data Structure - Non-linear Data Structure 5 A C K S 3 8 -1 3 4 5 8 12 -1 4 12

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

  7. เทคนิคที่ช่วยในการออกแบบเทคนิคที่ช่วยในการออกแบบ • ผังงาน (Flowchart) • ผังงานระบบ (System Flowchart) • ผังงานโปรแกรม (Program Flowchart) • รหัสเทียม (Pseudocode) • ใช้อธิบายการทำงานของอัลกอริธึม ทำให้ไม่ต้องเขียนอธิบายด้วย code • ไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง • อาจเป็นภาษาไทยหรือภาษาอื่นก็ได้ แต่การใช้ภาษาอังกฤษจะสะดวกที่สุด

  8. Pseudocode • เป็นคำสั่งที่มีลักษณะการเขียนใกล้เคียงกับภาษาอังกฤษ แต่มีโครงสร้างเกือบจะเป็นภาษาโปรแกรม เช่น • เริ่มต้นอาจให้มีคำว่า BEGIN จบลงให้ใช้ END • อ่าน เขียนข้อมูลอาจใช้ READ และ PRINT • การทดสอบเงื่อนไขอาจใช้ IF , ELSE , ELSEIF • การทำซ้ำอาจใช้ WHILE , DO ENDWHILE เป็นต้น

  9. ตัวอย่าง Pseudocode BEGIN READ A, B SUM = A+B IF SUM > 10 THEN PRINT SUM ELSE PRINT A-B END

  10. ตัวอย่าง Pseudocode Algorithm arrayMax(A,n) Input: An array A storing n integers. Output: The maximum element in A. currentMax < A[0] for I <- 1 to n-1 do if currentMax < A[i] then currentMax <- A[i] return currentMax

  11. ตัวอย่าง Pseudocode

  12. การวิเคราะห์ประสิทธิภาพของอัลกอริธึมการวิเคราะห์ประสิทธิภาพของอัลกอริธึม • Space/Memory : ใช้เนื้อที่ความจำมากน้อยแค่ไหน • Time เวลาที่ใช้ในการประมวลผล

  13. การวิเคราะห์ Space Complexity การวิเคราะห์ว่าจะต้องใช้หน่วยความจำทั้งหมดเท่าไรในการประมวลผลอัลกอริธึมนั้น • รองรับจำนวนข้อมูลที่ส่งเข้ามาประมวลผล (Input Data)ได้มากที่สุดเท่าใด เพื่อให้อัลกอริธึมนั้นสามารถประมวลผลได้อยู่ • ทราบขนาดของหน่วยความจำที่จะต้องใช้ในการประมวลผลอัลกอริธึม เพื่อไม่ให้กระทบกับการทำงานของคนอื่น • เพื่อเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตั้งโปรแกรมที่พัฒนาขึ้นได้อย่างเหมาะสม

  14. องค์ประกอบของ Space Complexity • Instruction Space • จำนวนของหน่วยความจำที่คอมไพเลอร์จำเป็นต้องใช้ขณะทำการคอมไพล์โปรแกรม • Data Space • จำนวนหน่วยความจำที่ต้องใช้สำหรับเก็บค่าคงที่ และตัวแปรทั้งหมดที่ต้องใช้ในการประมวลผลโปรแกรม • Environment Stack Space • จำนวนหน่วยความจำที่ต้องใช้ในการเก็บผลลัพธ์ของข้อมูลเอาไว้ เพื่อรอเวลาที่จะนำผลลัพธ์นั้นกลับไปประมวลผลอีกครั้ง (พบใน recursive function)

  15. Data Space • Static memory allocation จำนวนของหน่วยความจำที่ต้องใช้อย่างแน่นอน ไม่มีการเปลี่ยนแปลง ประกอบด้วยหน่วยความจำที่ใช้เก็บค่าคงที่และตัวแปรประเภท array • เช่น การประกาศตัวแปร int a, b; char s[10], c; • Dynamic memory allocation จำนวนของหน่วยความจำที่ใช้ในการประมวลผลสามารถเปลี่ยนแปลงได้ และจะทราบจำนวนหน่วยความจำที่จะใช้ก็ต่อเมื่อโปรแกรมกำลังทำงานอยู่ • เช่น การใช้ pointer และมีการจองเนื้อที่ในหน่วยความจำด้วยคำสั่ง malloc(); int *p; p = malloc(sizeof(int)*2);

  16. ตัวอย่างการวิเคราะห์ Space Complexity { int num1, num2, temp; temp = num1; num1 = num2; num2 = temp; } ใช้หน่วยความจำ 6 bytes

  17. ตัวอย่างการวิเคราะห์ Space Complexity int factorial(int n) { if (n==0) return 1; else return (n * factorial(n-1)); } ใช้หน่วยความจำ 4  Max{1, n} ค่า 4 คำนวณมาจาก หน่วยความจำสำหรับเก็บ address 2 bytes และตัวแปรชนิด integer อีก 2 bytes

  18. 3x2=6 factorial(3) 3 x factorial(2) 2x1=2 factorial(2) 2 x factorial(1) 1x1=1 1 factorial(1) 1 x factorial(0) factorial(0) = 1 หาค่า 4! โดยใช้ recursive 4x6=24 factorial(4) 4 x factorial(3)

  19. การวิเคราะห์ Time Complexity คือ เวลาที่เครื่องคอมพิวเตอร์ต้องใช้ในการประมวลผลอัลกอริธึม วิเคราะห์เพื่อ... • ประมาณเวลาทั้งหมดที่ต้องใช้ในโปรแกรมได้ • มุ่งประเด็นการแก้ไขไปที่อัลกอริธึมที่ใช้เวลาในการประมวลผลนานๆ ทำให้ไม่ต้องแก้ไขทั้งโปรแกรม • โปรแกรมคอมพิวเตอร์ที่ทำงานแบบ Interactive • เลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตั้งโปรแกรมที่พัฒนาขึ้นได้อย่างเหมาะสม ??

  20. เวลาในการประมวลผลของโปรแกรมเวลาในการประมวลผลของโปรแกรม • Compile Timeคือ เวลาที่ใช้ในการตรวจสอบไวยากรณ์ (syntax) ของ code ว่าเขียนได้ถูกต้องหรือไม่ • Run Time หรือ Execution Timeคือ เวลาที่เครื่องคอมพิวเตอร์ใช้ในการประมวลผล

  21. การวิเคราะห์ Time Complexity ด้วยวิธีการนับตัวดำเนินการ • แบบ Linear Loops • แบบ Logarithmic Loops • แบบ Nested Loops

  22. แบบ Linear Loops อัลกอริธึมมีการทำงานแบบวนรอบ (Loop) โดยแต่ละ loop จะมีการเพิ่มหรือลดค่าในปริมาณที่คงที่ เช่น x = 1 Loop (x <= 2000) x = x+5 x = 1 Loop (x <= 2000) x = x+1 ถ้าให้ f(n)แทนประสิทธิภาพ และnแทนจำนวนรอบการทำงาน สามารถเขียนเป็นสมการวัดประสิทธิภาพของอัลกอริธึมแบบ Linear loop ได้ดังนี้ f(n) = n

  23. แบบ Logarithmic Loops อัลกอริธึมจะทำงานแบบ Loop โดยการทำงานภายในแต่ละ loop จะเพิ่มหรือลดค่าเป็นเท่าตัว x = 1 Loop (x < 1000) x = x*2 x = 1000 Loop (x >= 1) x = x/2 ถ้าให้ f(n)แทนประสิทธิภาพ และnแทนจำนวนรอบการทำงาน สามารถเขียนเป็นสมการวัดประสิทธิภาพได้ดังนี้ f(n) = [logn]

  24. แบบ Nested Loops คือ อัลกอริธึมที่มี loop ซ้อนอยู่ภายใน loop โดยประสิทธิภาพของอัลกอริธึมก็จะมีค่าเท่ากับจำนวน loop ทั้งหมดที่จะต้องประมวลผล ซึ่งหาได้จากการเอาจำนวน loop ที่ซ้อนกันมาคูณกัน f(n) = n2 f(n) = n3

  25. Big-O Notation • การวิเคราะห์อัลกอริธึม จะใช้วิธีหาจำนวนครั้งของการทำงานของโปรแกรม โดยมักจะสนใจค่าโดยประมาณเท่านั้น ซึ่งจะใช้สัญลักษณ์ว่า O เรียกว่า บิ๊กโอ (big O) ซึ่งเป็นสัญลักษณ์ทางคณิตศาสตร์ที่มาจากคำว่า Order of Magnitude • O(N), O(logN), O(N2), O(1)

  26. Big-O Notation • แนวความคิดของบิ๊กโอ จะดูจากค่าที่มีผลกระทบมากที่สุดเพียงค่าเดียว • ค่าอื่นๆที่เกี่ยวข้องจะมีผลต่อฟังก์ชันน้อยกว่า จึงไม่สนใจ และไม่สนใจค่าคงที่ด้วย ตัวอย่าง หาค่าบิ๊กโอของ N4 + 10N – 5 ถ้า f(N) = N4 + 10N – 5 O(f(N)) = O(N4)

  27. ตัวอย่าง หาค่าบิ๊กโอของ 100N +1 ถ้า f(N) = 100N +1 O(f(N)) = O(N) ตัวอย่าง หาค่าบิ๊กโอของ N/5 +100 ถ้า f(N) = N/5 +100 O(f(N)) = O(N)

  28. ตัวอย่าง หาค่าบิ๊กโอของ N3 + 2N3 + 10 ถ้า f(N) = N3 + 2N3 + 10 O(f(N)) = O(N3) ตัวอย่าง หาค่าบิ๊กโอของ 100 ถ้า f(N) = 100 O(f(N)) = O(1)

  29. การวิเคราะห์ความเร็วของ Algorithm เร็ว ช้า

  30. 2n n2 n3 n log n n log n

  31. Running time calculations A simple Example int sum(int n) { int i, partialSum; partialSum = 0; //1 for(i=1;i<N;i++) //2 partialSum += i*i*i; //3 return partialSum; } -> Count for 1 unit per time executed -> Count for 2N+1 units -> 4N units The total is 6N+2 This function is O(N)

  32. Running time calculations A simple Example int factorial(int n) { int fac if((n==0)||(n=1)) fac = 1; else fac = n*factorial(n-1); } -> Running time = 1 -> เรียกตัวเอง N ครั้ง This function is O(N)

More Related