Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf ·...

12
บช.. มหาวิทยาลัยธรรมศาสตร์ M.S. (Computer Science) Southern Illinois University, U.S.A. T47018-2 โครงสร้างข้อมูลและการวิเคราะห์อัลกอริทึม Data Structures and Algorithm Analysis ผู ้ช่วยศาสตราจารย์สมจิตต์ ลิขิตถาวร

Transcript of Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf ·...

Page 1: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

บช.บ. มหาวทยาลยธรรมศาสตร

M.S. (Computer Science)

Southern Illinois University, U.S.A.T47018-2

โครงสรางขอมลและการวเคราะหอลกอรทมData Structures and Algorithm Analysis

ผชวยศาสตราจารยสมจตต ลขตถาวร

Page 2: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

Data Structures and Algorithm Analysis

สงวนลขสทธ พ.ศ. 2547

พมพครงแรก เดอนสงหาคม 2547

จำนวน 140 เลม

เจาของ มหาวทยาลยกรงเทพ

จดพมพโดย แผนกตำราและคำสอน มหาวทยาลยกรงเทพ

119 ถ.พระราม 4 คลองเตย กรงเทพฯ 10110

โทร. 0-2350-3500 ตอ 1850-1852

โทรสาร 0-2249-6274 0-2240-1516

Home Page: publish.bu.ac.th E-mail: [email protected]

จดจำหนายโดย รานสหกรณมหาวทยาลยกรงเทพ จำกด

119 ถ.พระราม 4 คลองเตย กรงเทพฯ 10110

โทร. 0-2350-3500 ตอ 1340

การลอกเลยนหนงสอเลมนไมวารปแบบใดตองไดรบอนญาตเปนลายลกษณอกษรจากมหาวทยาลยกรงเทพ

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

Cs311/Aum/K

สมจตต ลขตถาวร.

โครงสรางขอมลและการวเคราะหอลกอรทม = Data structures and

algorithm analysis / สมจตต ลขตถาวร.

485 หนา.

ISBN 974-219-152-2

1. โครงสรางขอมล (คอมพวเตอร). 2. คอมพวเตอรอลกอรทม.

(1) ชอเรอง.

QA76.9 .D35 ส236ค CIP

ขอมลของบตรรายการCataloging in Publication Data

Page 3: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

ค าน า

หนงสอเรอง “โครงสรางขอมล” จดท าขนเพอใหผเรยนไดเรยนรและเขาใจเกยวกบโครงสรางขอมล ทงทเปนโครงสรางขอมลแบบสถต (Static Data Structures) และโครงสรางขอมลแบบพลวต (Dynamic Data Structures) ชนดขอมลนามธรรมหรอเอดท (ADT-Abstract Data Type)

คณลกษณะ (Specification) และการประยกตใช (Application) รวมถงการโปรแกรมในแบบมอดลาร (Modular) การออกแบบจากบนลงลาง (Top-Down Design) เนนใหเกดความเขาใจกบแนวคดในเชงทฤษฎ เพอชวยใหผเรยนมบรณาการความคดในหลายๆ เรองเขาดวยกน และสามารถน าสงทเ รยนมาประยกตใชได ฝกเทคนคการพฒนาโปรแกรมอยางเปนระบบ สามารถวเคราะหและเลอกใชโครงสรางขอมลและขนตอนวธ (Algorithm) ทเหมาะสมกบงานไดเปนอยางด

หนงสอเล ม นเหมาะกบผ เรยนทมพนฐานของการเขยนโปรแกรมเบองตนมาแลว

โดยเฉพาะผทผานการศกษาวธการเขยนโปรแกรมมาแลว จะสามารถท าความเขาใจเนอหาของหนงสอเลมนไดเปนอยางด ทงนเนองจากตลอดทงเลมผเขยนไดยกตวอยางการแกปญหาดวยการโปรแกรม (Programming) พรอมค าอธบายโดยยอ จงสามารถท าความเขาใจไดงาย และเปนพนฐานทดในการเรยนรการโปรแกรมขนสงในภายหลง

โดยภาพรวม ตลอดทงเลมไดแบงเนอหาออกเปน 13 บท บทท 1 กลาวถงแนวคดเกยวกบโครงสรางขอมล และชนดขอมลนามธรรม การแทนคาชนดขอมลพนฐาน ไดแก จ านวนเตม

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

