ตัวอย่าง - มหาวิทยาลัยบูรพา วิทยาเขตจันทบุรี

Download Report

Transcript ตัวอย่าง - มหาวิทยาลัยบูรพา วิทยาเขตจันทบุรี

290210
โครงสร้ างข้ อมูลและขั้นตอนวิธี
Data Structures and Algorithms
อ.ธารารัตน์ พวงสุ วรรณ
คณะวิทยาศาสตร์และศิลปศาสตร์
มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี


ดาวน์โหลดเอกสารการเรี ยนได้ที่
http://www.chanthaburi.buu.ac.th/~thararat
E-mail : [email protected]
คาอธิบายรายวิชา

หลักการในการวิเคราะห์ข้นั ตอนวิธีเบื้องต้น ความซับซ้อนของขั้นตอน
วิธีแบบต่าง ๆ การประยุกต์ข้นั ตอนวิธีสาหรับการคานวณ ขั้นตอน
วิธีการในการค้นข้อมูลและความซับซ้อน; เรี ยงลาดับ และทวิภาค,
ขั้นตอนวิธีในการเรี ยงข้อมูลอย่างง่าย (ความซับซ้อนในระดับกาลัง
สองของข้อมูล) และขั้นตอนที่มีประสิ ทธิภาพ (ความซับซ้อนในระดับ
ลอการิ ทึมของจานวนข้อมูล), ตารางแฮชและวิธีการป้ องกันการชนกัน
ของข้อมูล ต้นไม้คน้ หาแบบทวิภาค การประยุกต์โครงสร้างข้อมูลแบบ
กราฟ; การแทนข้อมูล การแวะผ่าน การหาระยะทางที่ส้ นั ที่สุด การหา
ต้นไม้ทอดข้าม และการเรี ยงตาแหน่งข้อมูลในกราฟ
วัตถุประสงค์ รายวิชา




เพื่อให้ผเู ้ รี ยนเข้าใจโครงสร้างข้อมูลรู ปแบบต่าง ๆ และนาไปใช้
ได้อย่างเหมาะสม
เพื่อให้ผเู ้ รี ยนเข้าใจวิธีการประมวลผลโครงสร้างข้อมูลรู ปแบบ
ต่าง ๆ
เพื่อให้ผเู ้ รี ยนสามารถวิเคราะห์และออกแบบอัลกอริ ทึมโดยใช้
โครงสร้างข้อมูลชนิดต่าง ๆ ได้
เพื่อให้ผเู ้ รี ยนสามารถใช้โปรแกรมภาษาในการเขียนโปรแกรม
ประยุกต์โครงสร้างข้อมูลได้
สถานภาพรายวิชาและเงื่อนไขรายวิชา


วิชาเอกบังคับ
บุรพวิชา วิชา 290202 หลักการโปรแกรม 2
เนือ้ หาวิชา







ความรู ้เบื้องต้นเกี่ยวกับโครงสร้างข้อมูลและอัลกอริ ทึม
การประยุกต์ข้ นั ตอนวิธีสาหรับการคานวณ
ขั้นตอนวิธีการในการค้นข้อมูล
 sequential and binary search algorithm
ตารางแฮชและวิธีการป้ องกันการชนกันของข้อมูล
โครงสร้างต้นไม้และต้นไม้คน้ หาแบบทวิภาค
การประยุกต์โครงสร้างข้อมูลแบบกราฟ
 traversals
 shortest-path algorithms
 minimal spanning tree
ขั้นตอนวิธีในการเรี ยงข้อมูล
กิจกรรมการเรียนการสอน





บรรยายเนื้อหาบทเรี ยนในชั้นเรี ยน
อภิปรายและถามตอบในชั้นเรี ยน
ฝึ กเขียนอัลกอริ ทึมและเขียนโปรแกรมเพื่อทดสอบอัลกอริ ทึม
ทาแบบฝึ กหัด
การทดสอบย่อยระหว่างเรี ยน
การวัดผลและประเมินผล




สอบกลางภาค
สอบปลายภาค
ทดสอบย่อย
แบบฝึ กหัดและการเข้าชั้นเรี ยน
30%
35%
15%
20%
ตาราหลัก เอกสารประกอบการสอน
และหนังสื ออ่ านประกอบ



Richard, F. Gilberg and Behrouz A. Forouzan (2005). Data
structures : a pseudocode approach with C. 2rd ed. Boston :
Thomson Course Technology.
Oberon (2004). algorithms and Data structures.
หนังสื อภาษาไทยที่มีชื่อเรื่ อง โครงสร้างข้อมูล
ความรู้เบือ้ งต้ นเกีย่ วกับ
โครงสร้ างข้ อมูลและอัลกอริทมึ
เนือ้ หา





