Transcript now

Introduction to Data Structure
and Algorithm
้
่
บทที่ 2 ความรู ้เบืองต้
นเกียวกั
บ
โครงสร ้างข้อมู ล
้
และขันตอนวิ
ธี
่
วัตถุประสงค ์เพือ
• เข ้าใจหลักนามธรรมทีม
่ งุ่ เน ้นการแก ้ไขปั ญหาด ้วย
ั ซอนปลี
้
การตัดทอนสงิ่ ซบ
กย่อยทีไ่ ม่จาเป็ นออกไป
• บอกรายละเอียดทัว่ ไปของซูโดโค ้ด รวมถึงสามารถ
เขียนซูโดโค ้ดทีค
่ รบองค์ประกอบได ้
• บอกความหมายของชนิดข ้อมูลนามธรรมได ้
ิ ธิภาพของ
• เห็นความสาคัญต่อการวิเคราะห์ประสท
อัลกอริทม
ึ
ิ ธิภาพของลูปชนิดต่างๆ ทีน
้
• บอกประสท
่ าไปใชงาน
ในโปรแกรมได ้
ั ลักษณ์บก
• เข ้าใจความหายของสญ
ิ๊ โอ และสามารถ
้ อ
ิ ธิภาพของ
นาไปประยุกต์ใชเพื
่ การวิเคราะห์ประสท
่
หัวข้อทีบรรยาย
•
•
•
•
•
•
•
•
•
หลักนามธรรม
อัลกอริทม
ึ กับความเป็ นนามธรรมโดยธรรมชาติ
ซูโดโค ้ด
การสร ้างประโยคคาสงั่
ความรู ้เกีย
่ วกับชนิดข ้อมูลนามธรรม
การวัดผลอัลกอริทม
ึ
ิ ธิภาพของอัลกอริทม
ประสท
ึ
ั ลักษณ์บก
สญ
ิ๊ โอ
ตัวอย่างการวิเคราะห์บก
ิ๊ โอ
1. หลักนามธรรม (Abstraction)
หลักนามธรรมจะทาให ้ทุกสงิ่ ในโลกแห่ง
ความเป็ นจริงดูงา่ ยดายขึน
้ ด ้วยการพิจารณาบาง
สงิ่ แยกออกจากความเป็ นจริงของสงิ่ เหล่านัน
้
โดยอธิบายว่าสงิ่ สงิ่ นัน
้ ทาอะไร ไม่ต ้องมุง่ เน ้นใน
รายละเอียดว่าต ้องทางานอย่างไร
ดังนัน
้ การคิดด ้วยหลักนามธรรมนี้ จึงทาให ้
เราสามารถคิดวิธก
ี ารแก ้ไขปั ญหาด ้วยการตัด
ั ซอน
้ หรือรายละเอียดปลีกย่อยทีไ่ ม่
ทอนสงิ่ ทีซ
่ บ
จาเป็ นออกไปได ้
Grady Booch กล่าวว่า.. “Abstraction เป็ นหนึง่ ในแนวทาง
ั ซอน”
้
พืน
้ ฐานของมนุษย์ทใี่ ชส้ าหรับจัดการกับความซบ
2. อ ัลกอริทม
ึ กับความเป็ น
นามธรรมโดยธรรมชาติ
• อัลกอริทม
ึ สามารถทาให ้เป็ นรูปธรรมได ้ด ้วยการ
ผ่าน “ตัวแทน (Representation)”
 เรือ
่ งราวในนวนิยาย ถือเป็ นนามธรรม หรือแนวคิด
ื คือตัวแทนทางกายภาพของนวนิยาย
 หนังสอ
้ ้าง
• อัลกอริทม
ึ ก็คอ
ื กระบวนการทีน
่ าไปใชสร
โปรแกรมเพือ
่ ทางานและแก ้ไขปั ญหาตามทีเ่ รา
ต ้องการ
• ตัวแทนก็คอ
ื โปรแกรมทีไ่ ด ้รับการพัฒนาขึน
้ จาก
อัลกอริทม
ึ นัน
้ หรือกล่าวอีกนัยหนึง่ ก็คอ
ื
 โปรแกรม คือตัวแทนของอัลกอริทม
