ผลต่างระหว่างรุ่นของ "204512/บรรยาย 4"
(ไม่แสดง 75 รุ่นระหว่างกลางโดยผู้ใช้ 7 คน) | |||
แถว 1: | แถว 1: | ||
− | + | {{หัวคำบรรยาย|204512}} | |
− | + | '''จดบันทึกคำบรรยายโดย:''' | |
+ | :นายมนต์ชัย สารทอง | ||
+ | :นายอุกฤษณ์ กุลดิลก 50653971 | ||
+ | บทนี้จะกล่าวถึงทฤษฎีความน่าจะเป็นพื้นฐาน จากนั้นจะพิจารณาโครงสร้างข้อมูลแบบสุ่มสองแบบ คือ skip list และ universal hash | ||
+ | ==Balls & Bins== | ||
+ | :มีถัง n ถัง | ||
+ | :มีบอล n ลูก | ||
+ | :<math>{\rm Pr[first\ bin\ is\ empty] = }\left( {{\rm 1 - }\frac{{\rm 1}}{{\rm n}}} \right)^{\rm n} </math> | ||
+ | ==Random Variable== | ||
+ | ;นิยาม | ||
+ | :สำหรับตัวแปรสุ่ม X | ||
+ | :<math>\sum\limits_{i=-\infty}^\infty {i \cdot \Pr [X = i]} </math> | ||
+ | ---- | ||
+ | '''<u>Ex.1</u>''' มีลูกเต๋า 2 ลูก โยนทีละลูก | ||
+ | ให้ตัวแปรสุ่ม | ||
+ | :<math>Y_1 = </math>แต้มบนลูกเต๋าลูกที่ 1 | ||
+ | :<math>Y_2 = </math>แต้มบนลูกเต๋าลูกที่ 2 | ||
+ | :<math>Y = </math>แต้มรวม | ||
+ | :<math>E[Y_1] = (1 + 2 + 3 + ... + 6) \cdot \frac{1}{6} = 3.5</math> | ||
+ | :<math>E[Y_2] = (1 + 2 + 3 + ... + 6) \cdot \frac{1}{6} = 3.5</math> | ||
+ | :<math>E[Y] = 2 \cdot \frac{1}{6} \cdot \frac{1}{6} + 3 \cdot 2 \cdot \frac{1}{{36}} + 4 \cdot 3 \cdot \frac{1}{{36}} + 5 \cdot ..... = 7</math> | ||
+ | ==Linearity of Expectation== | ||
+ | {{กล่องเทา|สำหรับตัวแปรสุ่ม X, Y | ||
+ | <center><math>E[X+Y] = E[X]+E[Y]</math></center>}} | ||
+ | จาก '''<u>Ex.1</u>''' ให้ตัวแปรสุ่ม X แทนจำนวนถังว่าง | ||
+ | :<math>E[X] = ?</math> | ||
+ | ให้ตัวแปรสุ่ม | ||
+ | :<math>X_i = 1</math> ถ้าถังที่ i ว่าง | ||
+ | :<math>X_i = 0</math> กรณีอื่นๆ | ||
+ | สังเกตว่า | ||
+ | :<math>X = \sum\limits_{i = 1}^n {X_i } </math> | ||
+ | ดังนั้น | ||
+ | :<math>E[X] = E[\sum\limits_{i = 1}^n {X_i } ]</math> | ||
+ | :<math>E[X] = \sum\limits_{i = 1}^n {E[X_i] } </math> โดย Linearity of Expectation | ||
+ | ---- | ||
+ | :<math>E[X_i] = 0 \cdot Pr[X_i = 0] + 1 \cdot Pr[X_i = 1]</math> | ||
+ | :<math>E[X_i] = Pr[X_i = 1]\,</math> | ||
+ | :<math>E[X_i] = (1-\frac{1}{n})^n</math> | ||
+ | :<math>E[X] = \sum\limits_{i = 1}^n {E[X_i ]} </math> | ||
+ | :<math>E[X] = \sum\limits_{i = 1}^n {(1-\frac{1}{n})^n} </math> | ||
+ | :<math>E[X] = n(1-\frac{1}{n})^n</math> | ||
+ | :<math>E[X] \approx \frac{n}{e}</math> | ||
+ | ---- | ||
+ | :<math>1+X \le e^X</math> | ||
+ | :<math>(1-\frac{1}{n})^n \le (e^{-\frac{1}{n}}) = e^{-1}</math> | ||
+ | :<math>(1-\frac{t}{n})^n \le (e^{-\frac{t}{n}}) = e^{-t}</math> | ||
+ | ---- | ||
+ | มีบอล m ลูก | ||
+ | มีถัง n ถัง | ||
+ | ให้ <math>X = </math> จำนวนถังว่าง | ||
+ | หา E[X] | ||
+ | :<math>E[X] = E[\sum\limits_{i = 1}^n {X_i}]</math> | ||
+ | :<math>E[X] = \sum\limits_{i = 1}^n {E[X_i]}</math> | ||
+ | :<math>E[X] = \sum\limits_{i = 1}^n {(1-\frac{1}{n})^m}</math> | ||
+ | :<math>E[X] = n(1-\frac{1}{n})^m</math> | ||
+ | ต้องโยนบอลกี่ลูก X จะเข้าใกล้ 0 | ||
+ | :<math>E[X] = n(1-\frac{1}{n})^m</math> | ||
+ | :<math>E[X] = [n(1-\frac{1}{n})^n]^\frac{m}{n}</math> | ||
+ | :<math>E[X] \le n(e^{-1})^\frac{m}{n} = \frac{n}{e^\frac{m}{n}}</math> | ||
+ | :<math>\frac{n}{e^\frac{m}{n}} = 1</math> | ||
+ | :<math>n = e^\frac{m}{n}</math> | ||
+ | :<math>ln\ n = \frac{m}{n}</math> | ||
+ | :<math>m = n\ ln\ n</math> | ||
+ | ให้ <math>m = cn\ ln\ n</math> | ||
+ | :<math>E[X] = n(1-\frac{1}{n})^{cn\ ln\ n}</math> | ||
+ | :<math>E[X] \le \frac{n}{n^c} = \frac{1}{n^{c-1}}</math> | ||
+ | ---- | ||
+ | |||
+ | |||
+ | ;Thm | ||
+ | :สำหรับตัวแปรสุ่ม X, Y | ||
+ | :<math>E[X+Y] = E[X] + E[Y]</math> | ||
+ | |||
+ | ;Proof | ||
+ | :<math>E[X+Y] = \sum\limits_{i=-\infty}^\infty {i \cdot Pr[X+Y=i]}</math> | ||
+ | :<math>E[X+Y] = \sum\limits_{i=-\infty}^\infty {i \cdot [\sum\limits_{j=-\infty}^\infty {Pr[X=j, Y=i-j]}] }</math> | ||
+ | :ให้ <math>i = a + b, j = b</math> | ||
+ | :<math>E[X+Y] = \sum\limits_{a=-\infty}^\infty {\sum\limits_{b=-\infty}^\infty {(a+b)Pr[X=b, Y=a]}}</math> | ||
+ | :<math>E[X+Y] = \sum\limits_{a=-\infty}^\infty {\sum\limits_{b=-\infty}^\infty {a \cdot Pr[X=b, Y=a]}} + \sum\limits_{a=-\infty}^\infty {\sum\limits_{b=-\infty}^\infty {b \cdot Pr[X=b, Y=a]}}</math> | ||
+ | :<math>E[X+Y] = \sum\limits_{a=-\infty}^\infty {a[\sum\limits_{b=-\infty}^\infty {Pr[X=b, Y=a]}]} + \sum\limits_{b=-\infty}^\infty {b[\sum\limits_{a=-\infty}^\infty {Pr[X=b, Y=a]}]}</math> | ||
+ | :<math>E[X+Y] = Pr[Y=a]+Pr[X=b]</math> | ||
+ | :<math>E[X+Y] = E[X] + E[Y]</math> ตามต้องการ | ||
+ | |||
+ | == ตัวแปรสุ่มที่สำคัญ == | ||
+ | |||
+ | === 1. ตัวแปรสุ่มแบบ indicator === | ||
+ | มีตัวแปรสุ่มที่มีค่า 0 หรือ 1 สังเกตว่า | ||
+ | |||
+ | {{thm-box| | ||
+ | '''Proposition:''' ถ้า X เป็น Indicator R.V. | ||
+ | <center><math>E[X] = \Pr[X=1]</math></center>}} | ||
+ | {{begin-pf}} | ||
+ | '''Proof:''' จากนิยาม เราได้ว่า <math>E[X] = 0\cdot\Pr[X=0] + 1\cdot\Pr[X=1] = \Pr[X=1]</math> | ||
+ | {{end-pf}} | ||
+ | === 2. ตัวแปรสุ่มแบบ binomial === | ||
+ | :มีการทดลองสำเร็จด้วยความน่าจะเป็น p | ||
+ | :ทดลอง n ครั้ง แบบไม่ขึ้นต่อกัน | ||
+ | :จำนวนครั้งของการทดลองที่สำเร็จ จะเป็นตัวแปรสุ่มแบบ | ||
+ | :binomial => มี พารามิเตอร์ (n, p) | ||
+ | สำหรับตัวแปรสุ่ม X แบบ binomial ที่มี parameter (n, p) | ||
+ | ให้ | ||
+ | :<math>X_i = 1 </math> ถ้าการทดลองครั้งที่ i สำเร็จ | ||
+ | :<math>X_i = 0 </math> กรณีอื่นๆ | ||
+ | :<math>X = \sum\limits_{i=1}^n {X_i}</math> | ||
+ | ดังนั้น | ||
+ | :<math> E[X] = E[X_1 + X_2 + ... + X_n] = \sum\limits_{i=1}^n {E[X_i]} = np</math> | ||
+ | :<math>Pr[X=a] = C(n,a) \cdot p^a(1-p)^{n-a}</math> | ||
− | == | + | เมื่อ <math>C(n,a)</math> แทนสัมประสิทธิ์ทวินาม ที่มีค่าเท่ากับ |
− | : | + | <center><math>\frac{n!}{a!(n-a)!}</math></center> |
− | : | + | ทั้งนี้เนื่องจาก ในการทดลอง n ครั้ง จะทดลองสำเร็จ a ครั้ง มีจำนวนรูปแบบที่เป็นไปได้ทั้งหมดเท่ากับ <math>C(n,a)</math>แบบ และแต่ละแบบ มีความน่าจะเป็นที่จะเกิดขึ้นเท่ากับ <math>p^a(1-p)^{n-a}</math> |
− | <math>{\ | + | |
+ | === 3. Geometric R.V. === | ||
+ | :มีเหรียญที่ออกหัวด้วยความน่าจะเป็น p | ||
+ | :จำนวนครั้งที่โยนจนได้หัว เป็นตัวแปรสุ่มแบบ geometric [พารามิเตอร์ p] | ||
+ | |||
+ | :ให้ r.v. X เป็นตัวแปรสุ่มแบบ geometric ที่มี parameter p | ||
+ | |||
+ | :<math>Pr[X=i] = p(1-p)^{i-1}</math> | ||
+ | :<math>E[X] = \frac{1}{p}</math> | ||
+ | |||
+ | == Skip List == | ||
+ | |||
+ | #---------------->O----------># | ||
+ | | | ||
+ | #---->O---------->O------->O-># | ||
+ | | | | | ||
+ | #---->O------->O->O---->O->O-># | ||
+ | | | | | | | ||
+ | #->O->O->O->O->O->O->O->O->O-># | ||
+ | |||
+ | ในการตัดสินใจว่าแต่ละโหนดจะมีความสูงขึ้นไปเท่าไหร่ จะใช้ความน่าจะเป็น เช่น การโยนเหรียญ เมื่อมีการเพิ่มข้อมูลใหม่ จะค้นหาจนกระทั่งพบช่องที่สามารถลงได้ จากนั้นก็ใช้ความน่าเป็น ในการดูว่าจะให้โหนดที่เพิ่มลงไปใหม่ควรจะมีความสูงเท่าไหร่ | ||
+ | |||
+ | เมื่อกล่าวว่าเหตุการณ์ใดเกิดขึ้นด้วยความน่าจะเป็นสูง จะหมายความว่า เหตุการณ์ดังกล่าวขะไม่เกิดขึ้นด้วยความน่าจะเป็นไม่เกิน <math>\frac{1}{n^c}</math> เมื่อ c>0 และ n คือ parameter ของระบบ | ||
+ | |||
+ | {{thm-box|'''Lemma:''' skip list ที่มีข้อมูล ''n'' ตัวจะมีความสูง ''O''(log ''n'') ด้วยความน่าจะเป็นสูง}} | ||
+ | {{begin-pf}} | ||
+ | '''Proof:''' พิจารณาข้อมูล x ใดๆ ความน่าจะเป็นที่ระดับของ x>k | ||
+ | :'''Pr[ระดับ x>k] =''' <math>\frac{1}{2^k}</math> | ||
+ | ให้เหตุการณ์ <math>A_i</math> แทนเหตุการณ์ที่ข้อมูลตัวที่ i มีระดับมากกว่า k | ||
+ | :'''Pr[<math>A_i</math>] = <math>\frac{1}{2^k}</math> | ||
+ | ให้เหตุการณ์ A แทนเหตุการณ์ที่มีข้อมูลบางตัวมีระดับมากกว่า k | ||
+ | :<math>A = \bigcup_{i=1}^{n} A_i</math> | ||
+ | ดังนั้น | ||
+ | :<math>Pr[A] \le \sum_{i=1}^k Pr[A_i] = \frac{n}{2^k}</math> | ||
+ | ให้ K = c log n = O(log n) จะได้ว่า | ||
+ | :'''Pr[ความสูงไม่เกิน k] = 1 - Pr[มีข้อมูลบางตัวมีระดับมากกว่า k]''' <math>\le 1 - \frac{n}{2^k} = 1 - \frac{n}{2^{clogn}} = 1 - \frac{1}{n^{c-1}}</math> | ||
+ | ถ้า c>2 , เหตุการณ์ดังกล่าวจะเกิดด้วยความน่าจะเป็นสูง | ||
+ | {{end-pf}} | ||
+ | |||
+ | :'''Pr[เดิน k node] =''' <math>k\cdot\frac{1}{2^k}</math> | ||
+ | |||
+ | {{thm-box|'''Theorem:''' Expected search time ของ skip list ที่มีข้อมูล ''n'' ตัว คือ ''O''(log ''n'')}} | ||
+ | {{begin-pf}} | ||
+ | '''<u>Proof</u>''' | ||
+ | :ให้ H = ความสูง = O(log n) | ||
+ | :ให้ <math>T_i</math> เป็นเวลาที่ใช้ในชั้นที่ i | ||
+ | :<math>T = \sum_{i=1}^H T_i</math> | ||
+ | :<math>E[T] = E[\sum_{i=1}^H T_i] = \sum_{i=1}^H E[T_i] = O(\log n)</math> | ||
+ | {{end-pf}} | ||
+ | |||
+ | == Hashing == | ||
+ | ในส่วนนี้ จะให้ <math>{\mathbb K}=\{1,\ldots,M\}</math> แทนเซตของคีย์ | ||
+ | และ <math>{\mathbb I}=\{1,\ldots,N\}</math> แืทนเซตของดัชนีในตาราง | ||
− | + | hash function <math>h:{\mathbb K}\rightarrow{\mathbb I}</math> จะส่งคีย์ไปยังตำแหน่งในตาราง | |
− | + | {{def-box| | |
− | + | '''นิยาม:''' Family of hash function <math>\mathcal H</math> เป็น '''2-universal''' ถ้า สำหรับทุก ๆ | |
+ | สมาชิก <math>x,\ y \in\ {\mathbb K}</math> ที่ <math>x \ne y</math>, | ||
+ | <center><math>\Pr_{h \in H}[h(x) \ne h(y)] \le \frac{1}{N}</math></center>}} | ||
− | |||
− | -- | + | เลือกจำนวนเฉพาะ p > M<br /> |
− | : | + | ให้ <math>h_{ab}</math> สำหรับ <math> a \in {1, ..., p-1}</math> และ <math>b \in {0, ..., p-1}</math> |
+ | :<math>h_{ab}(x) = ((ax+b) \bmod p) \bmod N</math> | ||
+ | :<math>|H| = (p-1)p</math> | ||
− | |||
− | |||
− | |||
− | |||
− | :<math> | + | ;Lemma |
− | :<math> | + | :สำหรับ x, y ที่ <math>x \ne y</math> |
− | :<math> | + | :จำนวน <math>h_{ab} \in H</math> ที่ |
− | :<math> | + | :<math>h_{ab}(x) = h_{ab}(y)</math> |
− | + | :ไม่เกิน <math>\frac{(p-1)p}{N}</math> ตัว | |
− | |||
− | |||
− | |||
− | |||
− | : | + | ;Proof |
+ | :ให้ | ||
+ | ::<math>ax+b \equiv r \pmod p</math> | ||
+ | ::<math>ay+b \equiv s \pmod p</math> | ||
− | :<math> | + | :(1) ถ้า <math>x \ne y, r \not\equiv s \pmod p</math> |
+ | ::พิสูจน์ด้วยข้อขัดแย้ง | ||
+ | :::assume | ||
+ | ::::<math>ax \equiv ay \pmod p</math> | ||
+ | ::::x = y | ||
− | : | + | :(2) ถ้า <math>h_{ab}(x) = h_{ab}(y)</math> แล้ว <math>r \equiv s \pmod N</math> |
− | + | ::จำนวนคู่ r, s ที่สอดคล้อง <math>\le p[\frac{p}{N} - 1] \le \frac{p(p-1)}{N}</math> | |
− | ::<math> | ||
− | : | + | :(3) พิจารณา คู่ r, s คู่หนึ่ง ที่ <math>r \equiv s \pmod N</math> |
− | ::<math> | + | ::จะหาค่า a, b ที่ |
+ | :::<math>ax+b \equiv r \pmod p</math> | ||
+ | :::<math>ay+b \equiv s \pmod p</math> | ||
+ | :::<math>ax-ay \equiv r-s \pmod p</math> | ||
+ | :::<math>a(x-y) \equiv r-s \pmod p</math> | ||
+ | :::<math>a \equiv (r-s) \cdot (x-y)^{-1} \pmod p</math> | ||
+ | ::แต่ละคู่ r, s จะมี a, b คู่เดียว | ||
− | + | จาก (1), (2), (3), มี a, b ไม่เกิน <math>\frac{(p-1)p}{N}</math> คู่ | |
− | |||
− |
รุ่นแก้ไขปัจจุบันเมื่อ 15:04, 8 ตุลาคม 2550
บันทึกคำบรรยายวิชา 204512 นี้ เป็นบันทึกที่นิสิตเขียนขึ้น เนื้อหาโดยมากยังไม่ผ่านการตรวจสอบอย่างละเอียด การนำไปใช้ควรระมัดระวัง
จดบันทึกคำบรรยายโดย:
- นายมนต์ชัย สารทอง
- นายอุกฤษณ์ กุลดิลก 50653971
บทนี้จะกล่าวถึงทฤษฎีความน่าจะเป็นพื้นฐาน จากนั้นจะพิจารณาโครงสร้างข้อมูลแบบสุ่มสองแบบ คือ skip list และ universal hash
เนื้อหา
Balls & Bins
- มีถัง n ถัง
- มีบอล n ลูก
Random Variable
- นิยาม
- สำหรับตัวแปรสุ่ม X
Ex.1 มีลูกเต๋า 2 ลูก โยนทีละลูก
ให้ตัวแปรสุ่ม
- แต้มบนลูกเต๋าลูกที่ 1
- แต้มบนลูกเต๋าลูกที่ 2
- แต้มรวม
Linearity of Expectation
สำหรับตัวแปรสุ่ม X, Y
จาก Ex.1 ให้ตัวแปรสุ่ม X แทนจำนวนถังว่าง
ให้ตัวแปรสุ่ม
- ถ้าถังที่ i ว่าง
- กรณีอื่นๆ
สังเกตว่า
ดังนั้น
- โดย Linearity of Expectation
มีบอล m ลูก
มีถัง n ถัง
ให้ จำนวนถังว่าง
หา E[X]
ต้องโยนบอลกี่ลูก X จะเข้าใกล้ 0
ให้
- Thm
- สำหรับตัวแปรสุ่ม X, Y
- Proof
- ให้
- ตามต้องการ
ตัวแปรสุ่มที่สำคัญ
1. ตัวแปรสุ่มแบบ indicator
มีตัวแปรสุ่มที่มีค่า 0 หรือ 1 สังเกตว่า
Proposition: ถ้า X เป็น Indicator R.V.
Proof: จากนิยาม เราได้ว่า
2. ตัวแปรสุ่มแบบ binomial
- มีการทดลองสำเร็จด้วยความน่าจะเป็น p
- ทดลอง n ครั้ง แบบไม่ขึ้นต่อกัน
- จำนวนครั้งของการทดลองที่สำเร็จ จะเป็นตัวแปรสุ่มแบบ
- binomial => มี พารามิเตอร์ (n, p)
สำหรับตัวแปรสุ่ม X แบบ binomial ที่มี parameter (n, p)
ให้
- ถ้าการทดลองครั้งที่ i สำเร็จ
- กรณีอื่นๆ
ดังนั้น
เมื่อ แทนสัมประสิทธิ์ทวินาม ที่มีค่าเท่ากับ
ทั้งนี้เนื่องจาก ในการทดลอง n ครั้ง จะทดลองสำเร็จ a ครั้ง มีจำนวนรูปแบบที่เป็นไปได้ทั้งหมดเท่ากับ แบบ และแต่ละแบบ มีความน่าจะเป็นที่จะเกิดขึ้นเท่ากับ
3. Geometric R.V.
- มีเหรียญที่ออกหัวด้วยความน่าจะเป็น p
- จำนวนครั้งที่โยนจนได้หัว เป็นตัวแปรสุ่มแบบ geometric [พารามิเตอร์ p]
- ให้ r.v. X เป็นตัวแปรสุ่มแบบ geometric ที่มี parameter p
Skip List
#---------------->O----------># | #---->O---------->O------->O-># | | | #---->O------->O->O---->O->O-># | | | | | #->O->O->O->O->O->O->O->O->O->#
ในการตัดสินใจว่าแต่ละโหนดจะมีความสูงขึ้นไปเท่าไหร่ จะใช้ความน่าจะเป็น เช่น การโยนเหรียญ เมื่อมีการเพิ่มข้อมูลใหม่ จะค้นหาจนกระทั่งพบช่องที่สามารถลงได้ จากนั้นก็ใช้ความน่าเป็น ในการดูว่าจะให้โหนดที่เพิ่มลงไปใหม่ควรจะมีความสูงเท่าไหร่
เมื่อกล่าวว่าเหตุการณ์ใดเกิดขึ้นด้วยความน่าจะเป็นสูง จะหมายความว่า เหตุการณ์ดังกล่าวขะไม่เกิดขึ้นด้วยความน่าจะเป็นไม่เกิน เมื่อ c>0 และ n คือ parameter ของระบบ
Lemma: skip list ที่มีข้อมูล n ตัวจะมีความสูง O(log n) ด้วยความน่าจะเป็นสูง
Proof: พิจารณาข้อมูล x ใดๆ ความน่าจะเป็นที่ระดับของ x>k
- Pr[ระดับ x>k] =
ให้เหตุการณ์ แทนเหตุการณ์ที่ข้อมูลตัวที่ i มีระดับมากกว่า k
- Pr[] =
ให้เหตุการณ์ A แทนเหตุการณ์ที่มีข้อมูลบางตัวมีระดับมากกว่า k
ดังนั้น
ให้ K = c log n = O(log n) จะได้ว่า
- Pr[ความสูงไม่เกิน k] = 1 - Pr[มีข้อมูลบางตัวมีระดับมากกว่า k]
ถ้า c>2 , เหตุการณ์ดังกล่าวจะเกิดด้วยความน่าจะเป็นสูง
- Pr[เดิน k node] =
Theorem: Expected search time ของ skip list ที่มีข้อมูล n ตัว คือ O(log n)
Proof
- ให้ H = ความสูง = O(log n)
- ให้ เป็นเวลาที่ใช้ในชั้นที่ i
Hashing
ในส่วนนี้ จะให้ แทนเซตของคีย์ และ แืทนเซตของดัชนีในตาราง
hash function จะส่งคีย์ไปยังตำแหน่งในตาราง
นิยาม: Family of hash function เป็น 2-universal ถ้า สำหรับทุก ๆ สมาชิก ที่ ,
เลือกจำนวนเฉพาะ p > M
ให้ สำหรับ และ
- Lemma
- สำหรับ x, y ที่
- จำนวน ที่
- ไม่เกิน ตัว
- Proof
- ให้
- (1) ถ้า
- พิสูจน์ด้วยข้อขัดแย้ง
- assume
- x = y
- assume
- พิสูจน์ด้วยข้อขัดแย้ง
- (2) ถ้า แล้ว
- จำนวนคู่ r, s ที่สอดคล้อง
- (3) พิจารณา คู่ r, s คู่หนึ่ง ที่
- จะหาค่า a, b ที่
- แต่ละคู่ r, s จะมี a, b คู่เดียว
- จะหาค่า a, b ที่
จาก (1), (2), (3), มี a, b ไม่เกิน คู่