ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทยปัญหาการค้นหาด้วยพละกำลังเยี่ยงควายถึก/เฉลยข้อ 8"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(หน้าที่ถูกสร้างด้วย 'อินพตุ:ประพจน์ที่มีตัวแปรไม่เกิน <math>n \,</math> ตัว เอาพ…')
 
 
(ไม่แสดง 1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 5: แถว 5:
 
แนวคิด ตัวแปรแต่ละตัวมีค่าได้สองค่า คือไม่จริงก็เท็จ การที่จะตรวจสอบว่า มีวิธีการกำหนดค่าตัวแปรให้ประพจน์เป็นจริงหรือไม่ต้องทำการลองกำหนดทุก ๆ แบบของตัวแปรที่เป็นไปได้ แต่ในห้องเรียน เราได้มีวิธีการสร้างซับเซตมาแล้ว และถ้าเราตีความใหม่ คือ ถ้า <math>g[i]=1 \,</math> หมายความว่า <math>x_i \,</math> เป็นสมาชิกของซับเซต แต่ถ้า<math>g[i]=2 \,</math> หมายความว่า <math>x_i \,</math> ไม่เป็นสมาชิกของซับเซต ดังนั้นเมื่อสร้างซับเซตได้แล้ว เราก็ทำการกำหนดว่า ถ้า <math>x_i \,</math> เป็นสมาชิกของซับเซตให้ ตัวแปร <math>x_i \,</math> มีค่าความจริงเป็นจริง ไม่เช่นนั้นให้มีค่าความจริงเป็นเท็จ หลังจากนั้นก็เอาวิธีการกำหนดค่าตัวแปรต่าง ๆ เหล่านี้ เรียกถาม subroutine (สมมติว่าชื่อ VERIFY เพื่อคำนวณหาค่าความจริงของประพจน์)
 
แนวคิด ตัวแปรแต่ละตัวมีค่าได้สองค่า คือไม่จริงก็เท็จ การที่จะตรวจสอบว่า มีวิธีการกำหนดค่าตัวแปรให้ประพจน์เป็นจริงหรือไม่ต้องทำการลองกำหนดทุก ๆ แบบของตัวแปรที่เป็นไปได้ แต่ในห้องเรียน เราได้มีวิธีการสร้างซับเซตมาแล้ว และถ้าเราตีความใหม่ คือ ถ้า <math>g[i]=1 \,</math> หมายความว่า <math>x_i \,</math> เป็นสมาชิกของซับเซต แต่ถ้า<math>g[i]=2 \,</math> หมายความว่า <math>x_i \,</math> ไม่เป็นสมาชิกของซับเซต ดังนั้นเมื่อสร้างซับเซตได้แล้ว เราก็ทำการกำหนดว่า ถ้า <math>x_i \,</math> เป็นสมาชิกของซับเซตให้ ตัวแปร <math>x_i \,</math> มีค่าความจริงเป็นจริง ไม่เช่นนั้นให้มีค่าความจริงเป็นเท็จ หลังจากนั้นก็เอาวิธีการกำหนดค่าตัวแปรต่าง ๆ เหล่านี้ เรียกถาม subroutine (สมมติว่าชื่อ VERIFY เพื่อคำนวณหาค่าความจริงของประพจน์)
  
 +
เมื่อนำแนวคิดข้างต้นมาเขียนเป็น pseudocode จะได้ดังนี้
 +
 +
<geshi lang="c">
 +
GENERATE(X,k)
 +
{
 +
    if k=0
 +
        return(VERIFY(g)) // ทำการเรียก VERIFY โดยส่งอะเรย์ g ไปให้ซึ่งค่าแต่ละช่องของ g เก็บ 1 หรือ 2 ซึ่งใน VERIFY จะทำการตรวจสอบเองว่าถ้าเท่ากับ 1 คือจริง 2 คือเท็จ
 +
          else{
 +
        for g[k-1] = 1 to g[k-1] <= 2
 +
            GENERATE(k-1)
 +
    }
 +
}
 +
</geshi>
  
 
เวลาการทำงานของอัลกอริทึมข้างต้นก็จะเท่ากับเวลาการสร้างซับเซตทั้งหมด ซึ่งคือ<math> 2^n \,</math> และแต่ละซับเซตต้องเรียก VERIFY ซึ่งโจทย์กำหนดให้มีเวลาการทำงานเป็น M ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมคือ <math>O(2^n.M)\,</math>
 
เวลาการทำงานของอัลกอริทึมข้างต้นก็จะเท่ากับเวลาการสร้างซับเซตทั้งหมด ซึ่งคือ<math> 2^n \,</math> และแต่ละซับเซตต้องเรียก VERIFY ซึ่งโจทย์กำหนดให้มีเวลาการทำงานเป็น M ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมคือ <math>O(2^n.M)\,</math>

รุ่นแก้ไขปัจจุบันเมื่อ 09:49, 4 กันยายน 2552

อินพตุ:ประพจน์ที่มีตัวแปรไม่เกิน ตัว

เอาพุต:มีวิธีการกำหนดค่าตัวแปรให้ประพจน์เป็นจริงหรือไม่

แนวคิด ตัวแปรแต่ละตัวมีค่าได้สองค่า คือไม่จริงก็เท็จ การที่จะตรวจสอบว่า มีวิธีการกำหนดค่าตัวแปรให้ประพจน์เป็นจริงหรือไม่ต้องทำการลองกำหนดทุก ๆ แบบของตัวแปรที่เป็นไปได้ แต่ในห้องเรียน เราได้มีวิธีการสร้างซับเซตมาแล้ว และถ้าเราตีความใหม่ คือ ถ้า หมายความว่า เป็นสมาชิกของซับเซต แต่ถ้า หมายความว่า ไม่เป็นสมาชิกของซับเซต ดังนั้นเมื่อสร้างซับเซตได้แล้ว เราก็ทำการกำหนดว่า ถ้า เป็นสมาชิกของซับเซตให้ ตัวแปร มีค่าความจริงเป็นจริง ไม่เช่นนั้นให้มีค่าความจริงเป็นเท็จ หลังจากนั้นก็เอาวิธีการกำหนดค่าตัวแปรต่าง ๆ เหล่านี้ เรียกถาม subroutine (สมมติว่าชื่อ VERIFY เพื่อคำนวณหาค่าความจริงของประพจน์)

เมื่อนำแนวคิดข้างต้นมาเขียนเป็น pseudocode จะได้ดังนี้

<geshi lang="c"> GENERATE(X,k) {

    if k=0
        return(VERIFY(g)) // ทำการเรียก VERIFY โดยส่งอะเรย์ g ไปให้ซึ่งค่าแต่ละช่องของ g เก็บ 1 หรือ 2 ซึ่งใน VERIFY จะทำการตรวจสอบเองว่าถ้าเท่ากับ 1 คือจริง 2 คือเท็จ
          else{
        for g[k-1] = 1 to g[k-1] <= 2
            GENERATE(k-1)
    }

} </geshi>

เวลาการทำงานของอัลกอริทึมข้างต้นก็จะเท่ากับเวลาการสร้างซับเซตทั้งหมด ซึ่งคือ และแต่ละซับเซตต้องเรียก VERIFY ซึ่งโจทย์กำหนดให้มีเวลาการทำงานเป็น M ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมคือ