fbpx
วิกิพีเดีย

การตัดแท่ง

การตัดแท่ง (rod cutting) อัลกอริธึมการตัดไม้และวิธีการเพิ่มผลกำไรโดยใช้โปรแกรมแบบไดนามิก

ตัวอย่างการทำงานและวิธีคิด

ตัวอย่าง เรามีไม้มีขนาดความยาวเท่ากับ 8 และการตัดแต่ละท่อนจะมีราคาดังต่อไปนี้

ตารางราคาตามความยาวของท่อนไม้(เก่า)
ความยาว 1 2 3 4 5 6 7 8
ราคา ($) 1 5 8 9 10 17 17 20
ตารางราคาตามความยาวของท่อนไม้(ใหม่)
ความยาว (i) 1 2 3 4 5 6 7 8
ราคา ($) 1 5 8 10 13 17 18 22

จะเห็นได้ว่าจาก ตารางราคาตามความยาวของท่อนไม้(เก่า) จะทำให้ไม้มีราคาสูงสุดแค่ $20 แต่จาก ตารางราคาตามความยาวของท่อนไม้(ใหม่) สามารถทำให้ไม้มีราคาสูงสุดถึง $22 โดยผ่านกระบวนการคิดโดยอัลกอริทึม Rod cutting และมีการคำนวญด้วยมือดังนี้

จากสูตร C(i) = max {Vk + C(i-k)} โดยที่ max = 1<k<i

C(1) = max : V(1) + c(1-1) = 1 + 0 = 1

ค่า max คือ 1

C(2) = max : V(1) + c(2-1) = 1 + 1 = 2

V(2) + c(1-1) = 5 + 0 = 5

ค่า max คือ 5

C(3) = max : V(1) + c(3-1) = 1 + 5 = 6

V(2) + c(2-1) = 5 + 1 = 6

V(3) + c(1-1) = 8 + 0 = 8

ค่า max คือ 8

C(4) = max : V(1) + c(4-1) = 1 + 8 = 9

V(2) + c(3-1) = 5 + 5 = 10

V(3) + c(2-1) = 8 + 1 = 9

V(4) + c(1-1) = 9 + 0 = 9

ค่า max คือ 10

C(5) = max : V(1) + c(5-1) = 1 + 10 = 11

V(2) + c(4-1) = 5 + 8 = 13

V(3) + c(3-1) = 8 + 5 = 13

V(4) + c(2-1) = 9 + 1 = 10

V(5) + c(1-1) = 10 + 0 = 10

ค่า max คือ 13

C(6) = max : V(1) + c(6-1) = 1 + 13 = 14

V(2) + c(5-1) = 5 + 10 = 15

V(3) + c(4-1) = 8 + 8 = 16

V(4) + c(3-1) = 9 + 5 = 14

V(5) + c(2-1) = 10 + 1 = 11

V(6) + c(1-1) = 17 + 0 = 17

ค่า max คือ 17

C(7) = max : V(1) + c(7-1) = 1 + 17 = 18

V(2) + c(6-1) = 5 + 13 = 18

V(3) + c(5-1) = 8 + 10 = 18

V(4) + c(4-1) = 9 + 8 = 17

V(5) + c(3-1) = 10 + 5 = 15

V(6) + c(2-1) = 17 + 1 = 18

V(7) + c(1-1) = 17 + 0 = 17

ค่า max คือ 18

C(8) = max : V(1) + c(8-1) = 1 + 18 = 19

V(2) + c(7-1) = 5 + 17 = 22

V(3) + c(6-1) = 8 + 13 = 21

V(4) + c(5-1) = 9 + 10 = 19

V(5) + c(4-1) = 10 + 8 = 18

V(6) + c(3-1) = 17 + 5 = 22

V(7) + c(2-1) = 17 + 1 = 18

V(8) + c(1-1) = 20 + 0 = 20

ค่า max คือ 22

จะเห็นได้ว่า ราคาที่สามารถทำได้สูงสุด คือ $22 เราสามารถจำหน่ายไม้ได้ 2 แบบ คือ แบบ 1 ท่อนความยาว 8 ที่ราคา $22 และ แบบ 2 ท่อน ที่ความยาว 2 และ 6 อย่างละท่อนที่ราคา $5 และ $17

ตัวอย่างโค้ดการตัดแท่ง (Rod Cutting) ในภาษาไพทรอน (python)

