SlideShare a Scribd company logo
เทคนิคอัลกอริทึมแบบ
Greedy
Advance Computer Programming
รหัสวิชา 32090207
อ. กิตตินันท์ น้1อยมณี 1
เนื้อหา
1. Introduction
2. Shortest Path (Dijkstra)
3. Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 2
Introduction
อ. กิตตินันท์ น้3อยมณี 3
Introduction
• Greedy แปลว่า ละโมบ หรือ ความละโมบ
• Greedy Algorithm เป็นอัลกอริทึมที่ง่ายๆ ไม่มี
ความซับซ้อนอะไร แค่เลือกทางที่ดูดีที่สุดใน
ขณะนั้นๆ ก็พอ
• เช่น ได้กําไรมากที่สุดโดยที่เสียหายน้อยที่สุด
• เช่น ใช้เวลาน้อยที่สุดแต่ได้ผลลัพธ์มากที่สุด
อ. กิตตินันท์ น้1อยมณี 4
Introduction
ตัวอย่างยังคงมีมากกว่านั้น เช่น
• ปัญหาการทอนเหรียญ
• การเลือกกิจกรรม (Activity Select Problem)
• การเลือกของ Knapsack Problem
• ปัญหาการบริการลูกค้าให้มีเวลาในการรอน้อยที่สุด
• ปัญหาการจัดการตารางงานเมื่อมี Deadline
อ. กิตตินันท์ น้1อยมณี 5
Introduction
ตัวอย่างยังคงมีมากกว่านั้น เช่น
• ปัญหา Minimum Spanning Tree
• Huffman Code
• Prefix Code
• ฯลฯ
อ. กิตตินันท์ น้1อยมณี 6
อ้างอิงข้อมูลดีๆ จาก อาจารย์กรุง สินอภิรมย์สราญ
http://pioneer.netserv.chula.ac.th/~skrung/2301365/Lecture009.html
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้7อยมณี 7
Shortest Path (Dijkstra)
• Dijkstra อ่านว่า ไดค์สตรา
• Shortest Path หรือ วิถีสั้นที่สุด
• มันก็คือกราฟแบบมีน้ําหนักและมีทิศทาง
• หลักการคล้ายๆ ปัญหาของนักท่องเที่ยวที่
ต้องการไปเที่ยวให้ครบทุกเมืองโดยใช้ระยะทางที่
สั้นที่สุด
อ. กิตตินันท์ น้1อยมณี 8
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 9
1
2
34
5
10 100
20
40
10
30
20
80
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 10
1
100
แทนเมืองต่างๆ
แทนระยะห่างระหว่าง
เมืองและเส้นทางที่
ต้องเดิน
Shortest Path (Dijkstra)
• ตาม Greedy Algorithm คือการเลือกทางที่ดีที่สุด
สั้นที่สุดโดยพิจารณาเฉพาะเหตุการณ์เฉพาะหน้า
เท่านั้น
อ. กิตตินันท์ น้1อยมณี 11
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
อ. กิตตินันท์ น้1อยมณี 12
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
อ. กิตตินันท์ น้1อยมณี 13
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100 0+80 0+30 0+10
อ. กิตตินันท์ น้1อยมณี 14
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
อ. กิตตินันท์ น้1อยมณี 15
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 10
อ. กิตตินันท์ น้1อยมณี 16
1 2 3 4 5
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 17
1
2
34
5
10 100
20
40
10
30
20
80
ระยะทางรวม = 10
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 10
อ. กิตตินันท์ น้1อยมณี 18
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 10
อ. กิตตินันท์ น้1อยมณี 19
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80 10
อ. กิตตินันท์ น้1อยมณี 20
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
10
อ. กิตตินันท์ น้1อยมณี 21
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
อ. กิตตินันท์ น้1อยมณี 22
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4} 20
อ. กิตตินันท์ น้1อยมณี 23
1 2 3 4 5
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 24
1
2
34
5
10 100
20
40
10
30
20
80
ระยะทางรวม = 20
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4} 20
อ. กิตตินันท์ น้1อยมณี 25
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20 20+40
20
อ. กิตตินันท์ น้1อยมณี 26
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
อ. กิตตินันท์ น้1อยมณี 27
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
3 {2} 40
อ. กิตตินันท์ น้1อยมณี 28
1 2 3 4 5
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 29
1
2
34
5
10 100
20
40
10
30
20
80
ระยะทางรวม = 40
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
3 {2} 40
อ. กิตตินันท์ น้1อยมณี 30
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
3 {2} 40
40+20
อ. กิตตินันท์ น้1อยมณี 31
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
3 {2} 40
40+20
60
อ. กิตตินันท์ น้1อยมณี 32
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP V
0 {1} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {5} 100 80
10+10
20
10
2 {4}
20+20
40
20+40
60
20
3 {2} 40
40+20
60
4 {3} 60
อ. กิตตินันท์ น้1อยมณี 33
1 2 3 4 5
Shortest Path (Dijkstra)
LOOP C
0 {2, 3, 4, 5} 0
0+100
100
0+80
80
0+30
30
0+10
10
1 {2, 3, 4} 100 80
10+10
20
10
2 {2, 3}
20+20
40
20+40
60
20
3 {3} 40
40+20
60
4 60
อ. กิตตินันท์ น้1อยมณี 34
1 2 3 4 5
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 35
1
2
34
5
10 100
20
40
10
30
20
80
ระยะทางรวม = 60
Shortest Path (Dijkstra)
• เมื่อเข้าใจวิธีคิดแล้ว ลองมาดู Pseudo Code กัน
อ. กิตตินันท์ น้1อยมณี 36
Shortest Path (Dijkstra)
Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n]
C := {2, 3, 4, …, n}
for i := 2 to n
D[i] := L[1, i]
repeat n-2 times
v := some element of C minimizing D[v]
C := C – {v}
for each w C do
D[w] := min( D[w], D[v]+L[v, m] )
return D
End Algorithm อ. กิตตินันท์ น้1อยมณี 37
Shortest Path (Dijkstra)
Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n]
C := {2, 3, 4, …, n}
for i := 2 to n
D[i] := L[1, i]
repeat n-2 times
v := some element of C minimizing D[v]
C := C – {v}
for each w C do
D[w] := min( D[w], D[v]+L[v, m] )
return D
End Algorithm อ. กิตตินันท์ น้1อยมณี 38
เซ็ตของเมืองที่เหลือ
ให้ D เก็บระยะทางของเมือง 1 กับ
เมืองทั้งหมด
เลือกเสร็จก็ลบเมืองนั้นไป
หาระยะทางที่น้อยที่สุด
Shortest Path (Dijkstra)
โดย
• v คือ เมืองที่เลือกไป (ที่ระยะสั้นที่สุด)
• C คือ เซ็ตของเมืองที่ยังไม่ได้ไป
• D คือ ค่าของการประมวลผลระยะทาง
อ. กิตตินันท์ น้1อยมณี 39
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 40
Shortest Path (Dijkstra)
อ. กิตตินันท์ น้1อยมณี 41
ลองทําด้วยตัวเองดูนะครับ
Knapsack Problem
with Greedy Algorithm
อ. กิตตินันท์ น้42อยมณี 42
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 43
• Knapsack อ่านว่า แน๊บ-แซ่ก (Knapsack)
• แปลว่า เป้ หรือ กระเป๋าสายพายหลัง
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 44
• Knapsack Problem คือปัญหาในการเลือกของเพื่อ
หยิบใส่กระเป๋า โดยกระเป๋ามีความจุจํากัด (ไม่งั้น
ขาด)
• เหมือนกับการเดินเข้าไปในถ้ําแล้วเจอเพชรเม็ดโต
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 45
• ตามหลักการของ Greedy Algorithm แล้ว คือการ
หยิบเพชรออกจากถ้ําโดยให้ได้มูลค่าเยอะที่สุด
• สิ่งที่ต้องระวังมากที่สุดก็คือ จะต้องระวังกระเป๋า
ขาด เพราะหยิบเพชรหนักเกินความจุของกระเป๋า
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 46
• สมมติว่ามีเพชรอยู่ทั้งหมด 5 ก้อน (n = 5)
• มูลค่าของเพชรทั้งหมดเรียงกันดังนี้
• น้ําหนักของเพชรทั้งหมดเรียงกันดังนี้
0 1 2 3 4
Vi 1 6 18 22 24
0 1 2 3 4
Wi 1 2 5 6 7
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 47
• และให้ความจุของกระเป๋าเท่ากับ 11 (wx=11)
• อัตราส่วนระหว่าง Value ต่อ Weight ได้ดังนี้
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 3.43
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 48
• สรุปได้ข้อมูลดังนี้
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 3.43
0 1 2 3 4
Vi 1 6 18 22 24
0 1 2 3 4
Wi 1 2 5 6 7
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 49
ดังนั้น การหยิบของใส่กระเป๋าก็มีวิธีการอยู่ดังนี้
(Select Function)
1. Min(Wi)
2. Max(Vi)
3. Max(Vi/Wi)
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 50
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 3.43
0 1 2 3 4
Vi 1 6 18 22 24
0 1 2 3 4
Wi 1 2 5 6 7
0 1 2 3 4 Value
1 1 1 0 0 25Min(Wi)
1
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 51
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 3.43
0 1 2 3 4
Vi 1 6 18 22 24
0 1 2 3 4
Wi 1 2 5 6 7
0 1 2 3 4 Value
1 1 0 0 1 31Max(Vi)
2
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 52
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 3.43
0 1 2 3 4
Vi 1 6 18 22 24
0 1 2 3 4
Wi 1 2 5 6 7
0 1 2 3 4 Value
0 0 1 1 0 40Max(Vi/Wi)
3
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 53
0 1 2 3 4 Value
0 0 1 1 0 40Max(Vi/Wi)
3
0 1 2 3 4 Value
1 1 0 0 1 31Max(Vi)
2
0 1 2 3 4 Value
1 1 1 0 0 25Min(Wi)
1
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 54
• ดังนั้นหากเลือก Max(Vi/Wi) จะทําให้ได้มูลค่ามาก
ที่สุดคือ 40 โดยที่น้ําหนักพอดีกับความจุของ
กระเป๋าพอดี
• แต่ทว่า !! Greedy Algorithm ยังไม่ใช่
กระบวนการคิดที่เหมาะกับ Knapsack
Problem
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 55
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 4
0 1 2 3 4
Vi 1 6 18 22 28
0 1 2 3 4
Wi 1 2 5 6 7
0 1 2 3 4 Value
Max(Vi/Wi)
3
หากเปลี่ยน V4 เป็น 28 แล้วลองใช้ Greedy Algorithm ดูอีกรอบ
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 56
0 1 2 3 4
Vi / Wi 1 3 3.6 3.67 4
0 1 2 3 4
Vi 1 6 18 22 28
0 1 2 3 4
Wi 1 2 5 6 7
0 1 2 3 4 Value
1 1 0 0 1 35Max(Vi/Wi)
3
ทําให้ Max(Vi/Wi) เลือก V4 เป็นอันดับแรก จึงได้ Xi = 1 1 0 0 1
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 57
• ด้วยเหตุนี้จึงทําให้ Greedy Algorithm อาจจะยังไม่
เหมาะสมในการแก้ปัญหา Knapsack Problem
• โดยยังคงต้องการฟังก์ชันในการเลือกวัตถุที่ดีที่สุด
ในแต่ละรอบก่อน จึงจะทําให้ได้คําตอบโดยรวมที่
ดีที่สุด
• Greedy จะไม่สนใจภาพรวมของปัญหา จะสนใจ
แต่เหตุการณ์เฉพาะหน้าเท่านั้น
อ. กิตตินันท์ น้1อยมณี 58
Algorithm KnapsackGD( w[n], v[n], wx ) : array[n]
for i := 0 to n-1
x[i] := 0
weight := 0
y := {0, 1, 2, …, n-1}
while weight < wx and y 0
i := the best remaining Object in y
if weight + w[i] wx then
x[i] := 1
weight := weight + w[i]
y := y – {i}
return x
End Algorithm
Select Function
Knapsack Problem with Greedy Algorithm
อ. กิตตินันท์ น้1อยมณี 59
ลองทําด้วยตัวเองดูนะครับ???