ความหมายของโครงสร้างข้อมูล
ประเภทของโครงสร้างข้อมูล
พื้นฐานการเขียนอัลกอริ ทึมด้วย Pseudocode
ตัวอย่างการเขียนอัลกอริ ทึมด้วย Pseudocode
การประเมินประสิ ทธิภาพของอัลกอริ ทึม
ความหมายของข้ อมูล


ข้อมูล (Data)
ข้อเท็จจริ งที่เกี่ยวข้องกับบุคคล สถานที่ สิ่ งของ หรื อเหตุการณ์ ที่สนใจ
ประเภทของข้อมูล


แบ่งตามลักษณะของข้อมูล
แบ่งตามลักษณะการใช้งาน
ประเภทของข้ อมูล

แบ่งตามลักษณะของข้อมูล
 Numeric
 Alphabetic
 Alphanumeric
ประเภทของข้ อมูล

แบ่งตามลักษณะการใช้งาน
 ข้ อมูลทีใ่ ช้ ในการคานวณ


Numeric หรือข้ อมูลทีเ่ ป็ นตัวเลขล้ วน ๆ
ข้ อมูลทีไ่ ม่ นาไปใช้ ในการคานวณ

Character หรือ String เช่ น อันดับที่ เลขประจาตัว บ้ านเลขที่
หมายเลขโทรศัพท์ รหัสไปรษณีย์ เป็ นต้ น
ส่ วนประกอบของประเภทข้ อมูล


A set of values
A set of operations on values
Type
Values
Operations
Integer
-∞,...,-2,-1,0,1,2,..., ∞
+, -, *, /, ++, --, ...
Floating point
-∞,..., 0.0, ... , ∞
+, -, *, /,...
character
\0, ..., ‘A’, ‘B’, ..., ‘a’,’b’,... <, >, ...
Abstract data type (ADT)

หมายถึงประเภทข้ อมูลซึ่งแสดงถึงระบบการจัดการข้ อมูล โดย
แสดงถึงบริการและกฎเกณฑ์ ในการจัดการข้ อมูลนั้น ๆ แต่ ไม่ ได้
กล่าวถึงวิธีการสร้ างบริการต่ าง ๆ (คือการนามาใช้ ไม่ ใช่ การศึกษาวิธี
สร้ าง)
Abstract data type (ADT)

หลักการของ abstraction



We know what a data type can do
How it is done is hidden
ADT จะประกอบไปด้วยการประกาศข้อมูล (Data Declaration) ที่รวมกับ
Operations เข้าด้วยกัน ทาให้เกิดเป็ นรู ปร่ างของโครงสร้าง โดยตั้งอยูบ่ น
พื้นฐานการซ่อนรายละเอียดและข้อมูล
Abstract data type (ADT)

ลักษณะของ ADT แบ่งตามความสัมพันธ์ในข้อมูล
 ข้อมูลเชิ งเดี่ยว (Atomic data)
 ข้อมูลประกอบ (Composite data)
Atomic data

คือข้อมูลที่ประกอบด้วยค่าเดียวที่ไม่สามารถแบ่งส่ วนข้อมูลนี้
ออกไปเพื่อสื่ อความหมายได้อีก เช่น เลข จานวนเต็ม อายุ เพศ
เป็ นต้น
Composite data

คือข้อมูลที่สามารถแตกออกเป็ นฟิ ลด์ยอ่ ยๆได้ และสิ่ งที่แตก
ออกไปสามารถสื่ อความหมายได้ เช่น เบอร์โทรศัพท์ หมายเลข
ครุ ภณ
ั ฑ์ รหัสนักศึกษา เป็ นต้น
ประเภทของ ADT

แบ่งตามรู ปแบบโครงสร้าง
 ประเภทข้อมูลนามธรรมที่ไม่มีลาดับของข้อมูลซ้ายขวา เช่น
เซ็ต
 ประเภทข้อมูลนามธรรมเชิ งเส้น (linear ADT, linear data
structure) หมายถึง ประเภทข้อมูลอย่างย่อที่มีลาดับหนึ่งอัน เช่น
ก่อน-หลัง ซ้าย-ขวา เช่น รายการโยง กองซ้อน คิว
 ประเภทข้อมูลอย่างย่อที่มีลาดับสองอัน เช่น ต้นไม้ มีลาดับสอง
แบบคือ พี่-น้อง และ พ่อ-ลูก
ประเภทของ ADT

