19
ทดลองอ่าน

ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

ทดลองอาน

Page 2: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 3: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 4: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 5: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 6: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 7: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 8: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

Pag

e

บทท 1 รจกกบโครงสรางขอมลและอลกอรทม

1

หนงสอเลมนเปนหนงสอทสอนในเรองโครงสรางขอมลและอลกอรทม มงเนนในเรองวธการและ

ขนตอนการแกไขปญหาตางๆ โดยใชคณสมบตและความสามารถของโครงสรางขอมล ซงถอไดวาเปนรายวชา

หลกในการเรยนในสาขาคอมพวเตอร ดงนน ผอานควรศกษาเนอหาและตวอยางตางๆ ในหนงสอใหเขาใจ เพอ

ใชเปนพนฐานในการพฒนาโปรแกรมตอไป

โครงสรางขอมลและอลกอรทมคออะไร

โครงสรางขอมล (Data Structure) คอ การจดการขอมลในหนวยความจ�าภายในเครอง

คอมพวเตอร หรอในบางครงเปนการจดการขอมลในดสก ใหมความสมพนธกนภายในกลมขอมลใหมรปแบบและขอ

ก�าหนดทชดเจนในการก�าหนดคณสมบตเพอสรางความสมพนธภายในกลมขอมล รปแบบการเกบขอมลทอยในรป

แบบโครงสรางขอมล เชน อารเรย (Array), ลงคลสต (Link-list), สแตก (Stack), ไบนารทร (Binary tree) เปนตน

อลกอรทม (Algorithm) หรอเรยกอกอยางวา ขนตอนวธ เปนวธการแสดงล�าดบขนตอนในการ

ท�างานหรอการแกไขปญหาอยางใดอยางหนง เชน การก�าหนดขนตอนเพอแกไขปญหาการจดเรยงเอกสารใน

แฟมขอมล หรอการก�าหนดอลกอรทมในการคนหาขอมลในแฟมขอมลทงหมด เปนตน

อลกอรทมหรอขนตอนวธเปนสงทพบไดในชวตประจ�าวน เชน ขนตอนการเตมเงนในโทรศพทมอถอ

ผานตเตมเงนอตโนมต, ขนตอนการใชงานตกดเงนอตโนมต (ATM) เพอท�าธรกรรมทางการเงน เปนตน

รจกกบโครงสรางขอมลและอลกอรทม

01

ทดลองอาน

Page 9: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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 แลวไมพบขอมลตวใดในอารเรยเลย แสดงวาไมมขอมลทตองการ

คนหาในอารเรย

ประโยชนของโครงสรางขอมลและอลกอรทม

โครงสรางขอมลและอลกอรทม เปนวธการจดการกบขอมลทท�าใหคอมพวเตอรสามารถจดการกบขอมล

เพอน�ามาใชงานไดอยางมประสทธภาพ ตวอยางเชน

|การจดเกบขอมลจ�านวนมากในรปแบบของโครงสรางขอมลทเหมาะสม จะท�าใหสามารถน�าขอมล

ไปใชไดอยางมประสทธภาพ โดยใชทรพยากรทมไดอยางคมคาทสด (ใชพนทหนวยความจ�านอย

ทสด) อกทงยงใชเวลาในการประมวลผลนอยทสดดวย สงผลใหคอมพวเตอรท�างานเรวขนนนเอง

|การอานขอมลเพอใชในการประมวลผล คอมพวเตอรจะอานขอมลมาเกบในหนวยความจ�าหลก

(หนวยความจ�าแรม) และในกรณทขอมลมขนาดมากกวาขนาดของหนวยความจ�า คอมพวเตอรจะ

ใชโครงสรางขอมลและอลกอรทมเขามาชวยในการจดการกบขอมลเหลานน เพอใหสามารถจดสรร

หนวยความจ�าไดอยางเหมาะสมและสามารถท�างานไดอยางตอเนอง

|การพฒนาโปรแกรมโดยใชโครงสรางขอมลและอลกอรทมทเหมาะสม สามารถเพมประสทธภาพการ

ท�างานของโปรแกรมไดเชนกน (ใชหนวยความจ�านอยและประมวลผลไดรวดเรว)

