การเขียนโปรแกรม - มหาวิทยาลัยบูรพา วิทยาเขตจันทบุรี

Report
291101
โครงสร้ างข้ อมูลและขั้นตอนวิธี
Data Structures and Algorithms
อ.ธารารัตน์ พวงสุ วรรณ
คณะวิทยาศาสตร์และศิลปศาสตร์
มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
เอกสารการสอนและข้อมูลผูส้ อน

ดาวน์โหลดเอกสารการเรี ยนได้ที่
http://www.chanthaburi.buu.ac.th/~thararat
ติดต่ อผู้สอน


E-mail : [email protected]
ห้องพัก : อาคารเรี ยนรวม L206G
คาอธิบายรายวิชา







โครงสร้างข้อมูลแบบต่างๆ ลิสต์ สแตก แถวคอย ต้นไม้ กราฟ เซ็ต และ ฮีฟ
การเรี ยงลาดับข้อมูลด้วยอัลกอริ ทึมแบบ บับเบิล การแทรก เชลล์ ฮีพ ควิก
การค้นหาด้วยอัลกอริ ทึมแบบตามลาดับ แบบไบนารี ใช้ตารางแฮช
โครงสร้างต้นไม้และการดาเนินการกับข้อมูลในโครงสร้างต้นไม้
โครงสร้างกราฟและการดาเนิ นการกับข้อมูลในโครงสร้างกราฟ
การประยุกต์ใช้โครงสร้างข้อมูลเพื่อแก้ปัญหาในธุรกิจ
ภาคปฏิบตั ิใช้โปรแกรมภาษาที่กาหนดเขียนโปรแกรมประยุกต์โครงสร้างข้อมูล
และขั้นตอนวิธีเพื่อแก้ปัญหาในงานธุรกิจ
วัตถุประสงค์ รายวิชา




เพื่อให้ผเู ้ รี ยนเข้าใจโครงสร้างข้อมูลรู ปแบบต่าง ๆ และนาไปใช้
ได้อย่างเหมาะสม
เพื่อให้ผเู ้ รี ยนเข้าใจวิธีการประมวลผลโครงสร้างข้อมูลรู ปแบบ
ต่าง ๆ
เพื่อให้ผเู ้ รี ยนสามารถวิเคราะห์และออกแบบอัลกอริ ทึมโดยใช้
โครงสร้างข้อมูลชนิดต่าง ๆ ได้
เพื่อให้ผเู ้ รี ยนสามารถใช้โปรแกรมภาษาในการเขียนโปรแกรม
ประยุกต์โครงสร้างข้อมูลได้
สถานภาพรายวิชาและเงื่อนไขรายวิชา


วิชาเอกบังคับ
บุรพวิชา วิชา 291100 การเขียนโปรแกรมเบื้องต้น
เนือ้ หาวิชา








ความรู ้เบื้องต้นเกี่ยวกับโครงสร้างข้อมูลและอัลกอริ ทึม
โครงสร้างข้อมูลแบบต่างๆ ได้แก่ ลิสต์ สแตก แถวคอย ต้นไม้ กราฟ เซ็ต
และ ฮีฟ
การเรี ยงลาดับข้อมูลด้วยอัลกอริ ทึมแบบต่าง ๆ ได้แก่ บับเบิล การแทรก
เชลล์ ฮีพ ควิก
การค้นหาข้อมูลด้วยอัลกอริ ทึมแบบต่าง ๆ ได้แก่ แบบตามลาดับ แบบไบนารี
ใช้ตารางแฮช
โครงสร้างต้นไม้และการดาเนินการกับข้อมูลในโครงสร้างต้นไม้
โครงสร้างกราฟและการดาเนิ นการกับข้อมูลในโครงสร้างกราฟ
การประยุกต์ใช้โครงสร้างข้อมูลเพื่อแก้ปัญหาในธุรกิจ
ใช้โปรแกรมภาษาในการเขียนโปรแกรมจากอัลกอริ ทึมที่ได้ออกแบบหรื อ
ประยุกต์โครงสร้างข้อมูล
กิจกรรมการเรียนการสอน





บรรยายเนื้อหาบทเรี ยนในชั้นเรี ยน
อภิปรายและถามตอบในชั้นเรี ยน
ฝึ กเขียนอัลกอริ ทึมและเขียนโปรแกรมเพื่อทดสอบอัลกอริ ทึม
ทาแบบฝึ กหัด
การทดสอบย่อยระหว่างเรี ยน
การวัดผลและประเมินผล





สอบกลางภาค
สอบปลายภาค
ทดสอบย่อย
งานในชั้นเรี ยนและแบบฝึ กหัด
การเข้าชั้นเรี ยนและกิจกรรมในชั้นเรี ยน
30%
30%
10%
20%
10%
ตาราหลัก เอกสารประกอบการสอน
และหนังสื ออ่ านประกอบ



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
แนวคิดพืน้ ฐานสาหรับ
การพัฒนาโปรแกรมคอมพิวเตอร์
การพัฒนาโปรแกรมคอมพิวเตอร์

ประกอบด้วย 7 ขั้นตอน ดังนี้
 วิเคราะห์ปัญหา
 เขียนผังงานหรื อขั้นตอนวิธี
 เขียนโปรแกรม
 ทดสอบและแก้ไขโปรแกรม
 จัดทาเอกสารเกี่ยวกับโปรแกรม
 ใช้งานจริ ง
 ปรับปรุ งและพัฒนาโปรแกรม
หลักการพัฒนาโปรแกรม

การพัฒนาโปรแกรมแบ่งออกเป็ น
 การวางแผน (Planning)
 การวิเคราะห์ปัญหา (Analysis)
 การออกแบบ (Design)
 การพัฒนาโปรแกรม (Implementation)
 การเขียนโปรแกรม (Coding)
 การทดสอบโปรแกรม (Testing)
 การแก้ไขข้อผิดพลาดของโปรแกรม (Debugging)
 การดูแลรักษาโปรแกรม (Maintenance)
การวางแผน (Planning)

การวางแผนเป็ นการมองภาพโดยรวม มองปัญหา เมื่อเราต้องการ
พัฒนาโปรแกรมว่า สิ่ งจาเป็ น ส่ วนประกอบ ลาดับขั้นตอนในการ
พัฒนา เครื่ องมือ และสิ่ งแวดล้อมต่างๆ ในการพัฒนาโปรแกรม
ประกอบด้วยอะไรบ้าง
การวิเคราะห์ ปัญหา (Analysis)



การระบุขอ้ มูลเข้า (Input Specification): ต้องทราบว่ามีขอ้ มูล
อะไรบ้างที่ตอ้ งป้ อนเข้าสู่ระบบคอมพิวเตอร์
การระบุขอ้ มูลออก (Output Specification): ต้องพิจารณาเป้ าหมาย
หรื อวัตถุประสงค์ของงานว่าต้องการผลลัพธ์อย่างไร โดยคานึงถึง
ผูใ้ ช้เป็ นหลัก
กาหนดวิธีการประมวลผล (Process Specification): ต้องทราบ
วิธีการประมวลผล หรื อวิธีคิดให้ได้ผลลัพธ์ตามต้องการ
การวิเคราะห์ ปัญหา (Analysis)
ข้อมูลที่นาเข้าสู่ระบบ
คอมพิวเตอร์
ประกอบด้วย
อะไรบ้าง
วิเคราะห์ผลลัพธ์
วิเคราะห์ Input
Process
เขียนขั้นตอนการแก้ปัญหา

ตัวอย่ าง การวิเคราะห์ ปัญหา
การต้ มไข่ ไก่ทาน
วิเคราะห์ผลลัพธ์ : ไข่ไก่ตม้ สุ ก ทานได้
วิเคราะห์ Input : ไข่ไก่
Process(ขั้นตอนการแก้ปัญหา) คือ
 ต้มน้ าให้เดือด
 ใส่ ไข่
 รอ 10 นาที
 ดับไฟ / ปิ ดเตา
 ปอกไข่
 หยุด
ตัวอย่ างปัญหา


ปัญหา ต้องการหาผลบวกของเลขจานวนเต็มสองตัว
ให้นิสิตทาการวิเคราะห์ปัญหา โดยระบุสิ่งต่อไปนี้
 ผลลัพธ์ที่ตอ
้ งการ
 ข้อมูลนาเข้าที่ตอ
้ งการ
 ขั้นตอนการแก้ปัญหา
ตัวอย่ างปัญหา


ปัญหา ต้องการหาค่าเฉลี่ยคะแนนวิชา CSC201
ให้นิสิตทาการวิเคราะห์ปัญหา โดยระบุสิ่งต่อไปนี้
 ผลลัพธ์ที่ตอ
้ งการ
 ข้อมูลนาเข้าที่ตอ
้ งการ
 ขั้นตอนการแก้ปัญหา
ตัวอย่ างปัญหา


ปัญหา ต้องการคานวณโบนัสของพนักงานแต่ละตาแหน่ง
โดยตาแหน่ง A คิด 30% ของเงินเดือน ส่ วนตาแหน่ง B คิด
20% ของเงินเดือน
ให้นิสิตทาการวิเคราะห์ปัญหา โดยระบุสิ่งต่อไปนี้
 ผลลัพธ์ที่ตอ
้ งการ
 ข้อมูลนาเข้าที่ตอ
้ งการ
 ขั้นตอนการแก้ปัญหา
การออกแบบ (Design)
เป็ นการออกแบบขั้นตอนวิธี (Algorithm) ในการทางานของ
โปรแกรม
 สามารถ ทาได้ใน 3 รู ปแบบ
 ผังลาดับงาน (Flowchart): ใช้รูปภาพแสดงขั้นตอนการ
แก้ปัญหา
 รหัสจาลอง (Pseudo-Code): เป็ นการใช้ขอ
้ ความที่เป็ นภาษาไทย
หรื ออังกฤษ ที่แสดงขั้นตอนการแก้ปัญหา แต่จะใช้คาเฉพาะที่มี
อยูใ่ นภาษาโปรแกรมในการเขียน
 การบรรยาย (Narrative Description)

การพัฒนาโปรแกรม (Implementation)



การเขียนโปรแกรม (Coding): เป็ นการนาผลที่ได้จากการ
ออกแบบมาแปลเป็ นภาษาโปรแกรม
การทดสอบโปรแกรม (Testing): ทดสอบการใช้งานโปรแกรม
 ข้อผิดพลาดของไวยากรณ์ภาษา (Syntax Error)
 ข้อผิดพลาดระหว่างรันโปรแกรม (Runtime Error)
 ข้อผิดพลาดที่เกิ ดจากตีความหมายปั ญหาผิดไป (Logical
Error)
การแก้ไขข้อผิดพลาดของโปรแกรม (Debugging)
การเขียนโปรแกรม (Coding)

การเขียนภาษาโปรแกรม เป็ นการแปลงลาดับขั้นตอนของการ
แก้ปัญหา (Design) มาเป็ นภาษาโปรแกรม โดยที่การเขียนแต่
ละภาษาโปรแกรมจะมีหลักการคล้ายคลึงกัน เพียงแต่รูปแบบ
ไวยากรณ์อาจแตกต่างกันไปบ้าง
การทดสอบโปรแกรม (Testing)



ถึงแม้วา่ โปรแกรมจะสามารถทางานได้ตามวัตถุประสงค์ที่เรากาหนดไว้
แต่อย่างไรก็ตามอาจเกิดข้อผิดพลาดขึ้นได้หากว่า ผูใ้ ช้ไม่ทาตามขั้นตอนที่
เรากาหนดให้
ดังนั้นเราจาเป็ นต้องมีการทดสอบ เพื่อให้ครอบคลุมการทางานทุกด้าน
การแก้ ไขข้ อผิดพลาดของโปรแกรม (Debugging)

เมื่อเกิดข้อผิดพลาด เราจาเป็ นต้องมีการแก้ไขข้อผิดพลาดที่เกิดขึ้น
ข้อผิดพลาดทางไวยากรณ์
 ข้อผิดพลาดขณะรันโปรแกรม
 ข้อผิดพลาดที่เกิดจากการตีความหมายของปั ญหาที่ผด
ิ ไป



อย่างไรก็ตามในบางครั้งโปรแกรมที่เราพัฒนาก็ไม่เกิดข้อผิดพลาด
ขณะเขียนโปรแกรม
แต่กลับมีขอ้ ผิดพลาดในขณะรันโปรแกรม คือเป็ นการผิดพลาด
ทางตรรกะ รวมถึงการแก้ปัญหาผิดวัตถุประสงค์
การดูแลรักษาโปรแกรม (Maintenance)

ภายหลังจากติดตั้งโปรแกรมเพื่อใช้งานจริ ง ขั้นตอนต่อมาคือการ
เฝ้ าดูแลรักษา และหาข้อผิดพลาดที่เกิดขึ้นหลังจากการใช้งานจริ ง
รวมถึงคอยปรับปรุ งแก้ไขให้โปรแกรมมีอายุการใช้งานที่ยาวนาน
อัลกอริธึม (Algorithm)


ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อแก้ปัญหาใดปัญหา
หนึ่ง ซึ่งถ้าปฏิบตั ิตามขั้นตอนอย่างถูกต้องแล้ว จะสามารถช่วย
แก้ปัญหา หรื อประมวลผลตามต้องการได้สาเร็ จ
ตัวอย่างเครื่ องมือที่ใช้ในการแสดงอัลกอริ ธึม


การเขียนซูโดโค้ด (Pseudo Code)
การเขียนผังงาน (Flowchart)
การเขียน 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)

similar documents