22
บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูล Chapter 1 Introduction to Data Structure กฤษณ์ ชัยวัณณคุปต์ [email protected] ©2019 | Computer Science Program | Faculty of Science and Technology | URU

1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับโครงสร้างข้อมูล

Chapter 1 Introduction to Data Structure

กฤษณ์ ชัยวัณณคุปต์

[email protected]

©2019 | Computer Science Program | Faculty of Science and Technology | URU

Page 2: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ความหมายของโครงสร้างข้อมูล

• โครงสร้างข้อมูล (Data Structure) ประกอบด้วยค า 2 ค าคือ

– โครงสร้าง (Structure) หมายถึง โครงร่างหรือวิธีสร้างของสิ่งใด ๆ ลักษณะ สิ่งที่สร้างขึ้น เช่น โครงสร้างของอาคาร

– ข้อมูล (Data) หมายถึง สิ่งที่ทราบอยู่แล้ว, สิ่งที่ก าหนดให,้ สถิต,ิ ตัวเลข, เกณฑ์ เช่น ข้อมูลนักศึกษา

• โครงสร้างข้อมูล (Data Structure) ในทางคอมพิวเตอร์

หมายถึง รูปแบบของการจัดระเบียบของข้อมูล

หรือความสัมพันธ์ของข้อมูลที่อยู่ในโครงสร้างนั้น ๆ

Page 3: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ความสัมพันธ์ของโครงสร้างข้อมูล

• ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (One - to - One)

• ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (One - to - Many)

• ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (Many - to - Many)

Page 4: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ความสัมพันธ์ของโครงสร้างข้อมูล

• จากแผนภาพความสัมพันธ์ทั้ง 3 แบบ จะได้โครงสร้างดังนี้

Page 5: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ประเภทของโครงสร้างข้อมูล

• โครงสร้างเชิงเส้น (Linear Structure)

เป็นโครงสร้างที่มีการจัดเก็บข้อมูลในลักษณะต่อเนื่องกัน เช่น อาร์เรย,์ สแตก, คิว, ลิงก์ลิสต์

• โครงสร้างไม่เป็นเชิงเส้น (Non -Linear Structure)

เป็นโครงสร้างที่ข้อมูลแต่ละตัวสามารถมีความสัมพันธ์กับข้อมูลอื่นได้หลายตัว ซึ่งสามารถใช้แสดงความสัมพันธ์ของข้อมูลที่ซับซ้อนได้มากกว่าโครงสร้างข้อมูลแบบเชิงเส้น เช่น ทรี, กราฟ

Page 6: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ประเภทของโครงสร้างข้อมูล

• โครงสร้างเชิงเส้น (Linear Structure)

– Array

– Linked List

– Stack

– Queue

• โครงสร้างไม่เป็นเชิงเส้น (Non - Linear Structure)

– Tree

– Graph

Page 7: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

การเขียนโปรแกรมแบบมีโครงสร้าง(Structured Programming)

• โครงสร้างที่จ าเป็นส าหรับการเขียนโปรแกรม มี 3 แบบ คือ

– โครงสร้างแบบตามล าดับ (Sequential) ไม่มีการตัดสินใจและไม่เป็นวงจรปิด

– โครงสร้างแบบมีการตัดสินใจ (Decision) มีการตรวจสอบเงื่อนไข ก่อนตัดสินใจประมวลผล

A B

A B

XT F

Page 8: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

การเขียนโปรแกรมแบบมีโครงสร้าง(Structured Programming)

• โครงสร้างที่จ าเป็นส าหรับการเขียนโปรแกรม มี 3 แบบ คือ

– โครงสร้างแบบวงจรปิด (Loop) มีการท างานซ้ าตามจ านวนครั้งหรือเงื่อนไขที่ก าหนด

A

X

T

F

Page 9: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

อัลกอริทึม (Algorithm)

• อัลกอริทึม (Algorithm) หมายถึง การวิเคราะห์แยกแยะวิธีการท างานให้เป็นขั้นเป็นตอนโดยก าหนดให้เรียงกันไปตามล าดับเช่น อัลกอริทึมในการเดินทางจากกรุงเทพฯ ไปเชียงใหม่ อัลกอริทึมสามารถเขียนได้ 2 ลักษณะคือ

• รหัสเทียม (Pseudo Code) หมายถึง การเขียนโปรแกรมโดยไม่ต้องค านึงถึงไวยากรณ์ แต่เป็นภาษาที่นักเขียนโปรแกรมเข้าใจกันได้ มีลักษณะเป็นภาษาอังกฤษธรรมดาส่วนหนึ่ง

A = 1B = 5do while (A < B)

A = A + 1Print B

end do

X = 10Y = 4do while (X <> Y)

Print X + YX = X - 2

end do

M = 32N = 4do while (M > N)

M =M / 2end doPrint M + N

Page 10: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

อัลกอริทึม (Algorithm)

• ผังงาน (Flowchart) เป็นแผนภาพที่ใช้ออกแบบและอธิบายการท างานของโปรแกรม ประกอบด้วยรูปทรงต่างๆ แทนล าดับการท างานในแต่ละขั้นตอน และลูกศร แทนทิศทางการไหลของข้อมูล

Page 11: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ปฏิบัติการพื้นฐาน 6 ประการของคอมพิวเตอร์

• คอมพิวเตอร์สามารถรับข้อมูลได้ (A computer can receive information)– read name– get score

• คอมพิวเตอร์สามารถแสดงผลลพัธ์ได ้(A computer can put out information)– print “Hello”– write data to student file– display “OK”

• คอมพิวเตอร์สามารถค านวณได้ (A computer can perform arithmetic)– Tax = price * 0.10– C = (f – 32) * 5 /9

Page 12: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ปฏิบัติการพื้นฐาน 6 ประการของคอมพิวเตอร์

• คอมพิวเตอร์สามารถก าหนดค่าตัวแปรได ้(A computer can assign a value to a variable)– set price to 0– total cost + sale– store data in student

• คอมพิวเตอร์สามารถเปรียบเทียบและเลอืกการท างานได้ (A computer can compare and select one of alternate action)if score > 50 then

grade = “A”else grade = “F”end if

Page 13: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ปฏิบัติการพื้นฐาน 6 ประการของคอมพิวเตอร์

• คอมพิวเตอร์สามารถท างานซ้ าๆ ได้ (A computer can repeat a group of action)do while (not eof)

read student recordprint studentName, score

end do

for (number = 1 to 100)read student recordprint studentName, score

end for

Page 14: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

การวัดประสิทธิภาพของอัลกอริทึม

• โปรแกรมจะท างานได้อย่างมีประสิทธิภาพนั้นขึ้นอยู่กับปัจจัย 3 สิ่งคือ– ความเร็วของหน่วยประมวลผลกลาง– เนื้อที่หน่วยความจ าที่ใช้– อัลกอริทึมที่ใช้

• หากเรามี Array ที่เก็บตัวเลข n ค่า และต้องการหาว่าค่า 25 อยู่ใน Array นี้หรือไม่ การเขียนโปรแกรมแบบง่ายคือ เปรียบเทียบค่า 25 กับค่าแต่ละค่าใน Array กรณีที่แย่ที่สุดเราต้องเปรียบเทียบ n ครั้ง โดยทั่วไปคาดว่าเราต้องเปรียบเทียบ n/2 ครั้ง

• กล่าวได้ว่าโปรแกรมนี้มีความเร็วประมาณ n หรือ Order of n สามารถเขียนในรูปแบบย่อคือ O(n)

Page 15: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

การวัดประสิทธิภาพของอัลกอริทึม

• เราสามารถเขียน Algorithm ส าหรับค้นหาข้อมูลได้ดังนี้

For i=1 to n

If A[i] = 25

Exit Loop

End If

End For

Page 16: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ตัวอย่างการเขียนอัลกอริทึม

• การต้มบะหมี่ส าเร็จรูป

• การหาผลบวกของเลข 1-100

• การอ่านข้อมูลนักศึกษาจากไฟล์ แล้วค านวณเกรด จากนั้นพิมพ์ชื่อนักศึกษาและเกรด โดยมีเงื่อนไขคือ

– คะแนน 80 – 100 เกรด A

– คะแนน 70 – 79 เกรด B

– คะแนน 50 – 69 เกรด C

Page 17: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ตัวอย่างการเขียนอัลกอริทึม

• การต้มบะหมี่ส าเร็จรูป

1. เทบะหมี่ส าเร็จรูปในชาม

2. ต้มจนเดือด

3. เทน้ าเดือดลงในชาม

4. ปิดฝาประมาณ 3 นาที

4.1 ถ้าเป็นบะหมี่ชนิดแห้ง ให้เทน้ าทิ้ง

5. ใส่เครื่องปรุงผสมให้เข้ากัน

6. รับประทาน

Page 18: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ตัวอย่างการเขียนอัลกอริทึม

• การหาผลบวกของเลข 1-100

set number to 1

set answer to 0

do while number <= 100

answer = answer + number

number = number + 1

end do

display answer

set answer to 0

for (number = 1 to 100)

answer=answer + number

end for

display answer

Page 19: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

ตัวอย่างการเขียนอัลกอริทึม

• การอ่านข้อมูลนักศึกษาset score to 0set name to “No Name”set grade to Aread student recorddo while (not EOF)

if (score >= 80) thengrade = A

else if (score >= 70) thengrade = B

else if (score >= 60) then

grade = C

end if

print name, grade

read student record

end do

Page 20: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

อัตราการเติบโตของฟังกช์ั่น

อัตราการเติบโตของฟังก์ชั่น (Growth Rates) คืออัตราการเพิ่มขึ้นของเวลาในการประมวลผล (Time) เมื่อเทียบกับจ านวนข้อมูล (n) เช่นฟังก์ชันเส้นตรงใช้เวลาในการประมวลผลข้อมูลจ านวน 10 ค่า โดยใช้เวลา 10 หน่วย และใช้เวลาในการประมวลผลข้อมูลจ านวน 100 ค่า โดยใช้เวลา 100 หน่วย

ชื่อฟังก์ชัน สัญลักษณ์ f(10) f(100)ฟังก์ชันลอการิทึม O(log2n) 3.32 6.64ฟังก์ชันเส้นตรง O(n) 10 100ฟังก์ชัน nlog2n O(nlog2n) 33.2 664ฟังก์ชันก าลังสอง O(n2) 100 10,000ฟังก์ชันก าลังสาม O(n3) 1000 1,000,000ฟังก์ชันเอกซ์โพเนนเชียล O(2n) 1024 1.2 x 1030

ฟังก์ชันแฟคทอเรียล O(n!) 3,628,800 9.3 x 10157

Page 21: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

แบบฝึกหัด

1. จงเขียน Algorithm ของการหาอายุที่มากที่สุดจากคน 3 คน

2. จาก Algorithm ต่อไปนี้ จงอธิบายการท างานและหาผลลัพธ์ของ

A และ B

set A = 8

set B = 3

do while A > B

A = A + 1

B = B + 3

end do

display A, B

Page 22: 1 ความรู้เบื้องต้นเกี่ยวกับ โครงสร้างข้อมูลmathcom.uru.ac.th › ~krit › Semester 2019-2 › 4122202

แบบฝึกหัด

3. จงเขียน Algorithm อ่านข้อมูลจากไฟล์ลูกค้า (customer) ซึ่งมีข้อมูล รหัสลูกค้า, ชื่อลูกค้า, ยอดขาย แล้วค านวณหาภาษี จากเงื่อนไขต่อไปนี้– ยอดขายต่ ากว่า 5000 อัตราภาษี 3% – ยอดขาย 5000 ขึ้นไป อัตราภาษี 5%

แล้วพิมพ์ข้อมูลรหัสลูกค้า, ชื่อลูกค้า, ยอดขาย และภาษีที่ลูกค้าต้องจ่าย4. จงเขียน Algorithm รับตัวแปร A, B, C แล้วสลับค่าในตัวแปรทั้ง 3 ให้มีค่าเรียงล าดับจากน้อยไปมาก5. ก าหนดตัวแปร X และ Y เก็บค่าจ านวนเต็ม จงเขียน Algorithm หา ห.ร.ม. และ ค.ร.น. ของค่าที่เก็บในตัวแปร X และ Y