แบ่งตามการซ้ ากันและลาดับของข้อมูล
 ไม่อนุ ญาตให้ซ้ ากันได้ เรี ยกว่า เซ็ต ได้แก่ ตารางแฮช ต้นไม้บางชนิ ด
 ไม่มีลาดับของข้อมูล เรี ยกว่า Collection
 ใช้ลาดับตามการเข้าออกข้อมูล
 เข้าก่อนออกก่อน (First In First Out: FIFO) เรี ยกว่า คิว หรื อ
แถวคอย
 เข้าก่อนออกทีหลัง (First In Last Out: FILO) เรี ยกว่า กองซ้อน
ความหมายของโครงสร้ างข้ อมูล
เป็ นการจัดระบบความสัมพันธ์ระหว่างข้อมูลในแบบต่าง ๆ กัน
เพื่อให้เหมาะสมกับการดาเนินการกับข้อมูลในระบบงานนั้น ๆ และ
เพื่อให้การใช้เนื้อที่ในหน่วยความจาหลักเกิดประโยชน์สูงสุ ด
 การรวมกันของข้อมูลเชิ งเดี่ยวและข้อมูลเชิ งประกอบเข้าด้วยกัน
เป็ นกลุ่มพร้อมกับการกาหนดความสัมพันธ์
 ตัวอย่างโครงสร้างข้อมูล


Array, String, List, Stack, Queue, Tree, Graph etc.
ตัวอย่ างการกาหนดโครงสร้ างข้ อมูล
โครงสร้ างข้ อมูลแบบอาร์ เรย์
 ชุดข้อมูลต้องมีค่าชนิ ดใดชนิ ดหนึ่ ง
 ชนิ ดของข้อมูลจะต้องอธิ บายลักษณะข้อมูลได้โดยตรง และลาดับ
ข้อมูลต้องมีความสัมพันธ์กบั ข้อมูลที่เก็บ
 เช่น อาร์ เรย์ที่ใช้เก็บข้อมูลของเดือน โดยลาดับที่ 0 เก็บ มกราคม,
ลาดับที่ 1 เก็บ กุมภาพันธ์ เป็ นต้น
ความสาคัญของโครงสร้ างข้ อมูล
• มีความสาคัญต่อการประมวลผลด้วยคอมพิวเตอร์ เพราะข้อมูลที่
ถูกจัดเก็บอย่างเป็ นระเบียบและขั้นตอนการเข้าถึงอย่างมีระบบจะทา
ให้สะดวกในการจัดการกับข้อมูลตามที่ตอ้ งการ
การเลือกใช้ โครงสร้ างข้ อมูล
• การพัฒนาโปรแกรมเพื่อให้ได้โปรแกรมที่มีประสิ ทธิ ภาพในการ
ทางานสูงสุ ด ต้องคานึงถึงโครงสร้างข้อมูลที่ใช้
• กรณี ที่ โ ปรแกรมไม่ ยุ่ ง ยากซั บ ซ้ อ นมาก ผู ้เ ขี ย นโปรแกรมไม่
จาเป็ นต้องคานึ งถึงโครงสร้างข้อมูลมากนัก เพราะโครงสร้ างข้อมูล
อาจจะไม่มีผลกับประสิ ทธิภาพในการทางานของโปรแกรม
• ในระบบงานใหญ่ ที่ มี ค วามสลับ ซั บ ซ้ อ นมาก ๆ ต้อ งค านึ ง ถึ ง
โครงสร้างข้อมูลที่เลือกใช้ดว้ ย
การดาเนินการกับข้ อมูลในโครงสร้ างข้ อมูล
การเพิ่มข้อมูล
 การลบข้อมูล
 การเปลี่ยนแปลงแก้ไขข้อมูล
 การค้นหาข้อมูล
 การแสดงข้อมูล
 การเรี ยงลาดับข้อมูล

ประเภทของโครงสร้ างข้ อมูล

Primitive data structure
เป็ นข้อมูลที่มีค่าเฉพาะประเภทใดประเภทหนึ่ ง เช่น แบบเลข
จานวนเต็ม (integer) แบบตรรกะ (boolean) แบบตัวอักษร
(character) เป็ นต้น

Simple data structure
เกิ ดจากการนาเอาข้อมูลโครงสร้ างพื้นฐานประกอบขึ้นมาเป็ นชุ ด
ของข้อมูลที่มีความสัมพันธ์กนั ในลักษะใดลักษณะหนึ่ ง เช่น ข้อมูล
แบบอาร์เรย์
ประเภทของโครงสร้ างข้ อมูล

