Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
ทดลองอาน
Pag
e
สารบญ
I
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม ....................................... 1
โครงสรางขอมลและอลกอรทมคออะไร ...............................................................................1ประโยชนของโครงสรางขอมลและอลกอรทม ..............................................................2
ผงงาน (Flowchart) .....................................................................................................3โคดรหสเทยม (Pseudo code) ........................................................................................5Abstract Data Type ....................................................................................................6ประเภทของอลกอรทม ...................................................................................................8สรปเนอหาบทท 1 .......................................................................................................10แบบฝกหดทายบทท 1 .................................................................................................10
บทท 2 การวเคราะหประสทธภาพของอลกอรทม (Performance Analysis) ... 13
คณตศาสตรพนฐานส�าหรบการวเคราะหประสทธภาพของอลกอรทม .....................................13การวดประสทธภาพอลกอรทม .......................................................................................14
การวเคราะหหนวยความจ�าทใชในการประมวลผล (Space Complexity Analysis) ........14การวเคราะหเวลาทใชในการประมวลผล (Time Complexity Analysis) .......................15
อตราการเตบโตของอลกอรทม (Algorithm Growth Rates) ..............................................17อตราการเตบโต Big-O (O) ..................................................................................17อตราการเตบโต Big-Omega (Ω) ..........................................................................18อตราการเตบโต Big-Theta ( ) ............................................................................19อตราการเตบโต Little-o (o) ................................................................................20อตราการเตบโต Little-omega ( ) .......................................................................20
เปรยบเทยบอตราการเตบโตของอลกอรทม .......................................................................21การนบตวด�าเนนการ (Operation Counts) ......................................................................21
นบตวด�าเนนการแบบคาคงท (Constant) ...............................................................21นบตวด�าเนนการแบบลปล�าดบ (Linear loops) .......................................................22นบตวด�าเนนการแบบลปลอการทม (Logarithmic loops) .........................................24นบตวด�าเนนการแบบลปซอน (Nested loops) ........................................................26
ฟงกชนอตราการเตบโตตามการวดประสทธภาพของอลกอรทม .............................................29การวเคราะห Best-case, Worst-case และ Average-case .............................................30สรปเนอหาบทท 2 .......................................................................................................30แบบฝกหดทายบทท 2 .................................................................................................31
บทท 3 อารเรย (Array) ................................................................ 33
รจกกบอารเรย (Array) ...............................................................................................33อารเรย 1 มต .............................................................................................................34
ประกาศอารเรย 1 มตแบบมขนาดเทากบจ�านวนขอมลทตองการจดเกบ .......................34ประกาศอารเรย 1 มตแบบก�าหนดขนาดอารเรย ......................................................35
Contents
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
II
อารเรยหลายมต ..........................................................................................................37การอางองขอมลในหนวยความจ�า ...................................................................................39
การอางองขอมลในหนวยความจ�าในภาษา Java .......................................................39การอางองขอมลในหนวยความจ�าภาษา C ...............................................................41
สรปเนอหาบทท 3 .......................................................................................................42แบบฝกหดทายบทท 3 .................................................................................................42
บทท 4 ลงคลสต (Link-list)........................................................... 45
ลงคลสตทศทางเดยว (Singly Link-list) ........................................................................45การสรางและใชงานลงคลสตทศทางเดยวในภาษา Java .............................................46การสรางและใชงานลงคลสตทศทางเดยวในภาษา C ..................................................48
การจดการลงคลสตทศทางเดยว .....................................................................................50การสรางสวนหวของลงคลสตทศทางเดยว ...............................................................50การคนหาต�าแหนงโหนดทตองการลบ หรอแทรกโหนดในลงคลสตทศทางเดยว ...............51การลบโหนดในลงคลสตทศทางเดยว .......................................................................53การเพมโหนดในลงคลสตทศทางเดยว .....................................................................55
การน�าขอมลในลงคลสตทศทางเดยวออกมาแสดงผล ..........................................................58การเปลยนโครงสรางลงคลสตทศทางเดยว ........................................................................58
การอางองสวนทาย (Tail References) .................................................................58ดมมโหนด (Dummy Node) .................................................................................59ลงคลสตแบบวงกลม (Circular Linked-list)..........................................................59
ตวอยางการสรางลงคลสตทศทางเดยว ............................................................................61ลงคลสตแบบสองทศทาง (Doubly Link-list) ..................................................................65
โครงสรางลงคลสตแบบสองทศทางในภาษา Java .....................................................66โครงสรางลงคลสตแบบสองทศทางในภาษา C ..........................................................68
การจดการลงคลสตแบบสองทศทาง ................................................................................69การคนหาต�าแหนงโหนดในลงคลสตแบบสองทศทาง ..................................................69การลบโหนดในลงคลสตแบบสองทศทาง ..................................................................70การเพมโหนดในลงคลสตแบบสองทศทาง ................................................................72
ตวอยางการสรางลงคลสตแบบสองทศทาง .......................................................................75การน�าลงคลสตไปใชงาน................................................................................................80สรปเนอหาบทท 4 .......................................................................................................82แบบฝกหดทายบทท 4 .................................................................................................82
บทท 5 สแตก (Stack) .................................................................. 85
ตวอยางการน�าหลกการของสแตกไปใชงาน (Simple Application of the Stack) ...................86เครองมอทใชในการสรางสแตก .......................................................................................87การสรางสแตกดวยโครงสรางอารเรย ...............................................................................88
สรางสแตกดวยโครงสรางอารเรยในภาษา Java ........................................................88สรางสแตกดวยโครงสรางอารเรยในภาษา C .............................................................90
การสรางสแตกดวยโครงสรางลงคลสต .............................................................................93สรางสแตกดวยโครงสรางลงคลสตในภาษา Java ......................................................93สรางสแตกดวยโครงสรางลงคลสตในภาษา C ...........................................................95
ทดลองอาน
Pag
e
สารบญ
III
การน�าสแตกไปใชงาน ...................................................................................................97การเปลยนรปแบบ infix ใหเปน postfix .................................................................97การค�านวณทางคณตศาสตรจากรปแบบของ Postfix ...............................................100
สรปเนอหาบทท 5 .....................................................................................................103แบบฝกหดทายบทท 5 ...............................................................................................104
บทท 6 คว (Queue) .................................................................. 105
การสรางควดวยโครงสรางลงคลสต ...............................................................................107การสรางควดวยโครงสรางลงคลสตแบบทศทางเดยว ...............................................107การสรางควดวยโครงสรางลงคลสตแบบวงกลม ......................................................107
การเพมขอมลในควโครงสรางลงคลสตแบบวงกลม ...........................................................108การเพมขอมลในควในกรณทควไมมขอมล ..............................................................108การเพมขอมลในควในกรณทควมขอมล .................................................................108
การน�าขอมลออกจากควโครงสรางลงคลสตแบบวงกลม ....................................................110อลกอรทมจดการควโครงสรางลงคลสตแบบวงกลม ..........................................................110
การจดการควโครงสรางลงคลสตแบบวงกลมดวยภาษา Java ....................................110การจดการควโครงสรางลงคลสตแบบวงกลมดวยภาษา C .........................................113
การสรางควดวยโครงสรางอารเรย .................................................................................114การคนหาต�าแหนงในการเพมขอมลในควอารเรยแบบวงกลม .....................................116การคนหาต�าแหนงในการน�าขอมลออกจากควอารเรยแบบวงกลม ..............................116การตรวจสอบควอารเรยแบบวงกลมวาควเตมหรอคววางเปลา ..................................117
อลกอรทมจดการควโครงสรางอารเรยแบบวงกลม ............................................................117การจดการควโครงสรางอารเรยแบบวงกลมดวยภาษา Java .....................................117การจดการควโครงสรางอารเรยแบบวงกลมดวยภาษา C ..........................................119
การน�าควไปใชงาน .....................................................................................................120สรปเนอหาบทท 6 .....................................................................................................121แบบฝกหดทายบทท 6 ...............................................................................................121
บทท 7 ทร (Tree) ..................................................................... 123
รจกกบทร (Tree) .....................................................................................................123คณสมบตเฉพาะของทร (Terminology of Tree) ...................................................124
รจกกบไบนารทร (Binary Tree) .................................................................................125คณสมบตของไบนารทร ......................................................................................125
การสรางและการจดการไบนารทร .................................................................................126การสรางไบนารทรดวยโครงสรางอารเรย ...............................................................128การสรางไบนารทรดวยโครงสรางลงคลสต ..............................................................130
การจดการขอมลในไบนารทร........................................................................................130การคนหาขอมลในไบนารทร ................................................................................131การเพมโหนดขอมลในไบนารทร ...........................................................................132การทองเขาไปในไบนารทร ..................................................................................133การลบโหนดขอมลในไบนารทร ............................................................................142
รจกกบ AVL Tree .....................................................................................................144การสราง AVL Tree ..................................................................................................146
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
IV
การเพมขอมลใน AVL Tree ........................................................................................146การปรบไบนารทรใหสมดลดวยการหมน 1 ครงใน AVL Tree ...................................146การปรบไบนารทรใหสมดลดวยการหมน 2 ครงใน AVL Tree ...................................147
การลบโหนดใน AVL Tree ..........................................................................................150การปรบไบนารทรใหสมดลดวยการหมน 1 ครง หลงจากลบโหนดใน AVL Tree ..........151การปรบไบนารทรใหสมดลดวยการหมน 2 ครง หลงจากลบโหนดใน AVL Tree ..........151
รจกกบทรสมดลแบบ 2-3 Trees .................................................................................153กฎของ 2-3 Trees ..........................................................................................154
โครงสรางขอมล 2-3 Trees ........................................................................................155การทองเขาไปใน 2-3 Trees .......................................................................................155การคนหาขอมลใน 2-3 Trees ....................................................................................156การเพมขอมลใน 2-3 Trees .......................................................................................157
สรปขนตอนการเพมขอมลในต�าแหนงโหนดใบของ 2-3 Trees ..................................159สรปขนตอนการเพมขอมลในต�าแหนงโหนดแมของ 2-3 Trees .................................160สรปขนตอนการเพมขอมลในต�าแหนงโหนดรากของ 2-3 Trees ................................160
การลบขอมลใน 2-3 Trees ........................................................................................162สรปขนตอนวธในการลบขอมลใน 2-3 Trees ........................................................164
รจกกบทรสมดลแบบ 2-3-4 Trees .............................................................................167กฎของ 2-3-4 Trees .......................................................................................168
โครงสรางขอมล 2-3-4 Trees ....................................................................................169การเพมขอมลใน 2-3-4 Trees ...................................................................................170
สรปการเพมขอมลใน 2-3-4 Trees ....................................................................172การลบขอมลใน 2-3-4 Trees ............................................................................172
รจกกบ red-black Tree ............................................................................................173การคนหาและการทองเขาไปใน red-black Tree ............................................................174การเพมโหนดใน red-black Tree ................................................................................175
การปรบโครงสรางโหนดทเปนสแดงทงค ................................................................175การลบโหนดใน red-black Tree .................................................................................178รจกกบ B-Tree ........................................................................................................181การเพมโหนดใน B-Tree ............................................................................................182การลบโหนดใน B-Tree ..............................................................................................185การวเคราะห B-Tree .................................................................................................187สรปเนอหาบทท 7 .....................................................................................................187แบบฝกหดทายบทท 7 ...............................................................................................188
บทท 8 แฮช (Hash) .................................................................. 191
แฮชฟงกชน (Hash functions) ...................................................................................192การเลอกหลก (Selection digits) .......................................................................192การบวกหลก (Folding) ....................................................................................193การหารเอาเศษ (Modulate arithmetic) ..............................................................193การเปลยนขอความเปนตวเลข (Converting a character string to an integer) .....193
การแกปญหาการชนกนของแฮชคย (Resolving Collision) ..............................................194แกปญหาการชนกนดวยการหาแอดเดรสถดไปทใกลเคยงทสด ....................................195
ทดลองอาน
Pag
e
สารบญ
V
การแกปญหาการชนกนดวยวธการปรบโครงสรางตารางแฮช .....................................197สรปเนอหาบทท 8 .....................................................................................................199แบบฝกหดทายบทท 8 ...............................................................................................199
บทท 9 ไทร (Tries) .................................................................... 201
Simple Tries ...........................................................................................................202Full Tries ...............................................................................................................205Compressed Tries ...................................................................................................207สรปเนอหาบทท 9 .....................................................................................................209แบบฝกหดทายบทท 9 ...............................................................................................209
บทท 10 ลำาดบความสำาคญของควและฮพ (Priority Queue and Heap) ... 211
ล�าดบความส�าคญของคว (Priority Queue) ..................................................................211คาของล�าดบความส�าคญ (Priority value) ...........................................................211
เครองมอทใชสรางควของล�าดบความส�าคญ ....................................................................212โครงสรางอารเรย ..............................................................................................212โครงสรางลงคลสต ............................................................................................213โครงสรางไบนารทร ...........................................................................................213
ฮพ (Heap) ..............................................................................................................213การสรางขอมลในฮพ .........................................................................................214การลบคยในฮพ ................................................................................................214การเพมคยในฮพ ...............................................................................................216โครงสรางคลาสฮพ ............................................................................................218
สรปเนอหาบทท 10 ...................................................................................................220แบบฝกหดทายบทท 10 .............................................................................................220
บทท 11 การจดเรยงและการคนหาขอมล .......................................... 221
อลกอรทมรบขอมล ....................................................................................................221การจดเรยงขอมลแบบ Selection sort .........................................................................223
วเคราะหหาประสทธภาพการจดเรยงขอมลแบบ Selection sort ..............................225การจดเรยงขอมลแบบ Bubble sort.............................................................................226
วเคราะหหาประสทธภาพการจดเรยงขอมลแบบ Bubble sort ..................................227การจดเรยงขอมลแบบ Insertion sort ..........................................................................229
วเคราะหหาประสทธภาพการจดเรยงขอมลแบบ Insertion sort ...............................230การจดเรยงขอมลแบบ Merge sort .............................................................................231
วเคราะหประสทธภาพการจดเรยงขอมลแบบ Merge sort .......................................234การจดเรยงขอมลแบบ Quick sort ...............................................................................236
วเคราะหประสทธภาพการจดเรยงขอมลแบบ Quick sort ........................................238การจดเรยงขอมลแบบ Radix sort ...............................................................................240
วเคราะหการจดเรยงขอมลแบบ Radix sort ..........................................................242การจดเรยงขอมลแบบ Heap sort ...............................................................................242
วเคราะหการจดเรยงขอมลแบบ Heap sort ..........................................................245การจดเรยงขอมลแบบ Shell sort ...............................................................................246
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
VI
วเคราะหการจดเรยงขอมลแบบ Shell sort ..........................................................248การคนหาขอมลแบบล�าดบ (Sequential search หรอ Linear search) .............................250
วเคราะหการคนหาขอมลแบบล�าดบ .....................................................................250การคนหาขอมลดวย Binary search หรอ Half-Interval search ....................................251
วเคราะหการคนหาขอมลแบบไบนาร ....................................................................253สรปเนอหาบทท 11 ...................................................................................................254แบบฝกหดทายบทท 11 .............................................................................................254
บทท 12 กราฟ (Graph) ............................................................. 255
โครงสรางของกราฟ ....................................................................................................255การสรางกราฟ ..........................................................................................................258
เมตรกซประชด .................................................................................................258รายการประชด .................................................................................................259
การทองเขาไปในกราฟ (Graph Traversals) .................................................................259Depth-first Search .........................................................................................260Breadth-First Search.....................................................................................261
การน�ากราฟไปใชงาน ..................................................................................................262Topological sorting ........................................................................................263Possible Spanning Tree ..................................................................................264DFS Spanning Tree ........................................................................................265BFS Spanning Tree ........................................................................................266Minimum Spanning Tree .................................................................................266Shortest Paths ..............................................................................................268Kruskal’s Algorithm .......................................................................................271Dijkstra’s Algorithm .......................................................................................272
สรปเนอหาบทท 12 ...................................................................................................276แบบฝกหดทายบทท 12 .............................................................................................276
ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
1
หนงสอเลมนเปนหนงสอทสอนในเรองโครงสรางขอมลและอลกอรทม มงเนนในเรองวธการและ
ขนตอนการแกไขปญหาตางๆ โดยใชคณสมบตและความสามารถของโครงสรางขอมล ซงถอไดวาเปนรายวชา
หลกในการเรยนในสาขาคอมพวเตอร ดงนน ผอานควรศกษาเนอหาและตวอยางตางๆ ในหนงสอใหเขาใจ เพอ
ใชเปนพนฐานในการพฒนาโปรแกรมตอไป
โครงสรางขอมลและอลกอรทมคออะไร
โครงสรางขอมล (Data Structure) คอ การจดการขอมลในหนวยความจ�าภายในเครอง
คอมพวเตอร หรอในบางครงเปนการจดการขอมลในดสก ใหมความสมพนธกนภายในกลมขอมลใหมรปแบบและขอ
ก�าหนดทชดเจนในการก�าหนดคณสมบตเพอสรางความสมพนธภายในกลมขอมล รปแบบการเกบขอมลทอยในรป
แบบโครงสรางขอมล เชน อารเรย (Array), ลงคลสต (Link-list), สแตก (Stack), ไบนารทร (Binary tree) เปนตน
อลกอรทม (Algorithm) หรอเรยกอกอยางวา ขนตอนวธ เปนวธการแสดงล�าดบขนตอนในการ
ท�างานหรอการแกไขปญหาอยางใดอยางหนง เชน การก�าหนดขนตอนเพอแกไขปญหาการจดเรยงเอกสารใน
แฟมขอมล หรอการก�าหนดอลกอรทมในการคนหาขอมลในแฟมขอมลทงหมด เปนตน
อลกอรทมหรอขนตอนวธเปนสงทพบไดในชวตประจ�าวน เชน ขนตอนการเตมเงนในโทรศพทมอถอ
ผานตเตมเงนอตโนมต, ขนตอนการใชงานตกดเงนอตโนมต (ATM) เพอท�าธรกรรมทางการเงน เปนตน
รจกกบโครงสรางขอมลและอลกอรทม
01
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
2
ตวอยางท 1.1 แสดงอลกอรทมหรอขนตอนวธการใชตกดเงนอตโนมต (ATM) เพอโอนเงนดงน
1. ใสบตร ATM
2. ปอนรหสผานของบตร ATM
3. ในหนาบรการ เลอกบรการรายการโอนเงน
4. เลอกรปแบบการโอนเงนวาจะโอนเงนเขาบญชอนธนาคารเดยวกน หรอธนาคารอน
5. กดหมายเลขบญชทตองการโอนเงนเขาบญช
6. ตรวจสอบเลขทบญชทปอนถกตองหรอไม ถาถกตองใหกดตกลง
7. กรอกจ�านวนเงนทตองการโอนเงน แลวกดตกลง
8. ชอบญชและจ�านวนเงนทตองการโอนจะปรากฏขนเพอยนยนความถกตองในการโอนเงน เมอตรวจสอบบญช
และจ�านวนเงนถกตอง ใหกดตกลง เปนการเสรจสนการโอนเงน
9. รบบตร ATM
10. รบใบสลปการโอนเงน
ตวอยางท 1.2 แสดงอลกอรทมการหาขอมลในอารเรยขนาด n ขอมลดงน
1. รบขอมลตวเลขทตองการคนหา
2. เปรยบเทยบขอมลในอารเรยทละตวตงแตขอมลในต�าแหนงท 0 จนถงต�าแหนงท n-1
3. ถาขอมลในอารเรยตรงกบขอมลทตองการคนหา แสดงวาเจอขอมล และจบการคนหาขอมล
4. ถาเปรยบเทยบขอมลจนถงต�าแหนงท n-1 แลวไมพบขอมลตวใดในอารเรยเลย แสดงวาไมมขอมลทตองการ
คนหาในอารเรย
ประโยชนของโครงสรางขอมลและอลกอรทม
โครงสรางขอมลและอลกอรทม เปนวธการจดการกบขอมลทท�าใหคอมพวเตอรสามารถจดการกบขอมล
เพอน�ามาใชงานไดอยางมประสทธภาพ ตวอยางเชน
|การจดเกบขอมลจ�านวนมากในรปแบบของโครงสรางขอมลทเหมาะสม จะท�าใหสามารถน�าขอมล
ไปใชไดอยางมประสทธภาพ โดยใชทรพยากรทมไดอยางคมคาทสด (ใชพนทหนวยความจ�านอย
ทสด) อกทงยงใชเวลาในการประมวลผลนอยทสดดวย สงผลใหคอมพวเตอรท�างานเรวขนนนเอง
|การอานขอมลเพอใชในการประมวลผล คอมพวเตอรจะอานขอมลมาเกบในหนวยความจ�าหลก
(หนวยความจ�าแรม) และในกรณทขอมลมขนาดมากกวาขนาดของหนวยความจ�า คอมพวเตอรจะ
ใชโครงสรางขอมลและอลกอรทมเขามาชวยในการจดการกบขอมลเหลานน เพอใหสามารถจดสรร
หนวยความจ�าไดอยางเหมาะสมและสามารถท�างานไดอยางตอเนอง
|การพฒนาโปรแกรมโดยใชโครงสรางขอมลและอลกอรทมทเหมาะสม สามารถเพมประสทธภาพการ
ท�างานของโปรแกรมไดเชนกน (ใชหนวยความจ�านอยและประมวลผลไดรวดเรว)
ทงนประโยชนของโครงสรางขอมลและอลกอรทมทกลาวมาเปนเพยงตวอยางเลกนอยเทานน ซง
โครงสรางขอมลและอลกอรทมยงสามารถประยกตเพอใชงานไดอกมากมาย ไมวาจะเปนการเรยงล�าดบขอมล
การคนหาขอมล เปนตน
ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
3
ผงงาน (Flowchart)
ผงงาน หรอเรยกวา โฟลวชารต (Flowchart) เปนเครองมอทใชออกแบบระบบงานดวยสญลกษณ
ชวยใหมโครงสรางของระบบงานทเปนล�าดบขนตอนและเขาใจไดงาย
การน�าผงงานมาใชในการออกแบบโปรแกรม สามารถตรวจสอบไดวามล�าดบขนตอนการท�างาน
ถกตองหรอไม และสามารถเปลยนแปลงแกไขขอผดพลาดของระบบงานภายในผงงานไดงายกวาการหาขอ
ผดพลาดทเกดจากการเขยนโปรแกรม อกทงยงชวยลดความสบสนในการพฒนาโปรแกรมอกดวย
วตถประสงคทส�าคญทสดในการน�าผงงานมาเปนเครองมอในการพฒนาโปรแกรมคอ เพอใหบคคล
อนสามารถท�าความเขาใจถงล�าดบขนตอนการท�างานของโปรแกรม และผลลพธทไดจากการท�างานของ
โปรแกรมทพฒนาขนได
สญลกษณทน�ามาใชในการเขยนผงงานมอย 8 สญลกษณดงน
สญลกษณ ความหมายสญลกษณในการใชงานในผงงาน
Terminator
จดเรมตนและจดสนสดของโปรแกรม
Process
การประมวลผลหรอการค�านวณของโปรแกรม
Data
รบขอมลเขามาในโปรแกรม หรอสงคาออกไปจากโปรแกรม
Decision
ตรวจสอบเงอนไข แลวเลอกการท�างานของโปรแกรม
Document
แสดงผลออกทางเอกสาร
On-page reference
จดเชอมตอหลายเสนทางของโปรแกรมใหเหลอการเขามาเพยงเสนทางเดยว
Off-page reference
ขนหนาใหมในกรณทผงงานมความยาวเกนกวาทจะแสดงพอในหนงหนา
ลกศรแสดงทศทางการท�างานของโปรแกรมและการไหลของขอมลทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
4
ตวอยางท 1.3 แสดงผงงานขนตอนการใชตกดเงนอตโนมต (ATM) เพอโอนเงนดงน
ตวอยางท 1.4 แสดงผงงานอลกอรทมคนหาขอมลในอารเรยขนาด n ขอมลดงน
รปท 1-1
ผงงานขนตอน
การใชตกดเงน
อตโนมต (ATM)
เพอโอนเงน
รปท 1-2
ผงงานอลกอรทม
คนหาขอมลใน
อารเรยขนาด n
ขอมล
ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
5
โคดรหสเทยม (Pseudo code)
โคดรหสเทยม (Pseudo code) เปนโครงสรางรหสทรวมทงภาษาเขยนกบภาษาคอมพวเตอร
เขาไวดวยกน เพอใชในการอธบายโครงสรางและล�าดบขนตอนการท�างานของโปรแกรมโดยไมอางองภาษา
คอมพวเตอรภาษาใดภาษาหนง เพอเปนสอกลางแทนการเขยนดวยโคดโปรแกรม (Code Program) ดงตวอยาง
ตอไปน
ตวอยางท 1.5 แสดง Pseudo code การคนหาขอมลในอารเรยดงน
123456789
+searching(in theArray:arrayType,in KeySearch:keyType,in MaxData:integer):boolean for (n = 0 to MaxData-1){ if (theArray[n] == KeySearch){ data is found data then return true } } if (n == MaxData-1){ data is not found then return false }
อธบายการท�างานของโปรแกรม
บรรทดท 1 ประกาศฟงกชนหรอเมธอด searching โดยก�าหนดใหมตวแปรอนพต 3 ตวคอ
|theArray เปนขอมลทงหมดทเกบในอารเรย
|KeySearch เปนขอมลทตองการคนหา
|MaxData เปนขนาดของอารเรยทเกบขอมล
และก�าหนดใหสงคนคาผลการคนหาขอมลเปนขอมลชนด boolean
บรรทดท 2 วนลปตงแตตวแปร n เทากบ 0 จนถงคาในตวแปร MaxData-1
บรรทดท 3-4 ถาขอมลใน theArray ต�าแหนงท n เทากบคาขอมล KeySearch แสดงวาเจอ
ขอมลทตองการคนหา ใหฟงกชนคนคาเปน true
บรรทดท 7-8 ถาคาตวแปร n เทากบ MaxData แสดงวาไมพบขอมลในอารเรยใหคนคาเปน
false
ตวอยางท 1.6 แสดง Pseudo code แสดงผลการเรยน (Grade) จากคะแนนทรบเขามาดงน
12345678910111213141516
+showgrade(in score:double) if (score >= 80) output "A" else if (score >= 75) output "B+" else if (score >= 70) output "B" else if (score >= 65) output "C+" else if (score >= 60) output "C" else if (score >= 55) output "D+" else if (score >= 50) output "D" else output "F"
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
6
อธบายการท�างานของโปรแกรม
บรรทดท 1 ประกาศฟงกชนหรอเมธอด showgrade ก�าหนดใหรบคาคะแนนไวในตวแปร
บรรทดท 2-3 ถา score มากกวาเทากบ 80 ใหแสดงเกรด “A”
บรรทดท 4-5 แตถา score มากกวาเทากบ 75 ใหแสดงเกรด “B+”
บรรทดท 6-7 แตถา score มากกวาเทากบ 70 ใหแสดงเกรด “B”
บรรทดท 8-9 แตถา score มากกวาเทากบ 65 ใหแสดงเกรด “C+”
บรรทดท 10-11 แตถา score มากกวาเทากบ 60 ใหแสดงเกรด “C”
บรรทดท 12-13 แตถา score มากกวาเทากบ 55 ใหแสดงเกรด “D+”
บรรทดท 14-15 แตถา score มากกวาเทากบ 50 ใหแสดงเกรด “D”
บรรทดท 16 ถา score นอยกวา 50 ใหแสดงเกรด “F”
Abstract Data Type
Abstract Data Type หรอเรยกวา ADT เปนการประกาศถงคณสมบตของโครงสรางขอมลและกลม
ตวด�าเนนการทกระท�ากบโครงสรางขอมล
คณสมบตของโครงสรางขอมลทก�าหนดใน ADT เปนการแสดงถงลกษณะของโครงสรางขอมลทน�ามา
ใชงาน และกลมตวด�าเนนการจะเปนฟงกชนทก�าหนดการท�างานของโปรแกรมทกระท�ากบโครงสรางขอมล ซง
แตละกลมตวด�าเนนการจะท�างานอยางอสระไมเกยวเนองกน (ไมมการสงคาระหวางกลมตวด�าเนนการ) และม
ลกษณะการท�างานทชดเจน
รายการ ADT คอ การรวบรวมล�าดบการท�างานทชดเจน โดยใชตวเลขในการอางองต�าแหนงดงตวอยาง
ตอไปน
ตวอยางท 1.7 รายการ ADT แสดงการจดการรายการสงของในรานคาดงน
1. Create an empty list. (สรางรายการวางเปลา)
2. Determine whether a list is empty. (สนใจรายการทวางเปลา)
3. Determine the number of items on a list. (สนใจตวเลขสงของในรายการ)
4. Add an item at a given position in the list. (เพมสงของในต�าแหนงทใหมาในรายการ)
5. Remove the item at a given position in the list. (ลบสงของในต�าแหนงทใหมาในรายการ)
6. Remove all the items from the list. (ลบสงของทงหมดในรายการ)
7. Retrieve (get) the item at a given position in the list. (น�าสงของกลบคนมาในต�าแหนงทใหมาใน
รายการ)ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
7
จากรายการ ADT น�าไปเขยนเปน Pseudo code ไดดงน
+createList()
//สรางรายการวางเปลา
+isEmpty():boolean{query}
//สนใจรายการทวางเปลา
+size():integer{query}
//คนคาตวเลขรายการทงหมด
+add(in index:integer, in item:ListItemType)
//เพมขอมล (item) ในต�าแหนง index ในรายการ ถา 0 <= index < size()
//ถา index = size()+1 ไมเพมขอมลในรายการเนองจากรายการเตม
+remove(in index:integer)
//ลบขอมลในต�าแหนงของ index ในรายการ ถา 0 <= index < size()
//ถา index < 0 ไมลบขอมลในรายการเนองจากรายการวางเปลา
+removeAll()
//ลบขอมลทงหมดในรายการ
+get(in index:ListItemType){queue}
//คนคา item ในต�าแหนง index ของรายการ ถา 0 <= index < size()
//ใหเลอน index ไปทางซาย (ลดคา index ลงหนงต�าแหนง) และไมคนคาถา index เกนขอบเขตทก�าหนด
การออกแบบ ADT เปนการพฒนามาจากกระบวนการแกไขปญหา ตวอยางเชน ตองการตรวจสอบ
วนหยดทงหมดในหนงป ซงมวธการคอ ดปฏทนวามวนหยดวนใดบางในหนงป ดวยการตรวจสอบทละวนวา
วนใดเปนวนหยด เปนตน
เพอใหเกดความเขาใจใหศกษาตวอยางตอไปน
ตวอยางท 1.8 การออกแบบรายการ ADT จากฟงกชนตรวจสอบวนหยดทมค�าสงดงน
+listHolidays(in year:integer)
//แสดงวนหยดทงหมดในหนงปของ year ใหมา
date = วนทของวนแรกของป
while(date ไมใชวนแรกของปถดไป)
if(date = วนหยด){
write(date + “คอวนหยด”)
} //end if
date = วนทถดไป
}//end whileทด
ลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
8
จากฟงกชนสามารถเขยนในรปแบบ ADT เพอใชในการแกไขปญหาการตรวจสอบวนหยดในหนง
ปไดดงน
1. Determine the date of the first day of a given year. (สนใจวนแรกของปทใหมา)
2. Determine whether a date is before another date. (สนใจวนทในการตรวจสอบกอนวนทอน )
3. Determine whether a date is a holiday. (สนใจวนททเปนวนหยด)
4. Determine the date of the day that follows a given date. (สนใจวนทถดไปของวนทก�าหนดใหมา)
จาก ADT การตรวจสอบวนหยดในหนงปน�าไปเขยนเปน Pseudo code ไดดงน
+firstDay(in year:integer):Date{query}//คนคาวนแรกของปทใหมา+isBefore(in date1:Date,date2:Date):boolean{query}//คนคา true ถา date1 เปนวนทมากอน date2 นอกเหนอจากนนใหคนคา false+isHoliday(in aDate:Date):boolean{query}//คนคา true ถา aDate เปนวนหยด นอกเหนอจากนนใหคนคา false+nextDay(in aDate:Date):Date//คนคาวนทถดไปจากวนทก�าหนดใหมาในตวแปร aDate
ดงนน การออกแบบ ADT จะเปนการแสดงขอมลและการเลอกตวด�าเนนการใหเหมาะสมกบการแกไข
ปญหา โดยทตวด�าเนนการนนมการท�างานทอสระในการก�าหนดคณสมบตของ ADT
ประเภทของอลกอรทม
การแยกประเภทของอลกอรทมเหมอนกบการแยกประเภทขนตอนการแกไขปญหา โดยอธบายการ
ท�างานของอลกอรทมแตละประเภทไดดงน
|Brute Force algorithm เปนการแกไขปญหาโดยสงใหท�างานไปเรอยๆ จนกระทงไดค�าตอบ
ของทกปญหา การแกไขในรปแบบนไมเหมาะส�าหรบแกไขปญหาทมขอมลจ�านวนมาก ตวอยาง
อลกอรทมทใชหลกการ Brute Force algorithm เชน การจดเรยงขอมลแบบ Bubble sort, Selection
sort เปนตน
|Divide and Conquer algorithm เปนอลกอรทมทมหลกการคดโดยแยกปญหาออกเปนสองสวน
คอ สวนทหนงแบงปญหาออกเปนสวนเลกๆ แลวแกไขปญหาในสวนเลกๆ นนกอน และอกสวน
น�าผลทไดจากการแกไขปญหาในสวนเลกๆ กลบมารวมกนใหม ตวอยางอลกอรทมทใชหลกการ
Divide and Conquer algorithm เชน การจดเรยงขอมลแบบ Quick sort, Merge sort เปนตน
|Decrease and Conquer algorithm เปนอลกอรทมทแกไขปญหาดวยการลดขนาดของปญหา
ลง และเลอกขนาดของกลมปญหาทตองการแกไขปญหา โดยละเวนปญหาบางสวนไวกอนเพอ
จะแกปญหาทมขนาดเลกลงกวาเดม เนองจากการแกไขปญหาทมขนาดเลกกวาจะสามารถแกไข
ปญหาไดงายกวา ตวอยางอลกอรทมทใชหลกการ Decrease and Conquer algorithm เชน การ
คนหาขอมลแบบไบนาร เปนตน
|Transform and Conquer algorithm เปนการแกไขปญหาดวยการเปลยนรปแบบของ
ปญหาทตองการแกไขใหอยในรปแบบอนกอน ดวยคาดหวงวาเมอเปลยนรปแบบของปญหาแลว
จะสามารถแกไขปญหาไดงายและรวดเรวขน ตวอยางในการเปลยนโครงสรางขอมลกอนการแกไข
ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
9
ปญหา เชน น�าขอมลทตองการคนหามาจดเรยงขอมลกอนทจะคนหา เพอใหสามารถใชอลกอรทม
ทมประสทธภาพคนหาขอมลได แทนทจะคนหาขอมลทละตวจากขอมลทกระจดกระจาย
|Greedy algorithm หรออลกอรทมแบบละโมบ เปนอลกอรทมทมลกษณะของการแกไขปญหา
ดวยการเพมประสทธภาพของการแกไขปญหาใหเหมาะสมทสด (Optimization problems) ซง
เปนรปแบบอลกอรทมทพจารณาค�าตอบทดทสดและคมคาทสดในการแกไขปญหานนๆ ตวอยาง
อลกอรทมทใชหลกการ Greedy algorithm ในการแกไขปญหา เชน ปญหาการทอนเหรยญคอ
เลอกทอนเหรยญในหนวยทมขนาดใหญทสดกอน เปนตน
|Dynamic programming algorithm หรออลกอรทมโปรแกรมพลวต เปนอลกอรทมทม
ลกษณะของการแกไขปญหาดวยการแบงปญหาเปนสวนเลกๆ แลวน�าผลของปญหาเลกๆ ทดทสด
น�ามาแกไขปญหาใหญทเรยกกนวา การแกไขปญหาจากลางขนบน (Bottom-up approach)
ตวอยางอลกอรทมทใชหลกการ Dynamic programming algorithm ในการแกไขปญหา เชน การ
หาคาตวเลข Fibonacci เปนตน
|Backtracking algorithm หรออลกอรทมยอนรอยถอยหลง เปนอลกอรทมคนหาเสนทาง
ทกเสนทางทเปนไปได เพอหาค�าตอบของปญหาทละสวนยอยวา ค�าตอบนนเปนค�าตอบทถก
ตองหรอไม แตถาค�าตอบนนไมใชสวนหนงของค�าตอบจะถอยหลงกลบมาจดเดม และยกเลก
ค�าตอบนนแลวคนหาค�าตอบใหม ตวอยางอลกอรทมทใชหลกการ Backtracking algorithm เชน
การก�าหนดสใหกบเมองในแผนท, การคดความเปนไปไดทงหมดของการเดนหมากกระดาน เปนตน
|Branch and bound algorithms เปนอลกอรทมทเพมประสทธภาพในการแกไขปญหาดวย
การน�าโครงสรางทร (Tree) มาเกบปญหายอยๆ โดยทปญหาหลกจะอยในต�าแหนงบนสดของทร
คอ โหนดราก (root node) และในแตละโหนดจะแกไขปญหาของตวเอง และถาแกปญหาถกตอง
จะใชผลนนเปนขอมลในการแกไขปญหาทงหมด แตถาการแกไขปญหาไมถกตองใหแบงปญหาออก
เปนสองโหนดยอย เกบไวในต�าแหนงโหนดลกของโหนดทแกไขปญหาไมถกตอง แลวกลบไปท�า
ใหม จนกระทงทกโหนดยอยในทรสามารถแกไขปญหาไดทกโหนด ตวอยางอลกอรทมทใชหลกการ
Branch and bound algorithms มาใชในการแกไขปญหา เชน ปญหาในการหาเสนทางทเหมาะ
สมใหกบพนกงานขายสนคาใหสามารถเดนทางไดครบทกทไดเรวทสด เปนตน
|Recursive algorithm หรออลกอรทมแบบวนซ�า เปนการแกไขปญหาขนพนฐานดวยการเรยกใช
ตวเองซ�าๆ โดยน�าขอมลปญหาสวนยอยของปญหาทงหมดกลบมาเปนขอมลในการแกไขปญหา
ตวอยางอลกอรทมแบบเรยกซ�า เชน การหาคา Factorial, อลกอรทมบวกขอมลตวเลขทอย
ในกลม เปนตน
|Randomized algorithms หรออลกอรทมแบบสม เปนอลกอรทมทใชหลกการสมขอมล แลวน�า
ขอมลทสมเลอกขนมาไดกระท�ากบอลกอรทมเพอใหไดผลตามทตองการ ตวอยางอลกอรทมทใชหลก
การ Randomized algorithms ไปใชงาน เชน พยายามหาขอมลทส�าคญทสดดวยการเลอกขอมล
จากการสมดวยการหาร หรอการจดเรยงขอมลแบบ Quick sort ดวยการสมตวเลขทใชเปนขอมล
เพอใชในการเปรยบเทยบ (pivot) ในการจดเรยงขอมล เปนตน
ทดลองอาน
Pag
e
คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)
10
สรปเนอหาบทท 1
|โครงสรางขอมลคอ การจดการขอมลในหนวยความจ�าภายในเครองคอมพวเตอร|อลกอรทมคอ ล�าดบขนตอนการท�างานเพอใชในการแกไขปญหา|ผงงาน เปนเครองมอทชวยออกแบบขนตอนการท�างานดวยสญลกษณ |โคดรหสเทยม เปนโครงสรางรหสทมการรวมกนทงภาษาเขยนกบภาษาคอมพวเตอร เพอใชในการ
อธบายโครงสรางและล�าดบขนตอนการท�างานของโปรแกรม โดยไมอางองภาษาการเขยนโปรแกรมภาษาใดภาษาหนง
|Abstract Data Type เปนการบอกถงคณสมบตของโครงสรางขอมลและกลมตวด�าเนนการทกระท�ากบโครงสรางขอมล
|ประเภทของอลกอรทมแยกไดเหมอนกบแยกรปแบบในการแกไขปญหาของโปรแกรม การแยกประเภทของอลกอรทมเพอแยกรปแบบอลกอรทมในการแกไขปญหานนเอง
แบบฝกหดทายบทท 1
ใหเขยนขนตอนวธ ผงงาน และโคดรหสเทยมของโปรแกรมตอไปน1. ค�านวณเลขยกก�าลงก�าหนดใหรบตวเลข 2 คาคอ คาเลขฐานและเลขยกก�าลง เพอน�ามาค�านวณเลข
ยกก�าลง2. เปลยนคาหนวยเวลาจากหนวยวนาททรบเขามาใหเปนหนวยชวโมง นาท และวนาท 3. ค�านวณอตราแลกเปลยนจากขอมลตวเลขทปอนเขามา ก�าหนดใหเปนสกลเงนบาทเปลยนเปนสกล
เงนประเทศสหรฐอเมรกา ญปน และจน ก�าหนดใหอางองอตราแลกเปลยนปจจบนในการซอขาย 4. รบขอมลตวเลขจ�านวน 20 ตว ก�าหนดใหน�าเฉพาะขอมลทเปนเลขคมาบวกกนและแสดงผลการบวก5. ค�านวณการถอนเงน โดยใหรบขอมลตวเลขเขามา 2 จ�านวนคอ ยอดเงนทลกคาซอและจ�านวน
เงนทลกคาจาย แลวใหค�านวณวาตองถอนแบงก 1,000 500 100 50 20 เหรยญ 10 5 2 1 .50 และ .25 บาท จ�านวนอยางละเทาไร
6. รบคะแนนสอบของนกศกษาจ�านวน 20 คนวามนกศกษาทไดเกรดแตละเกรดจ�านวนกคน และหาคาเฉลยวานกศกษากลมนมคาคะแนนเฉลยอยทเกรดอะไร โดยก�าหนดคาคะแนนในแตละ ชวงเกรดดงน
คะแนน เกรด
ต�ากวา 50 F
50-54 D
55-59 D+
60-64 C
65-69 C+
70-74 B
75-79 B+
80 ขนไป A
ทดลองอาน
Pag
e
บทท 1 รจกกบโครงสรางขอมลและอลกอรทม
11
7. รบขอมลอายจ�านวน 20 คน ก�าหนดใหนบจ�านวนคนในแตละชวงวยและหาคาเฉลยจากอายทรบ
เขามาวาอยในชวงวยไหน โดยแยกแตละชวงวยดงน
|วยเดกอายนอยกวา 15 ป
|วยรนอายมากกวาและเทากบ 15 ป ถง 20 ป
|วยผใหญตอนตนอายมากกวา 20 ป ถง 40 ป
|วยกลางคนอายมากกวา 40 ป ถง 60 ป
|วยชราอายมากกวา 60 ปขนไป
8. รบขอมลตวเลขจ�านวนชวโมงการท�างานในแตละสปดาหจ�านวน 4 สปดาหและประเภทของงานท
ท�างานเพอค�านวณคาจาง โดยก�าหนดใหประเภทของงานและอตราคาจางดงน
ล�าดบประเภทงาน ชอประเภทงาน อตราคาจาง/ชวโมง
0 แรงงานระดบใชก�าลง 20
1 แรงงานระดบฝมอ 25
2 แรงงานระดบช�านาญเฉพาะดาน 30
3 แรงงานระดบฝมอช�านาญเฉพาะดาน 35
9. หาผลคณจากเมตรกซ 2 เมตรกซ ก�าหนดเมตรกซท 1 มขนาด n x m และเมตรกซท 2 มขนาด
m x n ผลลพธของการคณเมตรกซทงสองมขนาด n x n
ทดลองอาน
ทดลองอาน