ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทยปัญหาการค้นหาด้วยพละกำลังเยี่ยงควายถึก/เฉลยข้อ 4"
Aoy (คุย | มีส่วนร่วม) |
Aoy (คุย | มีส่วนร่วม) |
||
แถว 20: | แถว 20: | ||
:return(count) | :return(count) | ||
− | GENERARTE(m, | + | GENERARTE(m,l) |
: if l = 0 | : if l = 0 |
รุ่นแก้ไขเมื่อ 06:51, 2 กันยายน 2552
ข้อย่อย 1
อินพุต: เซตของจำนวนเต็ม ซึ่งมีสมาชิกอยู่ ตัว และจำนวนเต็ม
เอาพุต: มีคู่ของจำนวนเต็ม ที่ อยู่กี่คู่
แนวคิด จากโจทย์ เราต้องการหาคู่ของจำนวนเต็ม ที่ ซึ่งในห้องเรียนเราได้รู้วิธีการหา combination มาแล้ว ซึ่งข้อนี้ก็คือการหาซับเซตของ ที่มีขนาด 2 ที่ สมาชิกของซับเซตทั้งสองตัวนี้บวกกันแล้วได้เท่ากับ x ว่ามีทั้งหมดกี่คู่นั่นเอง จากแนวคิดข้างต้น เราจะได้ว่าวัตถุที่เราสนใจคือ combination ของ ที่มีขนาด 2 และเงื่อนไขคือ สมาชิกของซับเซตทั้งสองตัวนี้บวกกันแล้วได้เท่ากับ x นั่นเอง
จากแนวคิดข้างต้น เมื่อเขียนเป็น pseudocode จะได้ดังนี้
ตัวแปรทุกอย่างขออ้างอิงจากในห้องเรียน โดยที่ข้อนี้ให้ l = 2
COUNT(c,x)
- count <-- 0
- if(c[0]+c[1]= x)
- count <-- count + 1
- return(count)
GENERARTE(m,l)
- if l = 0
- return(COUNT(c,x))
- else
- for c[l-1]=0 to c[l-1] = 2
- GENERATE(c[l-1]-1,l-1)
ข้อย่อย 2
อินพุต เอาพุตยังเหมือนข้อย่อย 1
แนวคิด วัตถุที่เราสนใจและเงื่อนไขยังเหมือนข้อย่อย 1 และเนื่องจากเงื่อนไขคือ นั่นคือ ถ้าเราพิจารณาจำนวนเต็ม ใด ๆ เราสามารถถามได้ว่าจำนวนเต็ม ซึ่งเท่ากับ นั้นมีอยู่ในเซต หรือไม่ ได้ในเวลา เมื่อทำเช่นนี้ก็จะทำให้อัลกอริทึมของเราทำงานได้ในเวลา ข้อนี้กำหนดให้ อัลกอริทึม EXIST มีการทำงานคือถามว่าจำนวนเต็ม มีอยู่ในเซต หรือไม่ และใช้เวลาทำงานเป็น
GENERATE(A,x,n)
- count <-- 0
- for i=0 to n-1
- if (EXIST(x-A[i]))
- count <-- count + 1
- if (EXIST(x-A[i]))
- return (count)