Compound data structure
เกิ ด จากการน าเอาข้อ มู ล องค์ป ระกอบอย่า งง่ า ยประกอบขึ้ น เป็ น
ข้อมูลที่มีโครงสร้างซับซ้อนขึ้น แบ่งเป็ นแบบ linear structure และ
nonlinear structure
ประเภทของโครงสร้ างข้ อมูล
Primitive
Simple
data structure data structure
Integer
Boolean
Character
Array
String
Record
Compound
data structure
linear
nonlinear
Stack
Queue
Linked-List
Graph
General Tree
Binary Tree
อัลกอริธึม (Algorithm)



ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อแก้ปัญหาใดปัญหา
หนึ่ง ซึ่งถ้าปฏิบตั ิตามขั้นตอนอย่างถูกต้องแล้ว จะสามารถช่วย
แก้ปัญหา หรื อประมวลผลตามต้องการได้สาเร็ จ
มีลาดับหรื อวิธีการในการแก้ไขปัญหาใดปัญหาหนึ่งอย่างเป็ นขั้น
เป็ นตอนและ ชัดเจน
แตกต่างจากการแก้ปัญหาแบบสามัญสานึก หรื อฮิวริ สติก (heuristic)
Algorithm





โดยทัว่ ไป ขั้นตอนวิธี จะประกอบด้วย
วิธีการเป็ นขั้นๆ (Sequence)
มีส่วนที่ตอ้ งทาแบบวนซ้ า (iterate)
หรื อ เวียนเกิด (recursive)
ใช้ตรรกะ (logic) และ/หรื อ ในการเปรี ยบเทียบ (comparison) ใน
ขั้นตอนต่างๆ จนกระทัง่ เสร็ จสิ้ นการทางาน
Algorithm





ในการทางานอย่างเดียวกัน เราอาจจะเลือกขั้นตอนวิธีที่ต่างกันเพื่อ
แก้ปัญหาได้
โดยที่ผลลัพธ์ที่ได้ในขั้นสุ ดท้ายจะออกมาเหมือนกันหรื อไม่กไ็ ด้
และจะมีความแตกต่าง ที่จานวนและชุดคาสัง่ ที่ใช้ต่างกัน
ซึ่งส่ งผลให้ เวลา (time) , และขนาดหน่วยความจา (space) ที่
ต้องการต่างกัน
หรื อเรี ยกได้อีกอย่างว่ามีความซับซ้อน (complexity) ต่างกัน
วิธีการสร้ าง Algorithms

ในการสร้างอัลกอริ ทึมเพื่อใช้งานทางคอมพิวเตอร์ สามารถสร้าง
ได้หลายวิธีดว้ ยกัน โดยในที่น้ ีจะขอกล่าวถึงวิธีต่าง ๆ ดังต่อไปนี้
 การบรรยาย (Narrative Description)
 การเขียนผังงาน (Flowchart)
 การเขียนรหัสจาลอง (Pseudo Code)
การบรรยาย (Narrative Description)



เป็ นวิธีที่วา่ ด้วยการใช้คาพูดบรรยายเป็ นตัวอักษร
วิธีน้ ีจะค่อนข้างจะง่ายสาหรับตัวผูเ้ ขียน แต่จะยากต่อการนาไปใช้
ปฏิบตั ิ
เนื่องจากอาจจะก่อให้เกิดปัญหาต่าง ๆไม่วา่ จะเป็ นขอบเขตการ
บรรยายที่กว้างเกินไป ยืดเยื้อเกินไป รวมถึงการบรรยายที่ยากต่อ
ความเข้าใจ
ตัวอย่ าง อัลกอริทมึ ทีเ่ ขียนในรูปแบบการบรรยาย

ขั้นตอนการลงทะเบียนเรี ยน
ในการลงทะเบียนเรี ยนภาคการศึกษาปกติจะสามารถทาการ
ลงทะเบียนเรี ยนได้ไม่เกินกว่า 21 หน่วยกิต คอมพิวเตอร์จะต้องทาการ
สะสมค่าหน่วยกิต ของแต่ละรายวิชาที่นกั ศึกษา ลงทะเบียนเรี ยน หากมีการ
ลงทะเบียนเรี ยนเกินกว่านั้น ก็จะต้องแสดงข้อความเตือนส่ วนการ
ลงทะเบียนเรี ยนภาคฤดูร้อน ก็เป็ นไปในลักษณะเดียวกันแต่จานวนหน่วย
กิต สูงสุ ดที่สามารถลงทะเบียนได้คือ 9 หน่วยกิต
เขียนผังงาน






หมายถึง การเขียนสัญลักษณ์แทนขบวนการแก้ปัญหา
เป็ นการแสดงขั้นตอนวิธีการที่ใช้สญ
ั ลักษณ์ที่เข้าใจได้ง่าย แต่ให้
รายละเอียดได้นอ้ ยกว่า
เพื่อใช้อธิบายการแก้ปัญหาตั้งแต่เริ่ มต้นจนจบงาน
ช่วยลดปัญหาในการอธิบาย
ทาให้การพัฒนาโปรแกรมในลาดับต่อไปง่ายขึ้น
สะดวกต่อการแก้ไขหรื อพัฒนาโปรแกรมในอนาคต
การเขียนผังงาน (Flowchart)
ตัวอย่าง Flowchart
การเขียนรหัสจาลอง (Pseudo Code)



รหัสเทียม หรือ ซู โดโค้ ด (Pseudo Code) คือ รหัสจาลองที่ใช้เป็ น
ตัวแทนของอัลกอริ ทึม
โดยมีถอ้ ยคาหรื อประโยคคาสัง่ ที่เขียนอยูใ่ นรู ปแบบของ
ภาษาอังกฤษที่ไม่ข้ ึนกับภาษาคอมพิวเตอร์ใดภาษาหนึ่ง
หรื อ จะใช้ภาษาไทยก็ได้ แต่กย็ งั คงไว้ซ่ ึงขั้นตอนการทางานหลัก ๆ
ของโปรแกรมเอาไว้ โดยไม่ตอ้ งเจาะรายละเอียดการทางานในแต่
ละส่ วน
ตัวอย่าง
อัลกอริ ทึม ในรู ปแบบ Pseudo Code
ตัวอย่าง
อัลกอริ ทึม ในรู ปแบบ Pseudo Code
ตัวอย่าง
อัลกอริ ทึม ในรู ปแบบ Pseudo Code
Algorithm EmptyQ(Q)
Pre Q is a queue structure
Post boolean returned
if (F = 0) and (R = 0) then
set empty to True
else
set empty to False
endif
End EmptyQ
ตัวอย่าง
อัลกอริ ทึม ในรู ปแบบ Pseudo Code
การเขียน Pseudocode


ซู โดโคด (PseudoCode)
การนาคาในภาษาอังกฤษมาแสดงอัลกอริ ทึม หรื อลาดับขั้นตอนการ
ทางานของโปรแกรมเพื่อแก้ปัญหาใดปั ญหาหนึ่ ง โดยเรี ยบเรี ยงให้สามารถสื่ อ
ความหมายให้เข้าใจได้วา่ แต่ละขั้นตอนการแก้ปัญหานั้นทาได้อย่างไร
รู ปแบบการเขียนซู โดโคด





การรับข้อมูล และการแสดงข้อมูล
การคานวณ
การเปรี ยบเทียบ
การทางานแบบวนซ้ า
การข้ามไปทาคาสัง่ อื่น
ลักษณะของ Pseudocode
เป็ นเครื่ องมือที่นิยมใช้ในการสร้างอัลกอริ ทึม
 มีรูปแบบคล้ายประโยคภาษาอังกฤษ
 ไม่สามารถรันเป็ นโปรแกรมได้โดยตรง
่ บั ภาษาคอมพิวเตอร์ ภาษาใดภาษาหนึ่ ง
 ไม่ข้ ึนอยูก
 มีรูปแบบประโยคที่เป็ นโครงสร้าง เพื่อใช้อธิ บายรายละเอียดการพัฒนา
 อัลกอริ ทึมเน้นที่ประโยคกิจกรรม เพื่อใช้ในการทางานของโปรแกรมเป็ น
สาคัญ
 สามารถสร้างประโยคแบบเรี ยงคาสั่ง(Sequence) กาหนดทางเลือก
(Selection) และการทางานเป็ นรอบ(Iteration)

Pseudocode

Algorithm header




Purpose
Condition
Return
Keywords :



Pre : ความต้องการของพารามิเตอร์ ที่จะรับเข้ามาทางาน
Post : กิจกรรมที่เกิดขึ้นและสถานะของ output parameters
Return : คือเงื่อนไขที่มีการส่ งกลับไปหลังจากทางาน
ตัวอย่ าง Algorithm Heading
Algorithm deviation
This algorithm print deviation from mean for series
pre nothing
post average and number with their deviation printed
return nothing
* จากตัวอย่าง แสดงว่า อัลกอริ ทึมนี้ไม่มีการรับค่าพารามิเตอร์ ใด ๆ เข้ามา
ทางานในอัลกอริ ทึม
* การทางานของอัลกอริ ทึมนี้ จะมีการพิมพ์ค่า average และ deviation
* หลังจากอัลกอริ ทึมนี้ทางานเสร็ จ ไม่มีการส่ งค่าใด ๆ กลับไป
ตัวอย่ างการเขียนอัลกอริทมึ ด้ วย Pseudocode
Algorithm addNumber(number1,number2)
This algorithm print sum of two numbers
pre number1 and number2 are numbers to calculate sum of them
post two number and sum of two numbers printed
return nothing
* จากตัวอย่าง แสดงว่า อัลกอริ ทึมนี้มีการรับค่าพารามิ เตอร์ เข้ามาทางาน 2
ตัวคือ number 1 และ number2
* การทางานของอัลกอริ ทึมนี้ จะมีการพิมพ์ค่าผลบวกของตัวเลขออกมา
* หลังจากอัลกอริ ทึมนี้ทางานเสร็ จ ไม่มีการส่ งค่าใด ๆ กลับไป
การเขียน Pseudocode
ในส่ วน Statement Constructs


การรับข้ อมูล
รู ปแบบ
ตัวอย่าง
read var1, var2, var3, …
read id
การแสดงข้ อมูล
รู ปแบบ
ตัวอย่าง
print var1, var2, var3, …
print ‘Name’,name
การเขียน Pseudocode
ในส่ วน Statement Constructs
การกาหนดค่ า
รู ปแบบ
set variable to expression/constant
เช่น
set count to 0
set average to total/2

การเขียน Pseudocode
ในส่ วน Statement Constructs

การคานวณ
รู ปแบบ
compute variable = expression / constant หรื อ
compute add variable to expression/constant
ตัวอย่าง
compute total = num1 + num2
การเขียน Pseudocode
ในส่ วน Statement Constructs

การเปรียบเทียบ
กรณีที่ 1 เปรี ยบเทียบระหว่างค่า 2 ค่า
รู ปแบบ
if (condition) then
true statement(s)
else
false statement(s)
endif
การเขียน Pseudocode
ในส่ วน Statement Constructs

การเปรียบเทียบ
กรณีที่ 1 เปรี ยบเทียบระหว่างค่า 2 ค่า
ตัวอย่าง
if x > 0 then
read x
else
compute sum = x + y
endif
การเขียน Pseudocode
ในส่ วน Statement Constructs

การเปรียบเทียบ
กรณีที่ 2 เปรี ยบเทียบทางเลือกหลายทาง
รู ปแบบ
case variable of
a : a-statement(s)
b : b-statement(s)
c : c-statement(s)
endcase
การเขียน Pseudocode
ในส่ วน Statement Constructs

การเปรียบเทียบ
กรณีที่ 2 เปรี ยบเทียบทางเลือกหลายทาง
ตัวอย่าง
case grade of
4 : print ‘A’
3 : print ‘B’
2 : print ‘C’
endcase
การเขียน Pseudocode
ในส่ วน Statement Constructs

การทางานแบบวนซ้า
รู ปแบบ
loop (เงื่อนไข)
action
end loop
การเขียน Pseudocode
ในส่ วน Statement Constructs

การทางานแบบวนซ้า

Do- while loop : เปรี ยบเทียบเงื่อนไขก่อนทาคาสัง่ ภายใน
รู ปแบบ
do while (condition)
statement(s)
enddo
การเขียน Pseudocode
ในส่ วน Statement Constructs

การทางานแบบวนซ้า

Do- while loop : เปรี ยบเทียบเงื่อนไขก่อนทาคาสัง่ ภายใน
ตัวอย่าง
read data
do while (data <> 0)
read data
enddo
การเขียน Pseudocode
ในส่ วน Statement Constructs

การทางานแบบวนซ้า

Until loop : ทาคาสัง่ ภายในก่อนที่จะมีการเปรี ยบเทียบเงื่อนไข
รู ปแบบ
repeat
statement(s)
until (condition)
การเขียน Pseudocode
ในส่ วน Statement Constructs

การทางานแบบวนซ้า

Until loop : ทาคาสัง่ ภายในก่อนที่จะมีการเปรี ยบเทียบเงื่อนไข
ตัวอย่าง
n=0
repeat
read id,name
print id,name
compute n = n + 1
until (n=5)
การเขียน Pseudocode
ในส่ วน Statement Constructs

การข้ ามไปทาคาสั่ งอืน่
รู ปแบบ
label :
statement(s)
goto label
ตัวอย่าง
L:
read x
if(x < 0) then goto L
ตัวอย่ าง การเขียน Algorithm ด้ วย Pseudocode
การประเมินผลของโปรแกรม


การใช้ เนือ้ ที่ในหน่ วยความจา
ขึ้นอยูก่ บั การเลือกโครงสร้างข้อมูล และการแทนข้อมูล
ระยะเวลาที่ใช้ ในการทางาน
ขึ้นอยูก่ บั อัลกอริ ธึมที่เลือกใช้
ใช้ เนือ้ ทีใ่ น
หน่ วยความจาน้ อย
ใช้ เวลา
ในการทางานน้ อย
โปรแกรมทีด่ ี
การประเมินประสิ ทธิภาพของอัลกอริธึม


Performance Analysis
การวิเคราะห์ประสิ ทธิภาพของอัลกอริ ธึม จะใช้วิธีการ
วิเคราะห์วิธีการทางานของอัลกอริ ธึม
Performance Measurement
การวัดประสิ ทธิภาพของอัลกอริ ธึม จะเป็ นการวัดผลจากการ
ทดลองจริ ง
วิเคราะห์ ประสิ ทธิภาพของอัลกอริธึม


วิเคราะห์หน่วยความจาที่ตอ้ งใช้ในการประมวลผล หรื อเรี ยกว่า
วิเคราะห์ Space Complexity
วิเคราะห์เวลาที่จะต้องใช้ในการประมวลผล หรื อเรี ยกว่า Time
Complexity
การวิเคราะห์ประสิ ทธิภาพของอัลกอริ ธึม


Space/Memory :
ใช้เนื้อที่ความจามากน้อยแค่ไหน
Time
เวลาที่ใช้ในการประมวลผล
การวิเคราะห์ SPACE COMPLEXITY
การวิเคราะห์วา่ จะต้องใช้หน่วยความจาทั้งหมดเท่าไรในการ
ประมวลผลอัลกอริ ธึมนั้น
•รองรับจำนวนข้อมูลที่ส่งเข้ำมำประมวลผล (Input Data)ได้มำกที่สดุ เท่ำใด
เพื่อให้อลั กอริธึมนัน้ สำมำรถประมวลผลได้อยู่
•ทรำบขนำดของหน่ วยควำมจำที่จะต้องใช้ในกำรประมวลผลอัลกอริธึม เพื่อ
ไม่ให้กระทบกับกำรทำงำนของคนอื่น
•เพื่อเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตัง้ โปรแกรมที่พฒ
ั นำขึน้ ได้
อย่ำงเหมำะสม
องค์ ประกอบของ SPACE COMPLEXITY

Instruction Space

จำนวนของหน่วยควำมจำทีค่ อมไพเลอร์จำเป็นต้องใช้ขณะทำกำร
คอมไพล์โปรแกรม

Data Space

จำนวนหน่วยควำมจำทีต่ อ้ งใช้สำหรับเก็บค่ำคงที่ และตัวแปร
ทัง้ หมดทีต่ อ้ งใช้ในกำรประมวลผลโปรแกรม

Environment Stack Space

จำนวนหน่วยควำมจำทีต่ อ้ งใช้ในกำรเก็บผลลัพธ์ของข้อมูลเอำไว้
เพือ่ รอเวลำทีจ่ ะนำผลลัพธ์นนั ้ กลับไปประมวลผลอีกครัง้ (พบใน
recursive function)
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);
ประสิ ทธิภาพของอัลกอริทึม
(Algorithm Efficiency)
มักถูกกาหนดมาในรู ปแบบของฟั งก์ชนั ด้วยการพิจารณาจากจานวนของ
element ที่ถกู โปรเซส และชนิดของลูปที่ใช้งาน
 แทนด้วยฟั งก์ชน
ั ดังนี้ f(n) = efficiency
 ประสิ ทธิ ภาพของ Linear Loop คือ f(n) = n
 ประสิ ทธิ ภาพของ Logarithm Loop คือ f(n) = logn
 ประสิ ทธิ ภาพของ Linear Logarithm Loop คือ f(n) = n(logn)
2
 ประสิ ทธิ ภาพของ Quadratic Loop คือ f(n) = n
 ประสิ ทธิ ภาพของ Dependent Quadratic Loop คือ f(n) = n(n+1)/2

ประสิ ทธิภาพของ Linear Loops