เรองเซต คาของเซต การด าเนนการกบเซต การแทนคาเซต ตลอดจนวธการอานคาและพมพคาชนดเซต บทท 4 รเคอรชนหรอการเรยกซ า เปนลกษณะของโปรแกรมยอยทเรยกใชตวเอง ชวยใหการเขยนโปรแกรมสนและกระชบกวาวธการเขยนแบบธรรมดา แตมกใชหนวยความจ ามาก จงคอนขางสนเปลองหนวยความจ า บทท 5 กลาวถงพอยเตอรและลงคลสต ซงเปนโครงสรางแบบพลวต

มกนยมน ามาใชเขยนโปรแกรม เ นองจากใชเนอทในหนวยความจ าอยางมประสทธภาพ สามารถยดหยนการใชหนวยความจ าในขนาดทสอดคลองกบปรมาณขอมล การแทรกและลบขอมลใน ลงคลสตกระท าไดรวดเรวและสะดวก แตวธการเขยนโปรแกรมคอนขางซบซอน เขยนยากและท าความเขาใจยาก บทท 6 – 7 กลาวถงสแตก และการค านวณนพจนค านวณโดยอาศยสแตก ซงเปนโครงสรางแบบเขาทหลง-ออกกอน หรอไลโฟ (LIFO – Last In, First Out) เนอหาครอบคลมการด าเนนการกบสแตก วธการสรางสแตกและการประยกตใช บทท 8 โครงสรางคว ซงเปนโครงสรางแบบเขากอน-ออกกอน หรอไฟโฟ (FIFO – First In, First Out) วธการด าเนนการกบควตลอดจนการสรางควและการประยกตใช บทท 9 อธบายถงโครงสรางตนไม โดยเฉพาะเนนโครงสรางตนไมค นหาแบบทวภาค วธการแทรกและลบโหนดจากตนไมรวมถงวธการทองเขาไปในโครงสรางตนไม บทท 10 โครงสรางตนไมนพจน วธการพมพและการหาผลลพธจากตนไมนพจน การแทนตนไม

Page 4: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

ทวภาคดวยอารเรย ตนไมความสงสมดลหรอตนไม AVL อลกอรทมของฮฟฟแมน (The Huffman

Algorithm) ซงเปนวธหนงของการเขารหสแบบความยาวแปรผน เพอชวยประหยดเนอทในการจดเกบขอมล บทท 11 กลาวถงกราฟ การแทนกราฟดวยเมทรกซ การใชกราฟเพอหาเสนทางทสนทสด ตนไมขยายนอยสด และอลกอรทมของพรม (Prim’s Algorithm) บทท 12 การคนหาและการว เคราะหประสทธภาพดวยบกโอ (Big-O) ของวธการคนหาแบบล าดบ แบบทวภาค และแบบแฮชชง บทท 13 ซงเปนบทสดทาย อธบายถงการเรยงล าดบแบบเลอก แบบฟอง แบบผสาน แบบเรว

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

ทกบทในหนงสอเลมน จะมบทสรป และแบบฝกหดทายบทเพอใหผเรยนไดฝกฝน

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

เสรมจนหนงสอเลมนส าเรจลลวงดวยด โดยเฉพาะ Dr. Robert J. McGlinn ผซงเปนอาจารยทประสทธประสาทความรเกยวกบการเขยนโปรแกรมอยางเปนระบบใหกบผเขยนเปนปฐมฤกษ เมอครงทผเขยนไดรบทนจากมหาวทยาลยกรงเทพ เพอศกษาตอในระดบปรญญาโท สาขา Computer

Science ท Southern Illinois University ประเทศสหรฐอเมรกา ทานอาจารย McGlinn มสวนชวยอย างมากในการท าใหผเขยนเขาใจวธการวเคราะห เขาใจวธการเขยนโปรแกรมใหมโครงสรางทด เปนแรงดลใจใหผเขยนรกงานเขยนโปรแกรมตงแตบดนนเปนตนมา

ขอขอบพระคณส านกกจการสถาบนอดมศกษาเอกชน ทบวงมหาวทยาลยทใหทนอดหนนการเรยบเรยงต าราเลมน และขอขอบพระคณ รศ. ดร. ดวงแกว สวามภกด รองศาสตราจารยประจ าภาควชาวทยาการคอมพวเตอร คณะวทยาศาสตรและเทคโนโลย มหาวทยาลยธรรมศาสตร รศ. ดร. สมชาย ประสทธจตระกล รองศาสตราจารยประจ าภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรมศาสตร จฬาลงกรณมหาวทยาลย และ ผศ. ดร. ประดนเดช นละคปต หวหนาภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรมศาสตร มหาวทยาลยเกษตรศาสตร ในฐานะผทรงคณวฒ ทใหค าปรกษาในการเรยบเรยงต าราเลมน จนเสรจสมบรณ