More Related Content

PPT
ค่ายคณิตศาสตร์
PDF
บทที่ 1 ห.ร.ม และ ค.ร.น
PDF
เฉลย กสพท. คณิตศาสตร์ 2556
PPT
เรื่องฟังก์ชันค่าสัมบูรณ์
PDF
รวมบท มีหน้า
PDF
บทที่ 5 ความเท่ากันทุกประการ
PPT
สื่อคณิตประกวด
ค่ายคณิตศาสตร์
บทที่ 1 ห.ร.ม และ ค.ร.น
เฉลย กสพท. คณิตศาสตร์ 2556
เรื่องฟังก์ชันค่าสัมบูรณ์
รวมบท มีหน้า
บทที่ 5 ความเท่ากันทุกประการ
สื่อคณิตประกวด

What's hot (20)

PDF
ข้อสอบคณิตศาสตร์TEDET 2554 9
DOCX
สรุปสูตรและเนื้อหาคณิตศาสตร์ ม.ปลาย
PDF
เฉลยละเอียด ONET คณิตศาสตร์ ม.3 ปกศ.2559(1)
PPTX
Algoritma Traversal dalam Graf
PPTX
Counting 1
PDF
ทฤษฎีเศษเหลือ
DOCX
Komunikasi Matematika
PDF
51 ตรีโกณมิติ ตอนที่8_ฟังก์ชันตรีโกณมิติผกผัน
PPT
ความคิดสร้างสรรค์
PPT
3 Centrality
PDF
บทที่3.pdf
PDF
ชุดที่ 8 การแก้โจทย์ปัญหาเกี่ยวกับสัดส่วน
PDF
5.บทที่.5 สรุปผล-อภิปรายผล-ข้อเสนอแนะ
PDF
จำนวนจริง_เฉลย
PDF
การคูณและการหาร
DOCX
Instrumen tes berfikir kritis &amp; self convidence
PDF
เฉลย กสพท. คณิตศาสตร์ 2558
PDF
เมทริกซ์...
PPT
Kombinatorial
PPTX
10 Strategi Pemecahan Masalah Matematika
ข้อสอบคณิตศาสตร์TEDET 2554 9
สรุปสูตรและเนื้อหาคณิตศาสตร์ ม.ปลาย
เฉลยละเอียด ONET คณิตศาสตร์ ม.3 ปกศ.2559(1)
Algoritma Traversal dalam Graf
Counting 1
ทฤษฎีเศษเหลือ
Komunikasi Matematika
51 ตรีโกณมิติ ตอนที่8_ฟังก์ชันตรีโกณมิติผกผัน
ความคิดสร้างสรรค์
3 Centrality
บทที่3.pdf
ชุดที่ 8 การแก้โจทย์ปัญหาเกี่ยวกับสัดส่วน
5.บทที่.5 สรุปผล-อภิปรายผล-ข้อเสนอแนะ
จำนวนจริง_เฉลย
การคูณและการหาร
Instrumen tes berfikir kritis &amp; self convidence
เฉลย กสพท. คณิตศาสตร์ 2558
เมทริกซ์...
Kombinatorial
10 Strategi Pemecahan Masalah Matematika
Ad