Linear Loop คือ loop ที่มีการเพิ่มหรื อลดค่าให้กบั ตัวแปรที่ควบคุม loop
ตัวอย่าง for (i=0; i<1000; i++)
application code
ประสิ ทธิภาพคือจานวนรอบของการวน loop แต่บางกรณี อาจจะไม่ได้เป็ น
แบบนั้น
เช่น for (i=0; i<1000; i+=2)
application code
ประสิ ทธิภาพ f(n) = n/2
Loop facter ยิง่ สูง จานวนรอบของการวน loop ก็จะสูงด้วย
ประสิ ทธิภาพของ Logarithmic Loops


Logarithmic loops คือ loop ที่มีการคูณหรื อหารตัวควบคุม loop
ประสิ ทธิภาพของ Logarithm Loop คือ f(n) = logn
 ตัวอย่าง
 Multiply Loops
for ( i = 1; i < 1000; i *= 2)
application code

Divide Loops
for ( i = 1000; i >= 1; i /= 2)
application code
ประสิ ทธิภาพของ Nested Loops

ประสิ ทธิภาพหรื อจานวนรอบของ nested loops โดยทัว่ ไป จะได้
Iterations = outer loop iterations X inner loop iterations
ตัวอย่าง
for ( i = 0; i < 10; i++)
for ( j = 1; j <= 10; j++)
application code
ประสิ ทธิภาพของ Nested Loops


Nested Loops คือ loop ที่มีการซ้อน loop
Nested Loops แบ่งได้เป็ น 3 แบบย่อย คือ
1. ประสิ ทธิภาพของ Linear Logarithm Loop คือ f(n) = n(logn)
ตัวอย่าง
for ( i = 0; i < 10; i++)
for ( j = 1; j <= 10; j*=2)
application code
ประสิ ทธิภาพของ Nested Loops
2. ประสิ ทธิภาพของ Quadratic Loop คือ f(n) = n2
ตัวอย่าง
for ( i = 0; i < 10; i++)
for ( j = 0; j < 10; j++)
application code
ประสิ ทธิภาพของ Nested Loops
3. ประสิ ทธิภาพของ Dependent Quadratic Loop คือ f(n) = n(n+1)/2
ตัวอย่าง
for ( i = 0; i < 10; i++)
for ( j = 0; j < i; j++)
application code
BIG-O NOTATION

การวิเคราะห์อลั กอริ ธึม จะใช้วิธีหาจานวนครั้งของการทางานของ
โปรแกรม โดยมักจะสนใจค่าโดยประมาณเท่านั้น ซึ่งจะใช้
สัญลักษณ์วา่ O เรี ยกว่า บิ๊กโอ (big O) ซึ่งเป็ นสัญลักษณ์ทาง
คณิ ตศาสตร์ที่มาจากคาว่า Order of Magnitude
สั ญลักษณ์ บิ๊กโอ (Big-O Notation)

7 มาตรฐานเพื่อการวัดผลประสิ ทธิ ภาพของอัลกอริ ทึมประกอบด้วย







• O(logn)
• O(n)
• O(n(logn))
• O(n2)
• O(nk )
• O(cn )
• O(n!)
BIG-O NOTATION
แนวความคิดของบิ๊กโอ จะดูจากค่าที่มีผลกระทบมากที่สุดเพียงค่า
เดียว
 ค่าอื่นๆที่เกี่ยวข้องจะมีผลต่อฟั งก์ชน
ั น้อยกว่า จึงไม่สนใจ และไม่
สนใจค่าคงที่ดว้ ย

ตัวอย่าง หาค่าบิ๊กโอของ N4 + 10N – 5
ถ้า
f(N) =
N4 + 10N – 5
O(f(N)) =
O(N4)
BIG-O NOTATION
ตัวอย่าง หาค่าบิ๊กโอของ 100N +1
ถ้า
f(N)
=
100N +1
O(f(N)) =
O(N)
BIG-O NOTATION
ตัวอย่าง หาค่าบิ๊กโอของ N3 + 2N3 + 10
ถ้า
f(N)
=
N3 + 2N3 + 10
O(f(N)) =
O(N3)
ตัวอย่าง หาค่าบิ๊กโอของ 100
ถ้า
f(N)
O(f(N))
=
=
100
O(1)
สั ญลักษณ์ บิ๊กโอ (Big-O Notation)
สั ญลักษณ์ บิ๊กโอ (Big-O Notation)
การวิเคราะห์ความเร็ วของ ALGORITHM
เร็ว
log n
0
1
2
3
4
5
ช้ำ
n
1
2
4
8
16
32
n log n
0
2
8
24
64
160
n2
1
4
16
64
256
1,024
n3
1
8
64
512
4096
32,768
2n
2
4
16
256
65,536
4,294,967,296
ตัวอย่ างการหา Big-O
O(n)