ทายทสด ผเขยนหวงเปนอยางยงวา หนงสอเลมนจะชวยใหผเรยนไดเขาใจเนอหาเกยวกบโครงสรางข อมลและการว เคราะห อลกอรทมไดเปนอยางด เปนพนฐานทดและเปนประโยชนในการศกษาคนควาเพอการเพมพนเทคนคในการออกแบบและพฒนาโปรแกรมทมรปแบบโครงสรางทด หากทานมขอคดเหนหรอขอเสนอแนะประการใด โปรดกรณาตดตอผเขยนโดยตรงทฝายวชาการ ตก 9 ชน 2 มหาวทยาลยกรงเทพ หรอ e-mail: [email protected] ผเขยนยนดนอมรบค าแนะน าของทานเพอน าไปปรบปรงเนอหาในหนงสอเลมนใหดยงขนในโอกาสตอไป

ผศ. สมจตต ลขตถาวร

Page 5: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

สารบญ

บทท 1 โครงสรางขอมลเบองตน (Introduction to Data Structures) 11.1 โครงสรางขอมล (Data Structures) 1

1.2 ชนดขอมลนามธรรม (Abstract Data Types - ADT) 3

1.3 ชนดขอมลพนฐานและการแทนคา(Simple Data Types and Their Representations) 7

1.3.1 การแทนคาจ านวนเตม (Integer Representation) 7

1.3.2 การแทนคาจ านวนจรง (Real Representation) 9

1.3.3 การแทนคาอกขระ (Character Representation) 10

1.3.4 การแทนคาบลน (Boolean Representation) 10

1.4 อารเรยและการแทนคา (Arrays and Their Implementations) 10

1.4.1 อารเรย 1 มต (One-Dimensional Array) 11

1.4.2 การแทนอารเรย 1 มต(One-Dimensional Array Implementation) 14

1.4.3 อารเรย 2 มต (Two-Dimensional Array) 15

1.4.4 การแทนอารเรยสองมต(Two-Dimensional Array Implementation) 17

- การแทนอารเรย 2 มตแบบใชแถวเปนหลก (Row Major) 17

- การแทนอารเรย 2 มตแบบใชคอลมนเปนหลก (Column Major) 19

1.4.5 อารเรยหลายมต (Multidimensional Array) 21

1.4.6 การแทนอารเรยหลายมต(Multidimensional Array Implementation) 22

1.5 การแทนสายอกขระหรอสตรง (Character String Implementation) 25

แบบฝกหดบทท 1 27

บทท 2 เรคคอรด (Records) 292.1 เรคคอรดคออะไร (What is a record?) 29

2.2 การประกาศตวแปรชนดเรคคอรด (Record Declarations) 30

2.3 การอางถงโครงสรางชนดเรคคอรด (Referencing Records) 33

2.4 การก าหนดคาใหกบตวแปรชนดเรคคอรด (Record Assignments) 35

2.5 การอานคาและพมพคาชนดเรคคอรด (Reading and Writing Records) 37

2.6 การใชค าสง WITH (Using WITH Statement) 38

Page 6: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(6)

2.7 อารเรยซงเกบขอมลชนดเรคคอรด (Array of Records) 42

2.8 เปรยบเทยบอารเรยขนานกบอารเรยซงเกบเรคคอรด(Comparing Parallel Arrays with Array of Records) 45

2.9 เรคคอรดซอนในเรคคอรด (Nested Records) 46

2.10 วาเรยนตเรคคอรด (Variant Records) 49

2.11 การประกาศวาเรยนตเรคคอรด (Variant Record Declarations) 51

2.12 การประยกตใชวาเรยนตเรคคอรด (Variant Record Applications) 54

แบบฝกหดบทท 2 57

บทท 3 เซต (Sets) 613.1 เซตคออะไร (What is a set?) 61

3.2 สญลกษณแทนเซต (Set Notation) 61

3.3 การประกาศตวแปรชนดเซต (Set Declarations) 64

3.4 คาของเซต (Set Values) 66

3.5 การก าหนดคาใหกบตวแปรชนดเซต (Set Assignments) 67

