ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 4"
Aoy (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย 'ให้ <math> OPT(i) \,</math> มีค่าเป็น <math> yes \,</math> ถ้าตัวอักษรที่ <math> 1 ...…') |
Aoy (คุย | มีส่วนร่วม) |
||
| แถว 17: | แถว 17: | ||
M[i] = 1 | M[i] = 1 | ||
break // ถ้ามีหนึ่งวิธีที่ตัดได้ก็หยุดเลย | break // ถ้ามีหนึ่งวิธีที่ตัดได้ก็หยุดเลย | ||
| + | </geshi> | ||
| + | |||
| + | <geshi lang="c"> | ||
| + | FindSolution(i) | ||
| + | if i = 0 then | ||
| + | do nothing | ||
| + | else | ||
| + | for k = i - 1 downto 1 do | ||
| + | if dict(s[k+1,...,i] and M[k]) then | ||
| + | FindSolution(k) // ถ้าคำสุดท้ายตัดได้ ก็ต้องไปหาว่ากลุ่มคำที่อยู่ก่อนหน้าคำสุดท้ายที่ตัดได้นั้นตัดตรงตำแหน่งไหนต่อไป | ||
| + | print s[k+1,...,i] // พิมพ์คำสุดท้ายออกมา | ||
| + | break | ||
</geshi> | </geshi> | ||
รุ่นแก้ไขปัจจุบันเมื่อ 09:05, 3 ตุลาคม 2552
ให้ มีค่าเป็น ถ้าตัวอักษรที่ สามารถตัดคำได้ หรือมีค่าเป็น ถ้าตัวอักษรที่ ไม่สามารถตัดคำได้
การที่ตัวอักษรตัวที่ สามารถตัดคำได้นั้น หมายความว่า สตริงที่ประกอบด้วยตัวอักษรตัวที่ นั้นต้องมีคำสุดท้ายที่ถาม แล้ว valid และต้องมีส่วนข้างหน้าของคำสุดท้ายนี้ที่สามารถตัดได้เหมือนกัน
ดังนั้น พิจารณากรณีที่ จะได้ว่า
ส่วนกรณีที่ นั้น ถ้ามันจะตัดได้มันต้องเป็นกรณีที่อธิบายไปข้างต้น ดังนั้นสิ่งที่ต้องคิดต่อคือ ถ้าเรารู้แล้วว่ามันตัดได้ แล้วตำแหน่งเริ่มต้นของคำสุดท้าย ที่ทำให้คำนี้ valid และส่วนที่เหลือข้างหน้าตัดได้อีก ควรจะอยู่ตรงไหน สมมติให้เราสามารถตัดคำได้โดยแบ่งตำแหน่งของคำสุดท้ายกับกลุ่มคำที่อยู่ข้างหน้าที่ตำแหน่ง เราจะทำการลองทุก ๆ ค่า ที่เป็นไปได้ ดังนั้นเราจะได้ว่า ถ้า
เขียนเป็น pseudocode ได้ดังนี้
<geshi lang="c"> WORD(s,n)
M[0] = 1
for i = 1 to n do
for k =1 to i-1 do
if M[k] and dict(s[k+1,...,i])
M[i] = 1
break // ถ้ามีหนึ่งวิธีที่ตัดได้ก็หยุดเลย
</geshi>
<geshi lang="c"> FindSolution(i)
if i = 0 then
do nothing
else
for k = i - 1 downto 1 do
if dict(s[k+1,...,i] and M[k]) then
FindSolution(k) // ถ้าคำสุดท้ายตัดได้ ก็ต้องไปหาว่ากลุ่มคำที่อยู่ก่อนหน้าคำสุดท้ายที่ตัดได้นั้นตัดตรงตำแหน่งไหนต่อไป
print s[k+1,...,i] // พิมพ์คำสุดท้ายออกมา
break
</geshi>