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

Download Report

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

290214 Data Structures and Algorithms
ความรู้ เบือ้ งต้ นเกีย่ วกับโครงสร้ างข้ อมูลและอัลกอริทมึ
อ.ธารารัตน์ พวงสุ วรรณ
คณะวิทยาศาสตร์และศิลปศาสตร์
มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
[email protected]
เนือ้ หา





ความหมายของโครงสร้างข้อมูล
ประเภทของโครงสร้างข้อมูล
พื้นฐานการเขียนอัลกอริ ทึมด้วย Pseudocode
ตัวอย่างการเขียนอัลกอริ ทึมด้วย Pseudocode
การประเมินประสิ ทธิภาพของอัลกอริ ทึม
ความหมายของข้ อมูล


ข้อมูล (Data)
ข้อเท็จจริ งที่เกี่ยวข้องกับบุคคล สถานที่ สิ่ งของ หรื อเหตุการณ์ ที่สนใจ
ประเภทของข้อมูล


แบ่งตามลักษณะของข้อมูล
แบ่งตามลักษณะการใช้งาน
ส่ วนประกอบของประเภทข้ อมูล


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)

หลักการของ 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
ประเภทของ ADT

แบ่งตามรู ปแบบโครงสร้าง




ประเภทข้อมูลนามธรรมที่ไม่มีลาดับของข้อมูลซ้ายขวา
ประเภทข้อมูลนามธรรมเชิงเส้น
ประเภทข้อมูลอย่างย่อที่มีลาดับสองอัน
แบ่งตามการซ้ ากันและลาดับของข้อมูล



ไม่อนุญาตให้ซ้ ากันได้
ไม่มีลาดับของข้อมูล
ใช้ลาดับตามการเข้าออกข้อมูล
ลักษณะของข้ อมูลทีด่ ี


Accuracy
ข้อมูลต้องมีความถูกต้อง ซึ่ งเป็ นสิ่ งสาคัญอันดับหนึ่ งใน
ขบวนการประมวลผลข้อมูล
Completeness
ข้อ มู ล ที่ ถู ก ต้อ งเพี ย งอย่า งเดี ย วไม่ อ าจเพี ย งพอส าหรั บ การ
ประมวล จะต้องสมบูรณ์ท้ งั รายการและจานวน รวมทั้งต้อง
ครอบคลุมประชากรหรื อตัวแปรในกลุ่มที่เกี่ยวข้องด้วย
ลักษณะของข้ อมูลทีด่ ี (ต่ อ)


Timeliness
ใช้เวลาในการประมวลผลน้อย ความเร็ วเป็ นตัวชี้ความทันสมัย
ต่อเหตุการณ์ และความเป็ นปัจจุบนั ของข้อมูล
Compatibles
ความเข้ากันได้กบั เครื่ องมือประมวลผล ข้อมูลดิบที่จะนาเข้าสู่
ขบวนการประมวลผล จาเป็ นต้องเข้ากันได้กบั เครื่ องมือที่ใช้ในการ
ประมวลผลนั้น ๆ
ความหมายของโครงสร้ างข้ อมูล
เป็ นการจัดระบบความสัมพันธ์ระหว่างข้อมูลในแบบต่าง ๆ กัน
เพื่อให้เหมาะสมกับการดาเนินการกับข้อมูลในระบบงานนั้น ๆ และ
เพื่อให้การใช้เนื้อที่ในหน่วยความจาหลักเกิดประโยชน์สูงสุ ด
 การรวมกันของข้อมูลเชิ งเดี่ยวและข้อมูลเชิ งประกอบเข้าด้วยกัน
เป็ นกลุ่มพร้อมกับการกาหนดความสัมพันธ์
 ตัวอย่างโครงสร้างข้อมูล


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)


ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อแก้ปัญหาใดปัญหา
หนึ่ง ซึ่งถ้าปฏิบตั ิตามขั้นตอนอย่างถูกต้องแล้ว จะสามารถช่วย
แก้ปัญหา หรื อประมวลผลตามต้องการได้สาเร็ จ
ตัวอย่างเครื่ องมือที่ใช้ในการแสดงอัลกอริ ธึม


การเขียนซูโดโค้ด (Pseudo Code)
การเขียนผังงาน (Flowchart)
การเขียน Pseudocode


ซู โดโคด (PseudoCode)
การนาคาในภาษาอังกฤษมาแสดงอัลกอริ ทึม หรื อลาดับขั้นตอนการ
ทางานของโปรแกรมเพื่อแก้ปัญหาใดปั ญหาหนึ่ ง โดยเรี ยบเรี ยงให้สามารถสื่ อ
ความหมายให้เข้าใจได้วา่ แต่ละขั้นตอนการแก้ปัญหานั้นทาได้อย่างไร
รู ปแบบการเขียนซู โดโคด





การรับข้อมูล และการแสดงข้อมูล
การคานวณ
การเปรี ยบเทียบ
การทางานแบบวนซ้ า
การข้ามไปทาคาสัง่ อื่น
ลักษณะของ Pseudocode
เป็ นเครื่ องมือที่นิยมใช้ในการสร้างอัลกอริ ทึม
 มีรูปแบบคล้ายประโยคภาษาอังกฤษ
 ไม่สามารถรันเป็ นโปรแกรมได้โดยตรง
่ บั ภาษาคอมพิวเตอร์ ภาษาใดภาษาหนึ่ ง
 ไม่ข้ ึนอยูก
 มีรูปแบบประโยคที่เป็ นโครงสร้าง เพื่อใช้อธิ บายรายละเอียดการพัฒนา
 อัลกอริ ทึมเน้นที่ประโยคกิจกรรม เพื่อใช้ในการทางานของโปรแกรมเป็ น
สาคัญ
 สามารถสร้างประโยคแบบเรี ยงคาสั่ง(Sequence) กาหนดทางเลือก
(Selection) และการทางานเป็ นรอบ(Iteration)

Pseudocode

Algorithm header




Purpose
Condition
Return
Keywords :



Pre : ความต้องการของพารามิเตอร์ที่จะรับเข้ามาทางาน
Post : กิจกรรมที่เกิดขึ้นและสถานะของ output parameters
Return : คือเงื่อนไขที่มีการส่ งกลับไปหลังจากทางาน
ตัวอย่ าง Algorithm Heading
Algorithm search (list, argument, location)
Search array for specific item and return index location
pre
list contain 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
** ถ้าเป็ น binary search ต้องกาหนด pre เพิ่มเติมว่า
pre array data must be sorted
ตัวอย่ างการเขียนอัลกอริทมึ ด้ วย Pseudocode
การเขียน 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
ประสิ ทธิภาพของอัลกอริทึม
(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)


ประสิ ทธิ ภาพของอัลกอริ ทึมสามารถเขียนให้อยูใ่ นรู ปแบบอย่างง่ายที่รู้จกั
โดยทัว่ ไปคือสัญลักษณ์บิ๊กโอ (Big-O Notation)
7 มาตรฐานเพื่อการวัดผลประสิ ทธิ ภาพของอัลกอริ ทึมประกอบด้วย







• O(logn)
• O(n)
• O(n(logn))
• O(n2)
• O(nk )
• O(cn )
• O(n!)
สั ญลักษณ์ บิ๊กโอ (Big-O Notation)
สั ญลักษณ์ บิ๊กโอ (Big-O Notation)
ตัวอย่ างการหา Big-O
O(n)