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