ึ
ี วิ ต์อล
 โปรเซส คือกิจกรรมทีเ่ อ็กซค
ั กอริทม
ึ นั น
้
3. ซูโดโค้ด (Pseudo Code)
• ซูโดโค ้ดมีรป
ู แบบคล ้ายประโยคภาษาอังกฤษ ที่
้ บายรายละเอียดการพัฒนาอัลกอริทม
ใชอธิ
ึ
• ซูโดโค ้ดใชส้ าหรับออกแบบการทางานและ
ตรรกะของโปรแกรมทีส
่ ร ้างขึน
้ ดังนัน
้ ซูโดโค ้ด
ี วิ ต์บนคอมพิวเตอร์ได ้
จึงไม่สามารถนาไปเอ็กซค
โดยตรง และจะออกแบบเพือ
่ นาไปพัฒนาเป็ น
โปรแกรมจริงต่อไป
• ซูโดโค ้ดไม่ขน
ึ้ กับภาษาคอมพิวเตอร์ภาษาใด
ภาษาหนึง่ แต่สามารถแปลงเป็ น
่ ภาษา PASCAL, C++
ภาษาคอมพิวเตอร์ เชน
3. ซูโดโค้ด (Pseudo Code)
• การเขียนซูโดโค ้ดจะเขียนมุง่ เน ้นประโยค
้
ี วิ ต์โปรแกรมเป็ น
กิจกรรมทีใ่ ชในการเอ็
กซค
สาคัญ โดยสามารถสร ้างประโยคคาสงั่ แบบ
เรียงลาดับ กาหนดทางเลือก และการทางาน
เป็ นรอบ
ตัวอย่างซูโดโค้ด
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
3
return line count
end sample
ส่วนประกอบของอ ัลกอริทม
ึ
•
•
•
•
สว่ นหัวของอัลกอริทม
ึ
จุดประสงค์ เงือ
่ นไข และการรีเทิรน
์ ค่า
เลขลาดับประโยคคาสงั่
ตัวแปร
ส่วนหัวของอ ัลกอริทม
ึ
ั ท์วา่ เฮดเดอร์ (Header)
• เรียกทับศพ
ื่ อัลกอริทม
• กาหนดชอ
ึ
• อธิบายรายละเอียดของพารามิเตอร์
(Parameters)
• เงือ
่ นไขก่อน (Preconditions) และเงือ
่ นไขหลัง
(Postconditions)
จุดประสงค ์ เงื่อนไข และการรีเทิร ์น
ค่า
• อธิบายเรือ
่ งทัว่ ไปของการประมวลในอัลกอริทม
ึ
นัน
้ แต่ไม่ได ้อธิบายรายละเอียดทัง้ หมดของ
กระบวนการว่าทางานอย่างไร
nothing ทไ
•Preในกรณี
ี่ ม่มเี งือ
่ นไขก่อน สามารถเขียนให ้อยู่
ในรูปแบบ ดังนี้
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
• ตัวอย่างการกาหนดรายละเอียดในเฮดเดอร์
เลขลาดับประโยคคาสัง่
• ประโยคคาสงั่ จะมีเลขลาดับกากับไว ้ ซงึ่ จะใช ้
เลขทศนิยม ด ้วยการลาดับหมายเลขเพิม
่ ขึน
้ ที
ละหนึง่ ภายในโครงสร ้างของบล็อกนัน
้ ๆ
่ จากอัลกอริทม
• ตัวอย่าง เชน
ึ Sample
– เลขลาดับ 1.1 คือประโยคคาสงั่ read file
– เลขลาดับ 1.2.2 คือประโยคคาสงั่ write page
heading
ตัวแปร (Variables)
ื่ ตัวแปรด ้วยอักขระเพียงตัวเดียว เชน
่
• ไม่ควรตัง้ ชอ
A, B, C ยกเว ้นตัวแปรในการกาหนดลูป สว่ นใหญ่
่
ใชตั้ วแปร i และ j แต่หากหลีกเลีย
่ งได ้ก็จะดี เชน
– ต ้องการค ้นหาข ้อมูลในอาร์เรย์สองมิต ิ โดยแต่ละแถว
้
ึ ษา และแต่ละคอลัมน์ใชแทนคะแนน
้
ใชแทนนั
กศก
้
ี้ าแหน่งแถวและ
ทดสอบ ดังนั น
้ ตัวแปรทีใ่ ชแทนตั
วชต
ื่ ความหมาย
คอลัมน์ควรใช ้ student และ score จะสอ
ได ้ดีกว่า
• ไม่ควรใชค้ าทั่วไปทีม
่ ค
ี วามหมายเฉพาะ (Generic
่ count, sum, total, row, column, file
Names) เชน
ึ ษา
เป็ นต ้น ถ ้าต ้องการตัวแปรทีเ่ ก็บจานวนนักศก
อาจกาหนดตัวแปรว่า studentCount หรือ
ตัวแปร (Variables)
ื่ ให ้สอ
ื่
• หากจาเป็ นต ้องใชค้ าย่อก็ควรตัง้ ชอ
่ stdCnt ใชแทน
้
ความหมายได ้ดี เชน
้
studentCount หรือ numOfStd ใชแทน
numberOfStudent ไม่ควรใช ้ noStd เพราะอาจ
ตีความหมายว่า noStudent ทีห
่ มายถึงไม่ม ี
ึ ษา
นักศก
4. การสร ้างประโยคคาสัง่
• แบบเรียงลาดับ (Sequence)
• แบบเลือกการทางาน (Selection)
• แบบทางานซ้า (Repetition/Loop)
ตัวอย่างผังงาน
ตัวอย่างผังงาน
ตัวอย่างอ ัลกอริทม
ึ
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
่
5. ความรู ้เกียวกับชนิ
ดข้อมู ล
นามธรรม
•
•
•
•
ข ้อมูลเชงิ เดีย
่ วและข ้อมูลเชงิ ประกอบ
ชนิดข ้อมูล
โครงสร ้างข ้อมูล
ชนิดข ้อมูลนามธรรม
่
ข้อมู ลเชิงเดียวและข้
อมู ลเชิง
ประกอบ
• ข ้อมูลเชงิ เดีย
่ ว (Atomic Data) คือข ้อมูลที่
ประกอบด ้วยค่าเดียวทีไ่ ม่สามารถแบ่ง
ื่ ความหมายได ้อีก
สว่ นข ้อมูลนีอ
้ อกไปเพือ
่ สอ
่ เลขจานวนเต็ม 4562 เป็ นต ้น
เชน
• ข ้อมูลเชงิ ประกอบ (Composite Data) โดยข ้อมูล
เชงิ ประกอบนัน
้ สามารถทีจ
่ ะทาการแตกออกเป็ น
ฟิ ลด์ยอ
่ ย (Subfields) และสงิ่ ทีแ
่ ตกออกไปก็ยัง
่ หมายเลขโทรศพ
ั ท์ทเี่ ป็ น
มีความหมายด ้วย เชน
ตัวเลขล ้วนๆ คือ ตัวเลข 3 ตัวแรกเป็ นรหัส
จังหวัด สว่ นทีเ่ หลือคือเบอร์หมายเลข เป็ นต ้น
ชนิ ดข้อมู ล (Data Type)
Type
Integer
Floating Point
Character
Values
−𝛼, … , −2, −1, 0, 1, 2, … , 𝛼
−𝛼, … , 0.0, … , 𝛼
\0, … , ′𝐴′ , ′𝐵 ′ , … , ′𝑎 ′ , ′𝑏′ , … , ~
Operations
∗, +, −, %,/,++, --, …
∗, +, −, %,/, …
<, >, …
โครงสร ้างข้อมู ล (Data Structure)
• โครงสร ้างข ้อมูล คือการรวมกันของข ้อมูล
เชงิ เดีย
่ วและข ้อมูลเชงิ ประกอบเข ้าด ้วยกันเป็ น
ั พันธ์ ซงึ่ รวม
กลุม
่ พร ้อมกับการกาหนดความสม
ไปถึงวิธก
ี ารเพิม
่ ข ้อมูลใหม่ การนาข ้อมูลทีเ่ ก็บ
ไว ้ออก การเดินสารวจข ้อมูลทีเ่ ก็บไว ้ และการ
ค ้นหาข ้อมูล
• ประเภทของโครงสร ้างข ้อมูลแยกตามการ
จัดเก็บข ้อมูล
 แบบเชงิ เสน้ (Linear)
 แบบไม่เป็ นเชงิ เสน้ (Non Linear)
โครงสร ้างข้อมู ลแบบเชิงเส้น
การจัดเก็บข ้อมูลเรียงต่อกันไปทีละตัวใน
แนวเดียวกัน ให ้ข ้อมูลทัง้ หมดเรียงอยูใ่ นแนว
้
เสนตรงเดี
ยวกัน จากข ้อมูลตัวแรกไปถึงข ้อมูลตัว
สุดท ้าย หรือก็คอ
ื ข ้อมูลแต่ละตัวจะมีข ้อมูลทีอ
่ ยู่
ถัดไปเพียง 1 ตัวเท่านัน
้
• อาร์เรย์ (Array)
• สแตค (Stack)
• คิว (Queue)
• ลิงก์ลส
ิ ต์ (Linked List)
โครงสร ้างข้อมู ลแบบไม่เชิงเส้น
• โครงสร ้างข ้อมูลแบบนีจ
้ ะไม่มข
ี ้อจากัดในเรือ
่ ง
การนาข ้อมูลเข ้า-ออกจากโครงสร ้างข ้อมูล
เนือ
่ งจากข ้อมูลไม่ได ้เรียงต่อกันเป็ นแนว
เดียวกัน ทาให ้สามารถนาข ้อมูลเข ้าและออก
จากตาแหน่งใดๆก็ได ้
– โครงสร ้างข ้อมูลทีไ่ ม่มล
ี าดับของข ้อมูล ได ้แก่ เซต
ตารางแฮช
– โครงสร ้างข ้อมูลทีม
่ ล
ี าดับของข ้อมูล ได ้แก่ ทรี
กราฟ
ชนิ ดข้อมู ลนามธรรม (ADT : Abstract
Data Type)
ADT ไม่ใชโ่ ครงสร ้างข ้อมูล แต่เป็ นระดับ
แนวคิด ซงึ่ เปรียบเสมือนกับภาษากลางทีใ่ ชนิ้ ยาม
โครงสร ้างข ้อมูลโดยไม่ขน
ึ้ กับสถาปั ตยกรรมใดๆ
การนิยามดังกล่าวมีวัตถุประสงค์เพือ
่ ถ่ายทอดและ
นาเสนอโครงสร ้างข ้อมูลให ้ผู ้อืน
่ เกิดความเข ้าใจ
ตรงกัน ประกอบด ้วย 2 สว่ นทีส
่ าคัญ คือ
 สว่ นทีน