3.6 ตวด าเนนการกบเซต (Set Operators) 69

3.7 ตวด าเนนการสมพนธกบเซต (Set Relational Operators) 72

3.8 การจดการกบนพจนประเภทเซตทซบซอน (Complex Set Operations) 79

3.9 การอานคาและพมพคาชนดเซต (Reading and Writing Sets) 81

3.10 การแทนคาเซต (Set Implementation) 86

3.11 การประยกตใชเซต (Set Applications) 88

แบบฝกหดบทท 3 91

บทท 4 รเคอรชน (Recursion) 954.1 รเคอรชนคออะไร (What is recursion?) 95

4.2 กรณตวอยางเกยวกบรเคอรชน (An Example of Recursion) 95

4.3 การเขยนโพรซเยอรหรอฟงกชนแบบรเคอรซฟ(Writing Recursive Procedures and Functions) 100

4.4 การวนซ ากบการเรยกซ า (Iteration vs. Recursion) 106

4.5 การประยกตใชรเคอรชน (Applications of Recursion) 107

4.6 ปญหาทาวเวอรของฮานอย (The Towers of Hanoi Problem) 113

4.6.1 อลกอรทม (Algorithm) 117

4.6.2 การโปรแกรม (Programming) 117

Page 7: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(7)

แบบฝกหดบทท 4 121

กรณศกษา นพจนค านวณ (Arithmetic Expressions) 129

บทท 5 พอยเตอรและลงคลสต (Pointers and Linked Lists) 1315.1 ตวแปรชนดพอยเตอร (Pointer Variables) 132

5.2 การประกาศตวแปรชนดพอยเตอร (Pointer Declarations) 134

5.3 การก าหนดคาใหกบตวแปรชนดพอยเตอรและโหนดทชโดยพอยเตอร(Pointer and Node Assignments) 135

5.4 พอยเตอรทชไปยงเรคคอรด (Record Pointers) 141

5.5 ลงคลสตแบบโยงเดยว (Singly Linked Lists) 143

5.6 การแทรกโหนดทดานหนาของลงคลสต(Inserting Nodes at the Front of a List) 146

5.7 การทองเขาไปในลงคลสต (Traversing a Linked List) 149

5.8 การแทรกโหนดทดานปลายของลงคลสต(Inserting Nodes at the End of a List) 150

5.9 การแทรกโหนดเขาไปในลสตทเรยงล าดบ(Inserting Nodes into an Ordered List) 152

5.10 การลบโหนดออกจากลงคลสต (Deleting Nodes from a List) 158

5.10.1 การลบโหนดจากลสตทไมมการเรยงล าดบ(Deleting Nodes from an Unordered List) 159

5.10.2 การลบโหนดจากลสตทมการเรยงล าดบ(Deleting Nodes from an Ordered List) 162

5.11 การประยกตใชลงคลสต (Linked List Applications) 163

5.12 ลงค ลสตทมโหนดสวนหวและโหนดสวนหาง(Linked Lists with Headers and Trailers) 166

5.13 ลงคลสตแบบวงกลม (Circular Linked Lists) 170

5.14 ลงคลสตแบบโยงค (Doubly Linked Lists) 174

5.15 การแทรกโหนดในลงคลสตแบบโยงค(Inserting Nodes into a Doubly Linked List) 175

5.16 การลบโหนดในลงคลสตแบบโยงค(Deleting Nodes from a Doubly Linked List) 179

แบบฝกหดบทท 5 183

Page 8: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(8)

บทท 6 สแตก (Stacks) 1916.1 สแตกคออะไร (What is a stack?) 191

6.2 การด าเนนการกบสแตก (Operations on Stacks: Push and Pop) 191

6.3 การสรางสแตกดวยโครงสรางอารเรย(Implementation of a Stack as a Static Array) 194

6.4 การสรางสแตกดวยวธทใชงานทวไปไดด(A More General Implementation of a Stack) 198

6.5 การสรางสแตกดวยลงคลสต(Implementation of a Stack as a Linked List) 201

6.6 การประยกตใชสแตก (Stack Applications) 204

แบบฝกหดบทท 6 207

บทท 7 สแตกกบนพจนค านวณ (Stacks and Arithmetic Expressions) 2137.1 รปแบบนพจนค านวณ (Arithmetic Expression Notation) 214

- อนฟกซ (Infix)

- พรฟกซ (Prefix)