ทงนประโยชนของโครงสรางขอมลและอลกอรทมทกลาวมาเปนเพยงตวอยางเลกนอยเทานน ซง

โครงสรางขอมลและอลกอรทมยงสามารถประยกตเพอใชงานไดอกมากมาย ไมวาจะเปนการเรยงล�าดบขอมล

การคนหาขอมล เปนตน

ทดลองอาน

Page 10: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

Pag

e

บทท 1 รจกกบโครงสรางขอมลและอลกอรทม

3

ผงงาน (Flowchart)

ผงงาน หรอเรยกวา โฟลวชารต (Flowchart) เปนเครองมอทใชออกแบบระบบงานดวยสญลกษณ

ชวยใหมโครงสรางของระบบงานทเปนล�าดบขนตอนและเขาใจไดงาย

การน�าผงงานมาใชในการออกแบบโปรแกรม สามารถตรวจสอบไดวามล�าดบขนตอนการท�างาน

ถกตองหรอไม และสามารถเปลยนแปลงแกไขขอผดพลาดของระบบงานภายในผงงานไดงายกวาการหาขอ

ผดพลาดทเกดจากการเขยนโปรแกรม อกทงยงชวยลดความสบสนในการพฒนาโปรแกรมอกดวย

วตถประสงคทส�าคญทสดในการน�าผงงานมาเปนเครองมอในการพฒนาโปรแกรมคอ เพอใหบคคล

อนสามารถท�าความเขาใจถงล�าดบขนตอนการท�างานของโปรแกรม และผลลพธทไดจากการท�างานของ

โปรแกรมทพฒนาขนได

สญลกษณทน�ามาใชในการเขยนผงงานมอย 8 สญลกษณดงน

สญลกษณ ความหมายสญลกษณในการใชงานในผงงาน

Terminator

จดเรมตนและจดสนสดของโปรแกรม

Process

การประมวลผลหรอการค�านวณของโปรแกรม

Data

รบขอมลเขามาในโปรแกรม หรอสงคาออกไปจากโปรแกรม

Decision

ตรวจสอบเงอนไข แลวเลอกการท�างานของโปรแกรม

Document

แสดงผลออกทางเอกสาร

On-page reference

จดเชอมตอหลายเสนทางของโปรแกรมใหเหลอการเขามาเพยงเสนทางเดยว

Off-page reference

ขนหนาใหมในกรณทผงงานมความยาวเกนกวาทจะแสดงพอในหนงหนา

ลกศรแสดงทศทางการท�างานของโปรแกรมและการไหลของขอมลทดลองอาน

Page 11: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

Pag

e

คมอเรยนโครงสรางขอมลและอลกอรทม (Data Structure & Algorithm)

4

ตวอยางท 1.3 แสดงผงงานขนตอนการใชตกดเงนอตโนมต (ATM) เพอโอนเงนดงน

ตวอยางท 1.4 แสดงผงงานอลกอรทมคนหาขอมลในอารเรยขนาด n ขอมลดงน

รปท 1-1

ผงงานขนตอน

การใชตกดเงน

อตโนมต (ATM)

เพอโอนเงน

รปท 1-2

ผงงานอลกอรทม

คนหาขอมลใน

อารเรยขนาด n

ขอมล

ทดลองอาน

Page 12: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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"

ทดลองอาน

Page 13: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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. (น�าสงของกลบคนมาในต�าแหนงทใหมาใน

รายการ)ทดลองอาน

Page 14: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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ทด

ลองอาน

Page 15: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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 เปนการแกไขปญหาดวยการเปลยนรปแบบของ

ปญหาทตองการแกไขใหอยในรปแบบอนกอน ดวยคาดหวงวาเมอเปลยนรปแบบของปญหาแลว

จะสามารถแกไขปญหาไดงายและรวดเรวขน ตวอยางในการเปลยนโครงสรางขอมลกอนการแกไข

ทดลองอาน

Page 16: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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) ในการจดเรยงขอมล เปนตน

ทดลองอาน

Page 17: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 18: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

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

ทดลองอาน

Page 19: ìéúÜ î - SERAZU...Page สารบ ญ I บทท 1 ร จ กก บโครงสร างข อม ลและอ ลกอร ท ม ..... 1โครงสร างข

ทดลองอาน