(Big One) C Language - 11 เทคนิคอัลกอริทึมแบบ greedy

  • 2. เนื้อหา 1. Introduction 2. Shortest Path (Dijkstra) 3. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 2
  • 4. Introduction • Greedy แปลว่า ละโมบ หรือ ความละโมบ • Greedy Algorithm เป็นอัลกอริทึมที่ง่ายๆ ไม่มี ความซับซ้อนอะไร แค่เลือกทางที่ดูดีที่สุดใน ขณะนั้นๆ ก็พอ • เช่น ได้กําไรมากที่สุดโดยที่เสียหายน้อยที่สุด • เช่น ใช้เวลาน้อยที่สุดแต่ได้ผลลัพธ์มากที่สุด อ. กิตตินันท์ น้1อยมณี 4
  • 5. Introduction ตัวอย่างยังคงมีมากกว่านั้น เช่น • ปัญหาการทอนเหรียญ • การเลือกกิจกรรม (Activity Select Problem) • การเลือกของ Knapsack Problem • ปัญหาการบริการลูกค้าให้มีเวลาในการรอน้อยที่สุด • ปัญหาการจัดการตารางงานเมื่อมี Deadline อ. กิตตินันท์ น้1อยมณี 5
  • 6. Introduction ตัวอย่างยังคงมีมากกว่านั้น เช่น • ปัญหา Minimum Spanning Tree • Huffman Code • Prefix Code • ฯลฯ อ. กิตตินันท์ น้1อยมณี 6 อ้างอิงข้อมูลดีๆ จาก อาจารย์กรุง สินอภิรมย์สราญ http://pioneer.netserv.chula.ac.th/~skrung/2301365/Lecture009.html
  • 7. Shortest Path (Dijkstra) อ. กิตตินันท์ น้7อยมณี 7
  • 8. Shortest Path (Dijkstra) • Dijkstra อ่านว่า ไดค์สตรา • Shortest Path หรือ วิถีสั้นที่สุด • มันก็คือกราฟแบบมีน้ําหนักและมีทิศทาง • หลักการคล้ายๆ ปัญหาของนักท่องเที่ยวที่ ต้องการไปเที่ยวให้ครบทุกเมืองโดยใช้ระยะทางที่ สั้นที่สุด อ. กิตตินันท์ น้1อยมณี 8
  • 9. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 9 1 2 34 5 10 100 20 40 10 30 20 80
  • 10. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 10 1 100 แทนเมืองต่างๆ แทนระยะห่างระหว่าง เมืองและเส้นทางที่ ต้องเดิน
  • 11. Shortest Path (Dijkstra) • ตาม Greedy Algorithm คือการเลือกทางที่ดีที่สุด สั้นที่สุดโดยพิจารณาเฉพาะเหตุการณ์เฉพาะหน้า เท่านั้น อ. กิตตินันท์ น้1อยมณี 11
  • 12. Shortest Path (Dijkstra) LOOP V 0 {1} 0 อ. กิตตินันท์ น้1อยมณี 12 1 2 3 4 5
  • 13. Shortest Path (Dijkstra) LOOP V 0 {1} 0 อ. กิตตินันท์ น้1อยมณี 13 1 2 3 4 5
  • 14. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 0+80 0+30 0+10 อ. กิตตินันท์ น้1อยมณี 14 1 2 3 4 5
  • 15. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 อ. กิตตินันท์ น้1อยมณี 15 1 2 3 4 5
  • 16. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 10 อ. กิตตินันท์ น้1อยมณี 16 1 2 3 4 5
  • 17. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 17 1 2 34 5 10 100 20 40 10 30 20 80 ระยะทางรวม = 10
  • 18. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 10 อ. กิตตินันท์ น้1อยมณี 18 1 2 3 4 5
  • 19. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 10 อ. กิตตินันท์ น้1อยมณี 19 1 2 3 4 5
  • 20. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10 อ. กิตตินันท์ น้1อยมณี 20 1 2 3 4 5
  • 21. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 10 อ. กิตตินันท์ น้1อยมณี 21 1 2 3 4 5
  • 22. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 อ. กิตตินันท์ น้1อยมณี 22 1 2 3 4 5
  • 23. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20 อ. กิตตินันท์ น้1อยมณี 23 1 2 3 4 5
  • 24. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 24 1 2 34 5 10 100 20 40 10 30 20 80 ระยะทางรวม = 20
  • 25. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20 อ. กิตตินันท์ น้1อยมณี 25 1 2 3 4 5
  • 26. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 20+40 20 อ. กิตตินันท์ น้1อยมณี 26 1 2 3 4 5
  • 27. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 อ. กิตตินันท์ น้1อยมณี 27 1 2 3 4 5
  • 28. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 3 {2} 40 อ. กิตตินันท์ น้1อยมณี 28 1 2 3 4 5
  • 29. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 29 1 2 34 5 10 100 20 40 10 30 20 80 ระยะทางรวม = 40
  • 30. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 3 {2} 40 อ. กิตตินันท์ น้1อยมณี 30 1 2 3 4 5
  • 31. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 3 {2} 40 40+20 อ. กิตตินันท์ น้1อยมณี 31 1 2 3 4 5
  • 32. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 3 {2} 40 40+20 60 อ. กิตตินันท์ น้1อยมณี 32 1 2 3 4 5
  • 33. Shortest Path (Dijkstra) LOOP V 0 {1} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {5} 100 80 10+10 20 10 2 {4} 20+20 40 20+40 60 20 3 {2} 40 40+20 60 4 {3} 60 อ. กิตตินันท์ น้1อยมณี 33 1 2 3 4 5
  • 34. Shortest Path (Dijkstra) LOOP C 0 {2, 3, 4, 5} 0 0+100 100 0+80 80 0+30 30 0+10 10 1 {2, 3, 4} 100 80 10+10 20 10 2 {2, 3} 20+20 40 20+40 60 20 3 {3} 40 40+20 60 4 60 อ. กิตตินันท์ น้1อยมณี 34 1 2 3 4 5
  • 35. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 35 1 2 34 5 10 100 20 40 10 30 20 80 ระยะทางรวม = 60
  • 36. Shortest Path (Dijkstra) • เมื่อเข้าใจวิธีคิดแล้ว ลองมาดู Pseudo Code กัน อ. กิตตินันท์ น้1อยมณี 36
  • 37. Shortest Path (Dijkstra) Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n] C := {2, 3, 4, …, n} for i := 2 to n D[i] := L[1, i] repeat n-2 times v := some element of C minimizing D[v] C := C – {v} for each w C do D[w] := min( D[w], D[v]+L[v, m] ) return D End Algorithm อ. กิตตินันท์ น้1อยมณี 37
  • 38. Shortest Path (Dijkstra) Algorithm Dijkstra ( L[1…n, 1…n] ) : array[2…n] C := {2, 3, 4, …, n} for i := 2 to n D[i] := L[1, i] repeat n-2 times v := some element of C minimizing D[v] C := C – {v} for each w C do D[w] := min( D[w], D[v]+L[v, m] ) return D End Algorithm อ. กิตตินันท์ น้1อยมณี 38 เซ็ตของเมืองที่เหลือ ให้ D เก็บระยะทางของเมือง 1 กับ เมืองทั้งหมด เลือกเสร็จก็ลบเมืองนั้นไป หาระยะทางที่น้อยที่สุด
  • 39. Shortest Path (Dijkstra) โดย • v คือ เมืองที่เลือกไป (ที่ระยะสั้นที่สุด) • C คือ เซ็ตของเมืองที่ยังไม่ได้ไป • D คือ ค่าของการประมวลผลระยะทาง อ. กิตตินันท์ น้1อยมณี 39
  • 40. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 40
  • 41. Shortest Path (Dijkstra) อ. กิตตินันท์ น้1อยมณี 41 ลองทําด้วยตัวเองดูนะครับ
  • 42. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้42อยมณี 42
  • 43. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 43 • Knapsack อ่านว่า แน๊บ-แซ่ก (Knapsack) • แปลว่า เป้ หรือ กระเป๋าสายพายหลัง
  • 44. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 44 • Knapsack Problem คือปัญหาในการเลือกของเพื่อ หยิบใส่กระเป๋า โดยกระเป๋ามีความจุจํากัด (ไม่งั้น ขาด) • เหมือนกับการเดินเข้าไปในถ้ําแล้วเจอเพชรเม็ดโต
  • 45. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 45 • ตามหลักการของ Greedy Algorithm แล้ว คือการ หยิบเพชรออกจากถ้ําโดยให้ได้มูลค่าเยอะที่สุด • สิ่งที่ต้องระวังมากที่สุดก็คือ จะต้องระวังกระเป๋า ขาด เพราะหยิบเพชรหนักเกินความจุของกระเป๋า
  • 46. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 46 • สมมติว่ามีเพชรอยู่ทั้งหมด 5 ก้อน (n = 5) • มูลค่าของเพชรทั้งหมดเรียงกันดังนี้ • น้ําหนักของเพชรทั้งหมดเรียงกันดังนี้ 0 1 2 3 4 Vi 1 6 18 22 24 0 1 2 3 4 Wi 1 2 5 6 7
  • 47. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 47 • และให้ความจุของกระเป๋าเท่ากับ 11 (wx=11) • อัตราส่วนระหว่าง Value ต่อ Weight ได้ดังนี้ 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 3.43
  • 48. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 48 • สรุปได้ข้อมูลดังนี้ 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 3.43 0 1 2 3 4 Vi 1 6 18 22 24 0 1 2 3 4 Wi 1 2 5 6 7
  • 49. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 49 ดังนั้น การหยิบของใส่กระเป๋าก็มีวิธีการอยู่ดังนี้ (Select Function) 1. Min(Wi) 2. Max(Vi) 3. Max(Vi/Wi)
  • 50. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 50 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 3.43 0 1 2 3 4 Vi 1 6 18 22 24 0 1 2 3 4 Wi 1 2 5 6 7 0 1 2 3 4 Value 1 1 1 0 0 25Min(Wi) 1
  • 51. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 51 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 3.43 0 1 2 3 4 Vi 1 6 18 22 24 0 1 2 3 4 Wi 1 2 5 6 7 0 1 2 3 4 Value 1 1 0 0 1 31Max(Vi) 2
  • 52. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 52 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 3.43 0 1 2 3 4 Vi 1 6 18 22 24 0 1 2 3 4 Wi 1 2 5 6 7 0 1 2 3 4 Value 0 0 1 1 0 40Max(Vi/Wi) 3
  • 53. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 53 0 1 2 3 4 Value 0 0 1 1 0 40Max(Vi/Wi) 3 0 1 2 3 4 Value 1 1 0 0 1 31Max(Vi) 2 0 1 2 3 4 Value 1 1 1 0 0 25Min(Wi) 1
  • 54. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 54 • ดังนั้นหากเลือก Max(Vi/Wi) จะทําให้ได้มูลค่ามาก ที่สุดคือ 40 โดยที่น้ําหนักพอดีกับความจุของ กระเป๋าพอดี • แต่ทว่า !! Greedy Algorithm ยังไม่ใช่ กระบวนการคิดที่เหมาะกับ Knapsack Problem
  • 55. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 55 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 4 0 1 2 3 4 Vi 1 6 18 22 28 0 1 2 3 4 Wi 1 2 5 6 7 0 1 2 3 4 Value Max(Vi/Wi) 3 หากเปลี่ยน V4 เป็น 28 แล้วลองใช้ Greedy Algorithm ดูอีกรอบ
  • 56. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 56 0 1 2 3 4 Vi / Wi 1 3 3.6 3.67 4 0 1 2 3 4 Vi 1 6 18 22 28 0 1 2 3 4 Wi 1 2 5 6 7 0 1 2 3 4 Value 1 1 0 0 1 35Max(Vi/Wi) 3 ทําให้ Max(Vi/Wi) เลือก V4 เป็นอันดับแรก จึงได้ Xi = 1 1 0 0 1
  • 57. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 57 • ด้วยเหตุนี้จึงทําให้ Greedy Algorithm อาจจะยังไม่ เหมาะสมในการแก้ปัญหา Knapsack Problem • โดยยังคงต้องการฟังก์ชันในการเลือกวัตถุที่ดีที่สุด ในแต่ละรอบก่อน จึงจะทําให้ได้คําตอบโดยรวมที่ ดีที่สุด • Greedy จะไม่สนใจภาพรวมของปัญหา จะสนใจ แต่เหตุการณ์เฉพาะหน้าเท่านั้น
  • 58. อ. กิตตินันท์ น้1อยมณี 58 Algorithm KnapsackGD( w[n], v[n], wx ) : array[n] for i := 0 to n-1 x[i] := 0 weight := 0 y := {0, 1, 2, …, n-1} while weight < wx and y 0 i := the best remaining Object in y if weight + w[i] wx then x[i] := 1 weight := weight + w[i] y := y – {i} return x End Algorithm Select Function
  • 59. Knapsack Problem with Greedy Algorithm อ. กิตตินันท์ น้1อยมณี 59 ลองทําด้วยตัวเองดูนะครับ???