SlideShare a Scribd company logo
เทคนิคอัลกอริทึมแบบ
Graph Exploring
(Backtracking Algorithm)
Advance Computer Programming
รหัสวิชา 32090207
อ. กิตตินันท์ น้1อยมณี 1
เนื้อหา
1. Introduction
2. Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 2
Introduction
อ. กิตตินันท์ น้3อยมณี 3
Introduction
• Backtracking Algorithm เป็นอีกกระบวนวิธีหนึ่งใน
การหาผลลัพธ์ที่เป็นไปได้
• ลักษณะการทํางานจะคล้ายๆ กับ Brute-Force
Algorithm ซึ่งเป็นการค้นค้นแบบสายถึก (แบบ
ตรงไปตรงมา)
อ. กิตตินันท์ น้1อยมณี 4
อ้างอิงข้อมูลดีๆ จาก ร.อ. ตุลวัตร ชุณห์วิจิตรา
(http://macs.crma.ac.th/~chunny/cs3303/material/lecture19.pdf)
Introduction
หมายเหตุ : Brute-Force Algorithm คือการแก้ปัญหาแบบถึก
หรือแก้แบบดื้อๆ โดยสั่งให้คอมพิวเตอร์แก้ปัญหาไปเรื่อยๆ หา
คําตอบจากความเป็นไปได้ทุกกรณีเลย มีอะไรก็จับแทนค่าให้
หมดทุกค่าที่พอจะเป็นไปได้ โดยส่วนใหญ่มักจะใช้ในกรณีที่คิด
อะไรไม่ออกแล้ว เช่น การเปิดรหัสกระเป๋าเดินทางที่มีเลข 3
หลัก เป็นต้น
อ. กิตตินันท์ น้1อยมณี 5
Introduction
• โดย Backtracking จะเข้าไปหาทุกๆ กรณีที่เป็นไป
ได้ หากถ้าเลือกที่เข้าไป ไม่สามารถแก้ปัญหาได้ ก็
จะย้อนกลับมาเพื่อเลือกแนวทางถัดไปจนกว่าจะ
เจอกรณีที่ถูกต้องจริงๆ
อ. กิตตินันท์ น้1อยมณี 6
อ้างอิงข้อมูลดีๆ จาก ร.อ. ตุลวัตร ชุณห์วิจิตรา
(http://macs.crma.ac.th/~chunny/cs3303/material/lecture19.pdf)
Introduction
• ซึ่ง Backtracking Algorithm เป็น Algorithm เชิง
กราฟรูปแบบหนึ่ง จึงเรียกว่า Graph Exploring
• ซึ่ง Graph Exploring ก็คือการแตกความคิดในการ
หาคําตอบทุกทางที่เป็นไปได้ จบพบคําตอบ แล้ว
จึงย้อนกลับมายังจุดเริ่มต้น เพื่อให้ได้คําตอบนั้น
อ. กิตตินันท์ น้1อยมณี 7
Knapsack Problem with
Backtracking Algorithm
อ. กิตตินันท์ น้8อยมณี 8
Knapsack Problem with Backtracking Algorithm
• สมมติว่ามีวัตถุอยู่ทั้งหมด 5 ชิ้น (เหมือนเดิม)
• มีวัตถุ 5 ชิ้น ดังนั้นก็ต้องมี 5 ทางเลือก
อ. กิตตินันท์ น้1อยมณี 9
0 1 2 3 4
V 1 6 18 22 28
0 1 2 3 4
W 1 2 5 6 7
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 10
Weight : Value
0 : ….
1 : …. 2 : …. 5 : …. 6 : …. 7 : ….
หมายเหตุ: ทุกๆ ทางต้องกําหนดว่าห้ามเกิน 11 (Wx = 11)
ทุกๆ ทางคือทางที่เราเลือก ดังนั้นจึงจองน้ําหนักในกระเป๋าเอาไว้แล้ว
Wx = 11
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 11
Weight : Value
0 : ….
1 : …. 2 : …. 5 : …. 6 : …. 7 : ….
2 : …. 5 : …. 6 : …. 7 : ….
กรณีแรกนี้ ยังเลือกของมาใส่กระเป๋าได้อีก จึงแยกตามจํานวนของที่เหลือ
Wx = 11
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 12
Weight : Value
0 : ….
1 : …. 2 : …. 5 : …. 6 : …. 7 : ….
2 : …. 5 : …. 6 : …. 7 : ….
5: …. 6 : …. 7 : ….
ซึ่งแยกได้มาจนสุดแล้ว หากเพิ่มความจุ
กระเป๋า ก็ยังแยกกรณีได้อีก
Wx = 11
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 13
Weight : Value
0 : ….
1 : …. 2 : …. 5 : …. 6 : …. 7 : ….
2 : …. 5 : …. 6 : …. 7 : ….
เริ่มทําการคํานวณมูลค่าจากกรณีล่างสุด
ก่อน และเมื่อคํานวณเสร็จ ก็ดูว่า Node
ไหนที่มีค่ามากสุด (Value มากสุด) ก็ให้
เก็บค่านั้นเอาไว้ เพื่อใช้ในการคํานวณ
ครั้งถัดไป
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 14
Weight : Value
0 : ….
1 : …. 2 : …. 5 : …. 6 : …. 7 : ….
เมื่อได้คําตอบจากด้านล่างสุดแล้ว ก็ให้
ย้อนกลับไปด้านบน แล้วนําคําตอบที่ได้
มารวมกับค่าปัจจุบันด้วย และก็
เหมือนเดิม .. เมื่อคํานวณเสร็จแล้วก็ให้
เลือก Node ที่มีค่ามากที่สุด
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 15
Weight : Value
0 : 35
2 : …. 5 : …. 6 : …. 7 : ….
ทําลักษณะเดิมย้อนขึ้นไปเรื่อยๆ ซึ่งจะ
เห็นได้ว่าเส้นทางเดินแรก จะได้คําตอบที่
ดีที่สุดก็คือ Value = 35 นั่นเอง
แต่ถ้าเหลือทางเลือกอื่นๆ อีก ดังนั้นมาดู
กันต่อไป
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 16
Weight : Value
0 : ….
2 : …. 5 : …. 6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
5 : …. 6 : …. 7 : ….
กรณีที่ 2 ยังสามารถจุของได้อีก
ดังนั้นจึงสามารถแยกกรณีย่อย
ออกมาได้อีกครั้งนึง
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 17
Weight : Value
0 : ….
2 : …. 5 : …. 6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
เมื่อไม่มีกรณีอื่นแล้ว จึงเริ่ม
คํานวณค่าได้เลย และเลือกค่าที่
มากที่สุดเหมือนเดิม
5 : 18+0 6 : 22+0 7 : 28+0
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 18
Weight : Value
0 : 34
5 : …. 6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
เมื่อเลือกแล้ว ก็ให้คํานวณย้อนขึ้นมา
เหมือนเดิม ซึ่งเส้นทางนี้จะได้
Value = 34 ซึ่งน้อยกว่าเส้นทางแรก
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 19
Weight : Value
0 : ….
5 : …. 6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
ยังเหลือเส้นทางอื่นอีก ดังนั้นก็
ต้องคํานวณให้หมด
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
6 : ….
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 20
Weight : Value
0 : ….
5 : …. 6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
ซึ่งมีแค่เส้นทางเดียว ดังนั้นจึง
เริ่มคํานวณได้เลย
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
6 : 22+0
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 21
Weight : Value
0 : 40
6 : …. 7 : ….
Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
6 : 22+0
5 : 18+22
เส้นทางนี้ได้ Value = 40
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 22
Weight : Value
0 : ….Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
6 : 22+0
5 : 18+22
เหลือกรณีอื่นๆ อีก ก็ต้องทําจนหมด
6 : 22+0 7 : 28+0
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 23
Weight : Value
0 : ….Wx = 11
5:18+0 6 : 22+0 7 : 28+0
2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
1 : 1+34
5 : 18+0 6 : 22+0 7 : 28+0
2 : 6+28
6 : 22+0
5 : 18+22
ตอนนี้ได้ครบทุกกรณีแล้ว ให้เลือก
เส้นทางที่ได้ Value สูงที่สุดก็เป็นอัน
เสร็จพิธี
6 : 22+0 7 : 28+0
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 24
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 25
เก็บ Value สูดสุดของโหนดลูกไว้ ซึ่ง
ตอนนี้เก็บ 0 ไปก่อน เพราะยังไม่รู้ว่า
จะเลือกลูกคนไหนดี (ที่มากที่สุด)
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 26
i จะเป็นตัวเริ่มต้นว่าเริ่มที่ไหน โดยตัว
สุดท้ายคือตัวที่ n-1 ดังนั้น for ก็มีไว้เพื่อ
แตกโหนดลูก ภายใน for จึงเป็นขั้นตอนการ
สร้างโหนดลูกนั่นเอง โดยโหนดลูกจะต้องมี
น้ําหนักไม่เกินกระเป๋าของโหนดแม่
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 27
ถ้าน้ําหนักไม่เกินก็จะแตกโหนดลูกตรงนี้ทันที
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 28
อันนี้ต้องขยายความกันหน่อย
Knapsack Problem with Backtracking Algorithm
• เมื่อแตกโหนดลูกเสร็จ ก็จะมารวมกับมูลค่าของตัวมันเอง
• โหนดลูกได้อะไรก็ไม่รู้แหละ แต่เมื่อคิดได้ก็จะมาเก็บไว้ใน
ลูกปัจจุบันที่เรากําลังคิดอยู่
• ตรงนี้ลูกจะมี Wx ลดลง เพราะว่า Wx ของโหนดลูกจะ
น้อยลง (ดูตามรูปเลย)
• ดังนั้นมันก็เลยลบอย่างงี้ wx – w[k]
อ. กิตตินันท์ น้1อยมณี 29
Knapsack Problem with Backtracking Algorithm
• i ตอนแรกเอาลูกทุกอันมาคิด ดังนั้นถ้าเราจะคิดต่อ เรา
จะไม่กลับมาคิดชิ้นที่ 0 อีกแล้ว (ตอนที่มันเข้ามาคือ i
และที่ต่อ i ก็คือ k+1 นั่นเอง) มันจะวนไปตามโหนดลูก
เรื่อยๆ
• ส่วน y นั้นควรจะเริ่มต้นเป็น Array เปล่าๆ โดยควรแทรก
เข้าไปใน Code
• แล้วลูกของมันก็จะเอาค่าคืนกลับมา ว่าได้ค่าอะไรมาบ้าง
(แทรกไว้ก่อน if)
อ. กิตตินันท์ น้1อยมณี 30
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 31
ต่อมา b จะเก็บ Value สูงสุดอยู่ ดังนั้น
ถ้าเราเจอลูกที่ดีกว่า (เยอะกว่า) ก็จะ
เปลี่ยนมาใช้ b แทน
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 32
y คือวัตถุที่เลือกจากโหนดลูก และ
คําตอบเป็น Pass by reference ดังนั้น
คําตอบจึงออกไปได้อยู่แล้ว
Knapsack Problem with Backtracking Algorithm
Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value
b := 0
for k := i to n-1
if w[k] <= wx then
a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y )
if a > b then b := a, x := y {k}
Return b
End Algorithm
อ. กิตตินันท์ น้1อยมณี 33
สุดท้ายเราจะได้มูลค่าสูงสุดละจะอยู่ใน b นั่นเอง
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 34
Knapsack Problem with Backtracking Algorithm
อ. กิตตินันท์ น้1อยมณี 35
ลองทําด้วยตัวเองดูนะครับ???

More Related Content

What's hot

ความสัมพันธ์เชิงฟังก์ชัน
ความสัมพันธ์เชิงฟังก์ชันความสัมพันธ์เชิงฟังก์ชัน
ความสัมพันธ์เชิงฟังก์ชันkrurutsamee
 
เฉลยอนุพันธ์
เฉลยอนุพันธ์เฉลยอนุพันธ์
เฉลยอนุพันธ์krurutsamee
 
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่Chon Chom
 
อนุพันธ์
อนุพันธ์อนุพันธ์
อนุพันธ์krurutsamee
 
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจแบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจชัชชญา ช่างเจริญ
 
อินทิเกรต
อินทิเกรตอินทิเกรต
อินทิเกรตkrurutsamee
 
เฉลย Ent48 คณิตศาสตร์1
เฉลย Ent48 คณิตศาสตร์1เฉลย Ent48 คณิตศาสตร์1
เฉลย Ent48 คณิตศาสตร์1Unity' Aing
 
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาสูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาKanomwan Jeab
 
ระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นsuwanpinit
 
เลขโรมัน
เลขโรมันเลขโรมัน
เลขโรมันPreecha Yeednoi
 
ระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นkruthanapornkodnara
 
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันsawed kodnara
 
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...Akimoto Akira
 
เอกสารความสัมพันธ์เชิงฟังก์ชัน
เอกสารความสัมพันธ์เชิงฟังก์ชันเอกสารความสัมพันธ์เชิงฟังก์ชัน
เอกสารความสัมพันธ์เชิงฟังก์ชันkrurutsamee
 

What's hot (20)

ความสัมพันธ์เชิงฟังก์ชัน
ความสัมพันธ์เชิงฟังก์ชันความสัมพันธ์เชิงฟังก์ชัน
ความสัมพันธ์เชิงฟังก์ชัน
 
เฉลยอนุพันธ์
เฉลยอนุพันธ์เฉลยอนุพันธ์
เฉลยอนุพันธ์
 
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่
แบบฝึกทักษะเมทริกซ์ เล่ม 1 ระบบสมการเชิงเส้น เผยแพร่
 
อนุพันธ์
อนุพันธ์อนุพันธ์
อนุพันธ์
 
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจแบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
แบบฝึกทักษะแคลคูลัสเบื้องต้น สว.กจ
 
อินทิเกรต
อินทิเกรตอินทิเกรต
อินทิเกรต
 
59 matrix-101059
59 matrix-10105959 matrix-101059
59 matrix-101059
 
เฉลย Ent48 คณิตศาสตร์1
เฉลย Ent48 คณิตศาสตร์1เฉลย Ent48 คณิตศาสตร์1
เฉลย Ent48 คณิตศาสตร์1
 
Logic problem p
Logic problem pLogic problem p
Logic problem p
 
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญาสูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
 
เมทริกซ์...
เมทริกซ์...เมทริกซ์...
เมทริกซ์...
 
ระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นระบบสมการเชิงเส้น
ระบบสมการเชิงเส้น
 
เลขโรมัน
เลขโรมันเลขโรมัน
เลขโรมัน
 
ระบบสมการเชิงเส้น
ระบบสมการเชิงเส้นระบบสมการเชิงเส้น
ระบบสมการเชิงเส้น
 
Limit
LimitLimit
Limit
 
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชันค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
 
Java-Answer Chapter 07
Java-Answer Chapter 07Java-Answer Chapter 07
Java-Answer Chapter 07
 
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...
E0b89ae0b897e0b897e0b8b5e0b988 3-e0b980e0b8a7e0b881e0b980e0b895e0b8ade0b8a3e0...
 
Cal 2
Cal 2Cal 2
Cal 2
 
เอกสารความสัมพันธ์เชิงฟังก์ชัน
เอกสารความสัมพันธ์เชิงฟังก์ชันเอกสารความสัมพันธ์เชิงฟังก์ชัน
เอกสารความสัมพันธ์เชิงฟังก์ชัน
 

Viewers also liked

(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming
(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming
(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programmingKittinan Noimanee
 
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเองKittinan Noimanee
 
(Big One) C Language - 08 การจัดการไฟล์ข้อมูล
(Big One) C Language - 08 การจัดการไฟล์ข้อมูล(Big One) C Language - 08 การจัดการไฟล์ข้อมูล
(Big One) C Language - 08 การจัดการไฟล์ข้อมูลKittinan Noimanee
 
Software Engineering - 001 introduction
Software Engineering - 001 introductionSoftware Engineering - 001 introduction
Software Engineering - 001 introductionKittinan Noimanee
 
(Big One) C Language - 07 object linkedlist
(Big One) C Language - 07 object linkedlist(Big One) C Language - 07 object linkedlist
(Big One) C Language - 07 object linkedlistKittinan Noimanee
 
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทางKittinan Noimanee
 
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียวKittinan Noimanee
 

Viewers also liked (7)

(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming
(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming
(Big One) C Language - 12 เทคนิคอัลกอริทึมแบบ dynamic-algorithm-programming
 
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง
(Big One) C Language - 09 ฟังก์ชันเรียกตัวเอง
 
(Big One) C Language - 08 การจัดการไฟล์ข้อมูล
(Big One) C Language - 08 การจัดการไฟล์ข้อมูล(Big One) C Language - 08 การจัดการไฟล์ข้อมูล
(Big One) C Language - 08 การจัดการไฟล์ข้อมูล
 
Software Engineering - 001 introduction
Software Engineering - 001 introductionSoftware Engineering - 001 introduction
Software Engineering - 001 introduction
 
(Big One) C Language - 07 object linkedlist
(Big One) C Language - 07 object linkedlist(Big One) C Language - 07 object linkedlist
(Big One) C Language - 07 object linkedlist
 
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง
(Big One) C Language - 06 ฟังก์ชันจัดกาลิงค์ลิสต์แบบสองทาง
 
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว
(Big One) C Language - 05 ฟังก์ชันจัดกาลิงค์ลิสต์แบบทางเดียว
 

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

  • 1. เทคนิคอัลกอริทึมแบบ Graph Exploring (Backtracking Algorithm) Advance Computer Programming รหัสวิชา 32090207 อ. กิตตินันท์ น้1อยมณี 1
  • 2. เนื้อหา 1. Introduction 2. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 2
  • 4. Introduction • Backtracking Algorithm เป็นอีกกระบวนวิธีหนึ่งใน การหาผลลัพธ์ที่เป็นไปได้ • ลักษณะการทํางานจะคล้ายๆ กับ Brute-Force Algorithm ซึ่งเป็นการค้นค้นแบบสายถึก (แบบ ตรงไปตรงมา) อ. กิตตินันท์ น้1อยมณี 4 อ้างอิงข้อมูลดีๆ จาก ร.อ. ตุลวัตร ชุณห์วิจิตรา (http://macs.crma.ac.th/~chunny/cs3303/material/lecture19.pdf)
  • 5. Introduction หมายเหตุ : Brute-Force Algorithm คือการแก้ปัญหาแบบถึก หรือแก้แบบดื้อๆ โดยสั่งให้คอมพิวเตอร์แก้ปัญหาไปเรื่อยๆ หา คําตอบจากความเป็นไปได้ทุกกรณีเลย มีอะไรก็จับแทนค่าให้ หมดทุกค่าที่พอจะเป็นไปได้ โดยส่วนใหญ่มักจะใช้ในกรณีที่คิด อะไรไม่ออกแล้ว เช่น การเปิดรหัสกระเป๋าเดินทางที่มีเลข 3 หลัก เป็นต้น อ. กิตตินันท์ น้1อยมณี 5
  • 6. Introduction • โดย Backtracking จะเข้าไปหาทุกๆ กรณีที่เป็นไป ได้ หากถ้าเลือกที่เข้าไป ไม่สามารถแก้ปัญหาได้ ก็ จะย้อนกลับมาเพื่อเลือกแนวทางถัดไปจนกว่าจะ เจอกรณีที่ถูกต้องจริงๆ อ. กิตตินันท์ น้1อยมณี 6 อ้างอิงข้อมูลดีๆ จาก ร.อ. ตุลวัตร ชุณห์วิจิตรา (http://macs.crma.ac.th/~chunny/cs3303/material/lecture19.pdf)
  • 7. Introduction • ซึ่ง Backtracking Algorithm เป็น Algorithm เชิง กราฟรูปแบบหนึ่ง จึงเรียกว่า Graph Exploring • ซึ่ง Graph Exploring ก็คือการแตกความคิดในการ หาคําตอบทุกทางที่เป็นไปได้ จบพบคําตอบ แล้ว จึงย้อนกลับมายังจุดเริ่มต้น เพื่อให้ได้คําตอบนั้น อ. กิตตินันท์ น้1อยมณี 7
  • 8. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้8อยมณี 8
  • 9. Knapsack Problem with Backtracking Algorithm • สมมติว่ามีวัตถุอยู่ทั้งหมด 5 ชิ้น (เหมือนเดิม) • มีวัตถุ 5 ชิ้น ดังนั้นก็ต้องมี 5 ทางเลือก อ. กิตตินันท์ น้1อยมณี 9 0 1 2 3 4 V 1 6 18 22 28 0 1 2 3 4 W 1 2 5 6 7
  • 10. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 10 Weight : Value 0 : …. 1 : …. 2 : …. 5 : …. 6 : …. 7 : …. หมายเหตุ: ทุกๆ ทางต้องกําหนดว่าห้ามเกิน 11 (Wx = 11) ทุกๆ ทางคือทางที่เราเลือก ดังนั้นจึงจองน้ําหนักในกระเป๋าเอาไว้แล้ว Wx = 11
  • 11. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 11 Weight : Value 0 : …. 1 : …. 2 : …. 5 : …. 6 : …. 7 : …. 2 : …. 5 : …. 6 : …. 7 : …. กรณีแรกนี้ ยังเลือกของมาใส่กระเป๋าได้อีก จึงแยกตามจํานวนของที่เหลือ Wx = 11
  • 12. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 12 Weight : Value 0 : …. 1 : …. 2 : …. 5 : …. 6 : …. 7 : …. 2 : …. 5 : …. 6 : …. 7 : …. 5: …. 6 : …. 7 : …. ซึ่งแยกได้มาจนสุดแล้ว หากเพิ่มความจุ กระเป๋า ก็ยังแยกกรณีได้อีก Wx = 11
  • 13. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 13 Weight : Value 0 : …. 1 : …. 2 : …. 5 : …. 6 : …. 7 : …. 2 : …. 5 : …. 6 : …. 7 : …. เริ่มทําการคํานวณมูลค่าจากกรณีล่างสุด ก่อน และเมื่อคํานวณเสร็จ ก็ดูว่า Node ไหนที่มีค่ามากสุด (Value มากสุด) ก็ให้ เก็บค่านั้นเอาไว้ เพื่อใช้ในการคํานวณ ครั้งถัดไป Wx = 11 5:18+0 6 : 22+0 7 : 28+0
  • 14. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 14 Weight : Value 0 : …. 1 : …. 2 : …. 5 : …. 6 : …. 7 : …. เมื่อได้คําตอบจากด้านล่างสุดแล้ว ก็ให้ ย้อนกลับไปด้านบน แล้วนําคําตอบที่ได้ มารวมกับค่าปัจจุบันด้วย และก็ เหมือนเดิม .. เมื่อคํานวณเสร็จแล้วก็ให้ เลือก Node ที่มีค่ามากที่สุด Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0
  • 15. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 15 Weight : Value 0 : 35 2 : …. 5 : …. 6 : …. 7 : …. ทําลักษณะเดิมย้อนขึ้นไปเรื่อยๆ ซึ่งจะ เห็นได้ว่าเส้นทางเดินแรก จะได้คําตอบที่ ดีที่สุดก็คือ Value = 35 นั่นเอง แต่ถ้าเหลือทางเลือกอื่นๆ อีก ดังนั้นมาดู กันต่อไป Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34
  • 16. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 16 Weight : Value 0 : …. 2 : …. 5 : …. 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 5 : …. 6 : …. 7 : …. กรณีที่ 2 ยังสามารถจุของได้อีก ดังนั้นจึงสามารถแยกกรณีย่อย ออกมาได้อีกครั้งนึง
  • 17. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 17 Weight : Value 0 : …. 2 : …. 5 : …. 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 เมื่อไม่มีกรณีอื่นแล้ว จึงเริ่ม คํานวณค่าได้เลย และเลือกค่าที่ มากที่สุดเหมือนเดิม 5 : 18+0 6 : 22+0 7 : 28+0
  • 18. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 18 Weight : Value 0 : 34 5 : …. 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 เมื่อเลือกแล้ว ก็ให้คํานวณย้อนขึ้นมา เหมือนเดิม ซึ่งเส้นทางนี้จะได้ Value = 34 ซึ่งน้อยกว่าเส้นทางแรก 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28
  • 19. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 19 Weight : Value 0 : …. 5 : …. 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 ยังเหลือเส้นทางอื่นอีก ดังนั้นก็ ต้องคํานวณให้หมด 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28 6 : ….
  • 20. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 20 Weight : Value 0 : …. 5 : …. 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 ซึ่งมีแค่เส้นทางเดียว ดังนั้นจึง เริ่มคํานวณได้เลย 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28 6 : 22+0
  • 21. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 21 Weight : Value 0 : 40 6 : …. 7 : …. Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28 6 : 22+0 5 : 18+22 เส้นทางนี้ได้ Value = 40
  • 22. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 22 Weight : Value 0 : ….Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28 6 : 22+0 5 : 18+22 เหลือกรณีอื่นๆ อีก ก็ต้องทําจนหมด 6 : 22+0 7 : 28+0
  • 23. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 23 Weight : Value 0 : ….Wx = 11 5:18+0 6 : 22+0 7 : 28+0 2 : 6+28 5 : 18+0 6 : 22+0 7 : 28+0 1 : 1+34 5 : 18+0 6 : 22+0 7 : 28+0 2 : 6+28 6 : 22+0 5 : 18+22 ตอนนี้ได้ครบทุกกรณีแล้ว ให้เลือก เส้นทางที่ได้ Value สูงที่สุดก็เป็นอัน เสร็จพิธี 6 : 22+0 7 : 28+0
  • 24. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 24
  • 25. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 25 เก็บ Value สูดสุดของโหนดลูกไว้ ซึ่ง ตอนนี้เก็บ 0 ไปก่อน เพราะยังไม่รู้ว่า จะเลือกลูกคนไหนดี (ที่มากที่สุด)
  • 26. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 26 i จะเป็นตัวเริ่มต้นว่าเริ่มที่ไหน โดยตัว สุดท้ายคือตัวที่ n-1 ดังนั้น for ก็มีไว้เพื่อ แตกโหนดลูก ภายใน for จึงเป็นขั้นตอนการ สร้างโหนดลูกนั่นเอง โดยโหนดลูกจะต้องมี น้ําหนักไม่เกินกระเป๋าของโหนดแม่
  • 27. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 27 ถ้าน้ําหนักไม่เกินก็จะแตกโหนดลูกตรงนี้ทันที
  • 28. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 28 อันนี้ต้องขยายความกันหน่อย
  • 29. Knapsack Problem with Backtracking Algorithm • เมื่อแตกโหนดลูกเสร็จ ก็จะมารวมกับมูลค่าของตัวมันเอง • โหนดลูกได้อะไรก็ไม่รู้แหละ แต่เมื่อคิดได้ก็จะมาเก็บไว้ใน ลูกปัจจุบันที่เรากําลังคิดอยู่ • ตรงนี้ลูกจะมี Wx ลดลง เพราะว่า Wx ของโหนดลูกจะ น้อยลง (ดูตามรูปเลย) • ดังนั้นมันก็เลยลบอย่างงี้ wx – w[k] อ. กิตตินันท์ น้1อยมณี 29
  • 30. Knapsack Problem with Backtracking Algorithm • i ตอนแรกเอาลูกทุกอันมาคิด ดังนั้นถ้าเราจะคิดต่อ เรา จะไม่กลับมาคิดชิ้นที่ 0 อีกแล้ว (ตอนที่มันเข้ามาคือ i และที่ต่อ i ก็คือ k+1 นั่นเอง) มันจะวนไปตามโหนดลูก เรื่อยๆ • ส่วน y นั้นควรจะเริ่มต้นเป็น Array เปล่าๆ โดยควรแทรก เข้าไปใน Code • แล้วลูกของมันก็จะเอาค่าคืนกลับมา ว่าได้ค่าอะไรมาบ้าง (แทรกไว้ก่อน if) อ. กิตตินันท์ น้1อยมณี 30
  • 31. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 31 ต่อมา b จะเก็บ Value สูงสุดอยู่ ดังนั้น ถ้าเราเจอลูกที่ดีกว่า (เยอะกว่า) ก็จะ เปลี่ยนมาใช้ b แทน
  • 32. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 32 y คือวัตถุที่เลือกจากโหนดลูก และ คําตอบเป็น Pass by reference ดังนั้น คําตอบจึงออกไปได้อยู่แล้ว
  • 33. Knapsack Problem with Backtracking Algorithm Algorithm KnapsackBT( w[n], v[n], wx, I, x ) : value b := 0 for k := i to n-1 if w[k] <= wx then a := v[k] + KnapsackBT( w, v, wx-w[k], k+1, y ) if a > b then b := a, x := y {k} Return b End Algorithm อ. กิตตินันท์ น้1อยมณี 33 สุดท้ายเราจะได้มูลค่าสูงสุดละจะอยู่ใน b นั่นเอง
  • 34. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 34
  • 35. Knapsack Problem with Backtracking Algorithm อ. กิตตินันท์ น้1อยมณี 35 ลองทําด้วยตัวเองดูนะครับ???