INT_MIN = -32767 def cut_rod(price): n = len(price) val = [0]*(n+1) for i in range(1, n+1): max_val = INT_MIN for j in range(i):  max_val = max(max_val, price[j] + val[i-j-1]) val[i] = max_val print val[i] return val[n] arr = [1,5,8,9,10,17,17,20] print("Maximum Obtainable Value is " + str(cut_rod(arr)))
  1. https://www.youtube.com/watch?v=ElFrskby_7M
  2. https://github.com/keon/algorithms/blob/master/dp/rod_cut.py

การต, ดแท, cutting, ลกอร, มการต, ดไม, และว, การเพ, มผลกำไรโดยใช, โปรแกรมแบบไดนาม, กต, วอย, างการทำงานและว, แก, ไขต, วอย, าง, เราม, ไม, ขนาดความยาวเท, าก, และการต, ดแต, ละท, อนจะม, ราคาด, งต, อไปน, ตารางราคาตามความยาวของท, อนไม, เก, ความยาว, 8ราคา, 20ตารางราคาต. kartdaethng rod cutting xlkxrithumkartdimaelawithikarephimphlkairodyichopraekrmaebbidnamiktwxyangkarthanganaelawithikhid aekikhtwxyang eramiimmikhnadkhwamyawethakb 8 aelakartdaetlathxncamirakhadngtxipni tarangrakhatamkhwamyawkhxngthxnim eka khwamyaw 1 2 3 4 5 6 7 8rakha 1 5 8 9 10 17 17 20tarangrakhatamkhwamyawkhxngthxnim ihm khwamyaw i 1 2 3 4 5 6 7 8rakha 1 5 8 10 13 17 18 22caehnidwacak tarangrakhatamkhwamyawkhxngthxnim eka cathaihimmirakhasungsudaekh 20 aetcak tarangrakhatamkhwamyawkhxngthxnim ihm samarththaihimmirakhasungsudthung 22 odyphankrabwnkarkhidodyxlkxrithum Rod cutting aelamikarkhanwydwymuxdngnicaksutr C i max Vk C i k odythi max 1 lt k lt iC 1 max V 1 c 1 1 1 0 1kha max khux 1C 2 max V 1 c 2 1 1 1 2V 2 c 1 1 5 0 5kha max khux 5C 3 max V 1 c 3 1 1 5 6V 2 c 2 1 5 1 6V 3 c 1 1 8 0 8kha max khux 8C 4 max V 1 c 4 1 1 8 9V 2 c 3 1 5 5 10V 3 c 2 1 8 1 9V 4 c 1 1 9 0 9kha max khux 10C 5 max V 1 c 5 1 1 10 11V 2 c 4 1 5 8 13V 3 c 3 1 8 5 13V 4 c 2 1 9 1 10V 5 c 1 1 10 0 10kha max khux 13C 6 max V 1 c 6 1 1 13 14V 2 c 5 1 5 10 15V 3 c 4 1 8 8 16V 4 c 3 1 9 5 14V 5 c 2 1 10 1 11V 6 c 1 1 17 0 17kha max khux 17C 7 max V 1 c 7 1 1 17 18V 2 c 6 1 5 13 18V 3 c 5 1 8 10 18V 4 c 4 1 9 8 17V 5 c 3 1 10 5 15V 6 c 2 1 17 1 18V 7 c 1 1 17 0 17kha max khux 18C 8 max V 1 c 8 1 1 18 19V 2 c 7 1 5 17 22V 3 c 6 1 8 13 21V 4 c 5 1 9 10 19V 5 c 4 1 10 8 18V 6 c 3 1 17 5 22V 7 c 2 1 17 1 18V 8 c 1 1 20 0 20kha max khux 22caehnidwa rakhathisamarththaidsungsud khux 22 erasamarthcahnayimid 2 aebb khux aebb 1 thxnkhwamyaw 8 thirakha 22 aela aebb 2 thxn thikhwamyaw 2 aela 6 xyanglathxnthirakha 5 aela 17 1 twxyangokhdkartdaethng Rod Cutting inphasaiphthrxn python aekikhINT MIN 32767 def cut rod price n len price val 0 n 1 for i in range 1 n 1 max val INT MIN for j in range i max val max max val price j val i j 1 val i max val print val i return val n arr 1 5 8 9 10 17 17 20 print Maximum Obtainable Value is str cut rod arr 2 https www youtube com watch v ElFrskby 7M https github com keon algorithms blob master dp rod cut pyekhathungcak https th wikipedia org w index php title kartdaethng amp oldid 7624680, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม