ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต I/เฉลยข้อ 6"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 2: แถว 2:
  
 
ให้ <math> OPT(i,j) \,</math> คือความยาวของลำดับย่อยที่เป็นพาลินโดรมที่ยาวที่สุดของสตริง <math> s[i,i+1,...,j] \,</math>
 
ให้ <math> OPT(i,j) \,</math> คือความยาวของลำดับย่อยที่เป็นพาลินโดรมที่ยาวที่สุดของสตริง <math> s[i,i+1,...,j] \,</math>
 +
 +
พิจารณากรณีที่ <math> i > j \,</math> จะได้ว่า <math> OPT(i,j) = 0 \,</math>
 +
 +
กรณีที่ <math> i=j \,</math> จะได้ว่า <math> OPT(1,1)=1 \,</math>
 +
 +
ส่วนกรณีที่เหลือจะได้ว่า <math> OPT(i,j)= max(OPT(i+1,j),OPT(i,j-1))\,</math> ถ้า <math> s[i] != s[j] \,</math>
 +
 +
หรือ <math> OPT(i,j) = max(OPT(i+1,j),OPT(i,j-1),OPT(i+1,j-1))\,</math> ถ้า <math> s[i] = s[j] \,</math>
 +
 +
เขียนเป็น pseudocode ได้ดังนี้
 +
 +
<geshi lang="c">
 +
PALINDROMIC(s,n)
 +
    i =1
 +
    j = n
 +
    if i < j then
 +
        return 0
 +
    else if i = j then
 +
        return 1
 +
    else
 +
        if s[i] != s[j] then
 +
            M[i,j] = max(M[i+1,j],M[i,j-1])
 +
        else
 +
            M[i,j] = max(M[i+1,j],M[i,j-1],M[i+1,j-1])
 +
    return M[1,n]
 +
</geshi>

รุ่นแก้ไขเมื่อ 08:30, 3 ตุลาคม 2552

เนื่องจากพาลินโดรมคือสตริงที่อ่านจากซ้ายไปขวาหรือจากขวาไปซ้ายแล้วจะเหมือนกัน ดังนั้นการตรวจสอบว่าสตริงเป็นพาลินโดรมหรือไม่ เราก็ควรตรวจสอบว่าตัวอักษรตัวแรกของทางซ้ายกับตัวอักษรตัวสุดท้ายของทางขวาเหมือนกันหรือไม่ ถ้าเหมือนแล้วจะทำอะไร และถ้าไม่เหมือนจะทำอะไร

ให้ คือความยาวของลำดับย่อยที่เป็นพาลินโดรมที่ยาวที่สุดของสตริง

พิจารณากรณีที่ จะได้ว่า

Error

Too many requests (f061ab2)

กรณีที่

Error

Too many requests (f061ab2)

จะได้ว่า

ส่วนกรณีที่เหลือจะได้ว่า

Error

Too many requests (f061ab2)

ถ้า

หรือ

Error

Too many requests (f061ab2)

ถ้า

เขียนเป็น pseudocode ได้ดังนี้

<geshi lang="c"> PALINDROMIC(s,n)

   i =1
   j = n
   if i < j then
       return 0
   else if i = j then
       return 1
   else
       if s[i] != s[j] then
           M[i,j] = max(M[i+1,j],M[i,j-1])
       else
           M[i,j] = max(M[i+1,j],M[i,j-1],M[i+1,j-1])
   return M[1,n]

</geshi>

รายการเลือกการนำทาง