- โพสตฟกซ (Postfix)

7.2 การหาผลลพธจากนพจนโพสตฟกซ (Evaluating Postfix Expressions) 215

7.3 การใชสแตกชวยในการหาผลลพธจากนพจนโพสตฟกซ(Using Stack to Evaluate Postfix) 217

7.4 อลกอรทมในการแปลงนพจนอนฟกซเปนโพสตฟกซ(Algorithm to Convert Infix to Postfix) 220

แบบฝกหดบทท 7 223

บทท 8 คว (Queues) 2258.1 ควคออะไร (What is a queue?) 225

8.2 การด าเนนการกบคว (Operations on Queues) 225

8.3 การสรางควดวยโครงสรางอารเรย(Implementation of a Queue as a Static Array) 227

8.4 การสรางควดวยลงคลสต(Implementation of a Queue as a Linked List) 237

Page 9: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(9)

8.5 การสรางควดวยลงคลสตแบบวงกลม(Implementation of a Queue as a Circular Linked List) 239

8.6 การประยกตใชคว (Queue Applications) 240

แบบฝกหดบทท 8 243

กรณศกษา โปรแกรมจดควงาน (Queuing Jobs) 247

บทท 9 โครงสรางตนไม (Tree Structures) 2519.1 ความหมายของโครงสรางตนไม (Definition of a Tree Structure) 251

9.2 ศพททใชเรยกแตละสวนของตนไม (Tree Terminology) 252

9.3 โครงสรางตนไมทวภาค (Binary Tree Structures) 255

9.4 โครงสรางตนไมคนหาทวภาค (Binary Search Tree Structures) 256

9.5 การแทนโครงสรางตนไมทวภาค (Binary Search Tree Representations) 258

9.6 การแทรกโหนดเขาไปในตนไมคนหาทวภาค(Inserting Nodes into a Binary Search Tree) 260

9.7 การคนหาขอมลในตนไมคนหาทวภาค(Searching Nodes in a Binary Search Tree) 270

9.8 การลบโหนดจากตนไมคนหาทวภาค(Deleting Nodes from a Binary Search Tree) 271

9.9 ประโยชนของโครงสรางตนไมคนหาทวภาค(Advantages of a Binary Search Tree) 281

9.10 การทองเขาไปในตนไม (Tree Traversals) 283

9.11 โพรซเยอรเพอการทองตนไมแบบอนออรเดอร พรออรเดอร โพสตออรเดอร(Traversing Procedures: Inorder, Preorder and Postorder) 288

9.12 การประยกตใชตนไมคนหาทวภาค (Binary Search Tree Applications) 296

แบบฝกหดบทท 9 299

บทท 10 ตนไมทวภาคอนๆ (Other Binary Trees) 30510.1 ตนไมนพจนทวภาค (Binary Expression Trees) 305

10.2 การค านวณหาผลลพธจากตนไมนพจน(Evaluation of Expression Trees) 307

10.3 การพมพตนไมนพจน (Writing Expression Trees) 310

Page 10: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(10)

10.4 การสรางตนไมทวภาคเพอเกบนพจนค านวณ(Building a Binary Expression Tree) 311

10.5 การแทนตนไมทวภาคดวยอารเรย(Array Representation of Binary Trees) 318

10.5.1 ตนไมทวภาคแบบเตมตน (Full Binary Trees) 321

10.5.2 ตนไมทวภาคแบบสมบรณ (Complete Binary Trees) 321

10.6 ตนไมความสงสมดลหรอตนไม AVL

(Height-Balanced Trees or AVL Trees) 323

10.6.1 การสรางตนไม AVL (Building an AVL Tree) 326

10.6.2 การหมนซาย 1 ครง (Single Left Rotation) 326

10.6.3 การหมนซาย 2 ครง (Double Left Rotations) 327

10.6.4 การหมนขวา 1 ครง (Single Right Rotation) 329

10.6.5 การหมนขวา 2 ครง (Double Right Rotations) 330

10.6.6 วธประกาศโครงสรางตนไม AVL (AVL Tree Declarations) 337

10.6.7 การแทรกโหนดเขาไปในตนไม AVL

(Inserting Nodes into an AVL Tree) 338

10.7 อลกอรทมของฮฟฟแมน (The Huffman Algorithm) 344

10.7.1 วธการสรางตนไมฮฟฟแมน (Building a Huffman’s Tree) 348