่ ย
ิ ามโครงสร ้างข ้อมูล
ั่ ทีใ่ ชจั้ ดการกับโครงสร ้างข ้อมูล
 สว่ นนิยามฟั งก์ชน
ความสัมพันธ ์ของชนิ ดข้อมู ล Logical
& Physical
การสร ้าง ADT
• Declaration of data
• Declaration of operations
• Encapsulation of data and operations
่ อนการทางานอยู ่
พอยน์เตอร ์ทีซ่
ภายในโครงสร ้าง
ตัวอย่างโครงสร ้างข้อมู ล Queue
ADT
• ดูในเอกสารประกอบ (ไฟล์ประกอบ)
6. การวัดผลอ ัลกอริทม
ึ
ขนาดของอินพุต (Input
Size)
่ ในการทางานเพือจ
่ ด
เวลาทีใช้
ั เรียงชุดตัวเลข (Running
Time)
10 ตัว
2 วินาที
100 ตัว
2.1 วินาที
1,000 ตัว
1 นาที
10,000 ตัว
15 นาที
่ ในการทางานเพือ
่
T(n) = จานวนเวลาทีใช้
จัดเรียงชุดข้อมู ล n ตัว
T(n) = O(n)
กราฟเปรียบเทียบเวลาในการ
ทางาน
Time (T) ms
6
Worst-case
5
Average-case ?
4
3
Best-case
Column1
2
1
0
A
B
C
D
Input (n)
E
F
G
่
คุณสมบัตข
ิ องอ ัลกอริทม
ึ ทีดี
• อัลกอริทม
ึ ทีด
่ ต
ี ้องมีความถูกต ้อง (Correctness)
• อัลกอริทม
ึ ทีด
่ ต
ี ้องง่ายต่อการอ่าน (Readability)
• อัลกอริทม
ึ ทีด
่ ต
ี ้องสามารถปรับปรุงได ้ง่ายใน
อนาคต (Ease of Modification)
้
• อัลกอริทม
ึ ทีด
่ ส
ี ามารถนากลับมาใชใหม่
ได ้
(Reusability)
ิ ธิภาพ (Efficiency)
• อัลกอริทม
ึ ทีด
่ ต
ี ้องมีประสท
่ าให้อ ัลกอริทม
ปั จจัยทีท
ึ มี
ประสิทธิภาพ
้
• เวลาทีใ่ ชในการท
างาน (Running Time)
้
• หน่วยความจาทีใ่ ชงาน
(Memory Requirement)
้
• เวลาทีใ่ ชในการคอมไพล์
โปรแกรม (Compile
Time)
้
ื่ สาร (Communication
• เวลาทีใ่ ชในการติ
ดต่อสอ
Time)
่
ปั จจ ัยส่งเสริมอืนๆ
•
•
•
•
•
•
ความเร็วของเครือ
่ งคอมพิวเตอร์
้
อัลกอริทม
ึ ทีอ
่ อกแบบเพือ
่ ใชงานส
าหรับงานนัน
้ ๆ
ิ ธิภาพของคอมไพเลอร์
ประสท
มีชด
ุ คาสงั่ อะไรบ ้างทีส
่ งั่ ให ้คอมพิวเตอร์ทา
ขนาดของหน่วยความจาในคอมพิวเตอร์
ขนาดของอินพุตมีปริมาณมากน ้อยเพียงไร
7. ประสิทธิภาพของอ ัลกอริทม
ึ
ิ ธิภาพของอัลกอริทม
ั่
• ประสท
ึ แทนด ้วยฟั งก์ชน
f(n) = efficiency
•
•
•
•
•
•
ลูปแบบเชงิ เสน้
ลูปแบบลอการิธมิค
้
ลูปแบบซอน
้
ลูปแบบซอนชนิ
ดลอการิธมิคเชงิ เสน้
้
ลูปแบบซอนชนิ
ดกาลังสอง
้
ลูปแบบซอนก
าลังสองชนิดขึน
้ ต่อกัน
ลู ปแบบเชิงเส้น (Linear Loops)
• เพิม
่ ค่าด ้วยการบวกหรือลดค่าด ้วยการลบภายใน
ลูปแบบคงที่ จนกระทั่งครบจานวนรอบ
for (i = 0; i < 1000; i++)
application code
• f(n) = n
for (i = 0; i < 1000; i += 2)
application code
• f(n) = n/2
ลู ปแบบลอการิธมิค (Logarithmic
Loops)
• เพิม
่ ค่าหรือลดค่าภายในลูปสองเท่าตัวด ้วยการ
คูณ (เพิม
่ ค่าสองเท่า) หรือการหาร (ลดค่าสอง
เท่า) Multiply Loops
Divide Loops
for (i = 1; i <= 1000; i *= 2)
application code
for (i = 1000; i >= 1; i /= 2)
application code
• multiply 2Iterations <= 1000
• divide 1000/2Iterations >= 1
• f(n) = [logn] หรือ [log2n]
ลู ปแบบซ ้อน (Nested Loops)
้
• ภายในลูปจะมีลป
ู ซอนอี
กลูปหนึง่
Iterations = outer loop iterations x inner loop iterations
• สามารถแบ่งออกเป็ น 3 รูปแบบย่อย
– Linear Logarithmic
– Quadratic
– Dependent Quadratic
ลู ปแบบซ ้อนชนิ ดลอการิธมิคเชิงเส้น
(Linear Logarithmic)
ั ้ ในเพิม
• ลูปชน
่ ค่าเป็ นสองเท่าด ้วยการคูณ
ั ้ นอกจะเป็ นแบบเชงิ เสนที
้ ม
ในขณะทีล
่ ป
ู ชน
่ ก
ี าร
เพิม
่ ค่าทีละหนึง่ ในลักษณะคงที่
for (i = 0; i < 10; i++)
for (j = 1; j <= 10; j *= 2)
application code
• 10log10
• f(n) = nlogn
ลู ปแบบซ ้อนชนิ ดกาลังสอง
(Quadratic)
ี วิ้ ต์ในจานวนรอบที่
• แต่ละลูปจะทาการเอ็กซค
เท่ากัน
for (i = 0; i < 10; i++)
for (j = 1; j < 10; j++)
application code
• f(n) = n2
้ อกัน
ลู ปแบบซ ้อนกาลังสองชนิ ดขึนต่
(Dependent Quadratic)
ั ้ ในจะขึน
• จานวนรอบการทางานของลูปชน
้ อยูก
่ บ
ั ลูป
ั ้ นอก
ชน
for (i = 0; i < 10; i++)
for (j = 0; j < i; j++)
application code
• 1 + 2 + 3 + … + 9 + 10 = 55
•
𝑛+1
2
• 𝑓 𝑛 =
𝑛+1
𝑛[ ]
2
8. สัญลักษณ์บกโอ
ิ๊
(Big-O
Notation)
ั่ (Growth Rates)
• อัตราการเติบโตของฟั งก์ชน
พิจารณาปั จจัยของขนาด
• Big-O มาจาก Order of Magnitude
ั่ จะนาไปใชพิ
้ จารณา
• อัตราการเติบโตของฟั งก์ชน
ั (Complexity) ของอัลกอริทม
ความซบ
ึ โดยหาก
จานวนข ้อมูล (n) มีปริมาณมากแล ้ว จะสง่ ผลต่อ
การเปลีย
่ นแปลงด ้านเวลาของอัลกอริทม
ึ นั น
้
อย่างไร
ตารางแสดงความแตกต่างของอ ัตรา
การเติบโต
่ั
ในแต่ละฟั งก ์ชน
O(f(n))
O(logn)
O(n)
O(nlogn)
O(n2)
O(n3)
O(2n)
O(n!)
f(50)
5.64
50
282
2500
12,500
1.126 x 1015
3.0 x 1064
f(100)
6.64
100
664
10,000
100,000
1.27 x 1030
9.3 x 10157
่
ซูโดโค้ดการคานวณคะแนนเฉลีย
1 set sum to zero
2 set i to zero
3 dowhile i < n
1 add 1 to i
2 add score(i) to sum
4 enddo
5 compute mean = sum / n
๊
แนวทางในการหาบิกโอ
• พิจารณาเพียงเทอมทีม
่ ค
ี า่ เลขยกกาลังมากทีส
่ ด
ุ
(Highest Exponent) เท่านัน
้
• ตัดเทอมสว่ นทีเ่ ป็ นค่าคงทีแ
่ ละตัวคูณออกไป
• บิ๊ กโอไม่ได ้มีจด
ุ ประสงค์เพือ
่ วัดเวลาการทางาน
้ บายขอบเขตของฟั งก์ชน
ั่ การ
• บิ๊ กโอจะใชอธิ
เติบโตทางเวลา
เกณฑ ์วัดผลประสิทธิภาพของบิก๊
่ ั างๆ
โอกับฟั งก ์ชนต่
Efficiency
Big-O
Iterations
Running Time
Logarithmic
O(logn)
14 ระดับไมโครวินาที
Linear
O(n)
10,000 ระดับวินาที
Linear Logarithmic O(n(logn)) 140,000 ระดับวินาที
Quadratic
O(n2)
10,0002 ระดับนาที
Polynomial
O(nk)
10,000k ระดับชวั่ โมง
Exponential
O(cn)
210,000
มากจนยากต่อการ
ั
ระบุได ้แน่ชด
Factorial
O(n!)
10,000!
มากจนยากต่อการ
ั
ระบุได ้แน่ชด
แนวทางในการวัดผลประสิทธิภาพ
• ขนาดของอินพุต
• ให ้ละเลยค่าคงทีท
่ อ
ี่ ยูใ่ นสภาพแวดล ้อมนั น
้
• สนใจเฉพาะกรณีเลวร ้ายสุดเท่านัน
้ (Worstcase)
• มองข ้ามขนาดของอินพุตทีม
่ จ
ี านวนน ้อยๆ
๊
9. ตัวอย่างการวิเคราะห ์บิกโอ
• การบวกแมทริกซ ์
– Quadratic Loop
– O(n2)
• การคูณแมทริกซ ์
– Cubic Loop
– O(n3)
สรุปท้ายบทที่ 2
• การคิดด้วยหลักนามธรรม ทาให ้เราสามารถคิด
ั ซอน
้
วิธก
ี ารแก ้ไขปั ญหาด ้วยการตัดทอนสงิ่ ทีซ
่ บ
หรือรายละเอียดปลีกย่อยทีไ่ ม่จาเป็ นออกไป ทา
ให ้ทุกสงิ่ ในโลกแห่งความเป็ นจริงดูงา่ ยดายขึน
้
ด ้วยการอธบายว่าสงิ่ สงิ่ นัน
้ ทาอะไร ไม่ต ้อง
มุง่ เน ้นในรายละเอียดว่าต ้องทางานอย่างไร
• ตัวแทนในการนาเสนออ ัลกอริทม
ึ มีอยูห
่ ลาย
่ ผังงาน หรือซูโดโค ้ด แต่ซ ู
ประเภทด ้วยกัน เชน
้
โดโค ้ดจัดเป็ นหนึง่ ในเครือ
่ งมือทีน
่ ย
ิ มใชในการ
สร ้างอัลกอริทม
ึ มากกว่า โดยซูโดโค ้ดมีรป
ู แบบ
สรุปท้ายบทที่ 2
• อ ัลกอริทม
ึ คือขัน
้ ตอนวิธท
ี ใี่ ชส้ าหรับแก ้ไข
ื่ ออกมาในรูปแบบของ
ปั ญหาโดยสามารถสอ
ภาษาพูดหรือภาษาธรรมชาติ
• การสร ้างประโยคคาสัง่ 3 รูปแบบ
่ ไม่สามารถแบ่งสว่ นข ้อมูล
• ข้อมู ลเชิงเดียว
• ข้อมู ลประกอบ สามารถแตกออกเป็ นฟิ ลด์ยอ
่ ย
ได ้
• ชนิ ดของข้อมู ล ประกอบด ้วย 2 สว่ น คือ กลุม
่
ั่
ของข ้อมูล และโอเปอเรชน
สรุปท้ายบทที่ 2
• โครงสร ้างข้อมู ล คือการรวมกันของข ้อมูล
เชงิ เดีย
่ วและเชงิ ประกอบเข ้าด ้วยกันเป็ นกลุม
่
ั พันธ์
พร ้อมกับกาหนดความสม
• ชนิ ดข้อมู ลนามธรรม ประกอบไปด ้วยกลุม
่
ประกาศข ้อมูลทีร่ วมกับตัวดาเนินการหรือโอเปอ
ั่ เข ้าด ้วยกันทาให ้เกิดเป็ นรูปร่างของ
เรชน
โครงสร ้าง
• ประสิทธิภาพของอ ัลกอริทม
ึ ปกติโดยทั่วไปมัก
ั่ ด ้วยการ
ถูกกาหนดมาในรูปแบบของฟั งก์ชน
พิจารณาจากจานวนของอิลเิ มนต์ทถ
ี่ ก
ู โปรเซส
สรุปท้ายบทที่ 2
•
•
•
•
•
•
•
Logarithmic Loop คือ f(n) = logn
Linear Loop คือ f(n) = n
Linear Logarithmic Loop คือ f(n) = logn
Quadratic Loop คือ f(n) = n2
Dependent Quadratic Loop คือ f(n) = n(n+1)/2
Cubic Loop คือ f(n) = n3
ิ ธิภาพของอัลกอริทม
ประสท
ึ สามารถเขียนให ้อยู่
ในรูปแบบอย่างง่าย
O(logn), O(n), O(n(logn)), O(n2), O(nk), O(cn), O(n!)
Any Questions ?