10.7.2 อลกอรทมในการสรางตนไมฮฟฟแมน(Building a Huffman’s Tree Algorithm) 351

แบบฝกหดบทท 10 353

บทท 11 กราฟ (Graphs) 35711.1 นยามกราฟ (Graph Definition) 357

- เวอรเทกซ (Vertex, Vertices)

- เอดจ (Edges)

- กราฟไมมทศทาง (Undirected Graphs)

- กราฟมทศทาง (Directed Graphs or Digraphs)

11.2 อนดกร และเอาทดกร (Indegrees and Outdegrees) 362

11.3 กราฟสมบรณ (Complete Graphs) 362

11.4 เสนทาง (Paths) 363

11.5 กราฟมน าหนก (Weighted Graphs) 364

Page 11: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(11)

11.6 การแทนกราฟดวยเมทรกซหรออารเรยสองมต(Implementation of a Graph as a Matrix or Two-Dimensional Array) 365

11.7 การประกาศโครงสรางกราฟ (Graph Declarations) 367

11.8 การด าเนนการกบกราฟ (Operations on Graphs) 370

11.9 การทองเขาไปในกราฟ (Traversing a Graph) 375

11.10 การคนหาในแนวลกกอน (Depth-First Search) 375

11.11 การคนหาในแนวกวางกอน (Breadth-First Search) 382

11.12 อลกอรทมในการหาเสนทางทสนทสด (Shortest Paths Algorithm) 384

11.13 ตนไมขยาย (Spanning Trees) 394

11.13.1 ตนไมขยายนอยสด (Minimum Spanning Trees) 396

11.13.2 อลกอรทมของพรม (Prim’s Algorithm) 396

11.14 การแทนกราฟดวยวธการอน (Other Graph Implementations) 402

แบบฝกหดบทท 11 409

บทท 12 การคนหาและการวเคราะหอลกอรทม(Searching and Algorithm Analysis) 41112.1 การคนหาแบบล าดบหรอแบบเชงเสน

(Sequential Search or Linear Search) 411

12.2 การวเคราะหประสทธภาพของการคนหาแบบล าดบ(Sequential Search Algorithm Analysis) 414

12.3 บกโอ (The Big-O Notation) 414

12.4 การคนหาแบบทวภาค (Binary Search) 418

12.5 การวเคราะหประสทธภาพการคนหาแบบทวภาค(Binary Search Algorithm Analysis) 421

12.6 การคนหาดวยวธแฮชชง (Hashing) 426

- คย (Keys)

- ฟงกชนแฮช (Hash Functions)

- ตารางแฮช (Hash Tables)

12.7 การชนกนของคยและแนวทางแกไข (Collisions and Resolutions) 431

12.7.1 ลเนยรโพรบบง (Linear Probing) 431

12.7.2 บกเกต (Buckets) 435

12.7.3 เชนนง (Chaining) 436

Page 12: Data Structures and Algorithm Analysisbupress2.bu.ac.th/ebook/sci/cs311.pdf · โครงสร้างข้อมูลและการว ิเคราะห ์อัลกอริทึม

(12)

12.8 การวเคราะหประสทธภาพการคนหาดวยวธแฮชชง(Hash Algorithm Analysis) 437

แบบฝกหดบทท 12 439

บทท 13 การเรยงล าดบและการวเคราะหอลกอรทม(Sorting and Algorithm Analysis) 44113.1 การเรยงแบบเลอก (Selection Sort) 441

13.2 การวเคราะหประสทธภาพของการเรยงแบบเลอก(Selection Sort Algorithm Analysis) 444

13.3 การเรยงแบบฟอง (Bubble Sort) 446

13.4 การวเคราะหประสทธภาพของการเรยงแบบฟอง(Bubble Sort Algorithm Analysis) 452

13.5 การเรยงแบบผสาน (Merge Sort) 453

13.6 การวเคราะหประสทธภาพของการเรยงแบบผสาน(Merge Sort Algorithm Analysis) 457

13.7 การเรยงแบบเรว (Quick Sort) 458

13.8 การวเคราะหประสทธภาพของการเรยงแบบเรว(Quick Sort Algorithm Analysis) 465

13.9 การเรยงแบบฮป (Heap Sort) 466

13.10 การวเคราะหประสทธภาพของการเรยงแบบฮป(Heap Sort Algorithm Analysis) 477

แบบฝกหดบทท 13 479

บรรณานกรม 481

ภาคผนวก 483