บทที่ 6

Download Report

Transcript บทที่ 6

บทที่ 6
ภาษาที่เป็ นรู ปแบบ
(Formal Languages)
12/09/47
Formal Languages
1
Recursive Definition
• นิยาม Recursive ของเซ็ท X หมายถึงวิธีการสร้างอีลีเมนท์ของ
เซ็ท ด้วยการทวนซ้ า
• แบ่งออกเป็ นองค์ประกอบคือ 2 คือ
– ฐานเริ่ มต้น (Basis) ประกอบด้วยอีลีเมนท์ของเซ็ท X
– เซ็ทก่อผล (Set of Operation) ใช้สาหรับสร้างอีลีเมนท์ตวั ใหม่ จาก
อีลีเมนท์ หรื อสมาชิกที่มีอยูก่ ่อน
12/09/47
Formal Languages
2
นิยาม 1.5.1
นิยาม Recursive ของ N (เซ็ทของเลข 0,1,2,..) สร้างจาก
ฟังค์ชนั่ คืนค่าตาแหน่งหลังของมัน (Successor) ชื่อ S
i) Basis: 0  N
ii) Recursive step: ถ้า n  N ดังนั้น s(n)  N
iii) Closure: n  N มันประกอบด้วยค่าเริ่ มต้น 0 และเพิม่ อีลี
เมนท์ของมันด้วย ด้วยเซ็ทก่อผลในขั้นตอนที่ (ii)
• Closure เป็ นการรับรองว่า เซ็ทที่เกิดใหม่ เกิดจากฐานเริ่ มต้นใน
(i) และเพิม่ อีลีเมนท์ของมันด้วยเซ็ทก่อผลในขั้นตอนที่ (ii) ปกติ
อาจจะไม่แสดง
12/09/47
Formal Languages
3
บวก ลบ คูณ หาร
• นิยาม 1.5.1 แสดงให้เห็นการสร้างตัวเลข 0,1,2,3,… โดยการ
สร้างจากการนิยามแบบ Recursive
• หัวข้อถัดไป เราจะแสดงให้เห็นว่า เราสามารถ บวก ลบ คูณ หาร ฯลฯ
จากนิยามแบบ Recursive
12/09/47
Formal Languages
4
นิยาม 1.5.2
นิยาม Recursive ของผลบวก m และ n ต่อไปนี้ การ
Recursive ของมันกระทาบน n ดังนั้นผลบวก (sum) ตัว
ถัดไปของมัน จะเป็ นดังนี้
i)
Basis: ถ้า n = 0 ดังนั้น m + n = m
ii) Recursive step: m + s(n) = s(m + n)
12/09/47
Formal Languages
5
ตัวอย่างที่ 1.5.1
• เลข 3 และ 2 เขียนได้เป็ น s(s(s(0))) และ s(s(0)) ดังนั้น
ผลบวกของมันสามารถคานวณแบบ Recursive ได้ดงั นี้
s(s(s(0))) + s(s(0))
= s(s(s(s(0))) + s(0))
= s(s(s(s(s(0))) + 0))
= s(s(s(s(s(0)))
12/09/47
Formal Languages
6
การเพิม่ ของ X
X0 X1 X2 …… Xn
12/09/47
Formal Languages
7
คณิ ตศาสตร์ Induction
• การพิสูจน์ โดยเอากรณี เฉพาะรายมาอ้าง
12/09/47
Formal Languages
8
กฎพื้นฐานของ คณิ ตศาสตร์ Induction
•
กาหนดให้ X เป็ นเซ็ทที่เกิดจากฐานเริ่ มต้น Basis เป็ น X0 และ
กาหนดให้ X0 X1 X2 … Xi … เป็ นลาดับของเซ็ทที่เกิด
จากการ Recursive ของเซ็ทก่อผล กาหนดให้ P เป็ นนิยาม
คุณสมบัติอีลีเมนท์ของเซ็ท X ดังนั้นเราจะได้
i) อีลีเมนท์ใน X0 มีคุณสมบัติของ P
ii) ถ้า X0 X1 X2 … Xi มีคุณสมบัติของ P ดังนั้น ที่ Xi+1 ก็มี
คุณสมบัติของ P ด้วย
12/09/47
Formal Languages
9
กฎพื้นฐานของ คณิ ตศาสตร์ Induction
X0 X1 X2 …… Xn
12/09/47
Formal Languages
10
ตัวอย่าง 1.6.1
ใช้คณิ ตศาสตร์ Induction พิสูจน์วา่
0+1+…+n = n(n+1)/2
โดยการใช้เครื่ องหมาย Summation เราสามารถเขียนใหม่ได้เป็ น
n
 i = n(n+1)/2
i=0
12/09/47
Formal Languages
11
พิสูจน์
• Basis: กาหนดให้ n=0
ดังนั้น
n
 i = n(n+1)/2
i=0
จะได้ 0
 i = 0 = 0(0+1)/2
i=0
12/09/47
Formal Languages
12
พิสูจน์ (ต่อ)
Inductive Hypothesis: (ข้อสมมติโดยไม่ตอ้ งพิสูจน์)
สมมติฐานว่า k เป็ นเลขตั้งแต่ 1,2,…,n เราจะได้
k
 i = k(k+1)/2
i=0
Inductive step: ดังนั้น เราต้องพิสูจน์วา่
n+1
 i = (n+1)(n+1+1)/2 = (n+1)(n+2)/2
i=0
12/09/47
Formal Languages
13
พิสูจน์ (ต่อ)
n+1
n
 i =  i +(n+1)
i=0
(associativity of +)
i=0
= n(n+1)/2 + (n+1)
= (n+1)(n/2+1)
= (n+1)(n+2)/2
12/09/47
Formal Languages
(inductive hypothesis)
(distributive property)
14
ตัวอย่าง 1.6.2
ใช้คณิ ตศาสตร์ Induction พิสูจน์วา่
n! > 2n, ที่ n  4
Basis: n = 4. 4! = 24 > 16 = 2n
Inductive hypothesis: (ข้อสมมติโดยไม่ตอ้ งพิสูจน์)
สมมติฐานว่า k! > 2k ตลอดของค่า k = 4,5,6…..,n
Inductive step: ดังนั้น เราต้องพิสูจน์วา่
(n+1)! > 2n+1
12/09/47
Formal Languages
15
พิสูจน์
(n+1)!
= n!(n+1)
> 2n(n+1) (inductive hypothesis)
> 2n2
(เพราะว่า n+1 > 2)
> 2n+1
12/09/47
Formal Languages
16
ตัวอักขระ (Alphabet)
• ประกอบด้วย ตัวอักษร ตัวเลข และอักขระพิเศษต่างๆ
– เช่น A – Z, a – z, 1 – 9, ! @ # $ % ก – ฮ เป็ นต้น
• เป็ นเซ็ทที่นบั จานวนได้ (Finite Set)
12/09/47
Formal Languages
17
สตริ ง (String)
• สตริ ง (String) คือ เซ็ทของตัวอักขระเรี ยงต่อกัน
– เช่น HELLO, สวัสดี, Program, For, While, คาต่างๆ ใน
ภาษาอังกฤษ เป็ นต้น
• Null string (  ) สตริ งที่ไม่มีอกั ขระ หรื อ Elements
ภายใน
– เช่น strcpy(A, “ ”) เก็บช่องว่างลง A
– strcpy(A, “”) เก็บ NULL ลง A
– หรื อ ‘\0’ ในภาษา C
12/09/47
Formal Languages
18
ภาษา
(Languages)
• ภาษา (Languages) คือ เซ็ทของสตริ งที่เรี ยงต่อกัน (A set of
strings over an alphabet)
• เช่น ประโยคต่างๆ ในภาษาอังกฤษ, Source code ของ
โปรแกรมในภาษาต่างๆ เช่น C C++ หรื อ Pascal เป็ นต้น
12/09/47
Formal Languages
19
นิยามที่ 2.1.1
กาหนดให้  เป็ นอักขระ 1 ตัว ดังนั้น * (ซึ่งเป็ นเซ็ทของสตริ งที่
ประกอบด้วยตัวอักขระเรี ยงต่อกัน) สามารถนิยามแบบ
Recursive ได้ดงั นี้
1. Basis:   *
2. Recursive step: ถ้า w  * และ a   ดังนั้น aw
 *
3. Closure: w  * ก็เฉพาะต่อเมื่อมันเริ่ มจาก  และอีลีเมนท์
ของมันเพิ่มขึ้นตามนิยาม recursive ในข้อ 2.
•
12/09/47
Formal Languages
20
ตัวอย่างที่ 2.1.1
• กาหนดให้  = {a,b,c} ดังนั้น อีลีเมนท์ของ * จะประกอบด้วย
Length 0: 
Length 1: a b c
Length 2: aa ab ac ba bb bc ca cb cc
Length 3: aaa aab aac aba abb abc aca acb acc
baa bab bac bba bbb bbc bca bcb bcc
caa cab cac cba cbb cbc cca ccb ccc
12/09/47
Formal Languages
21
นิยาม 2.1.2
• ภาษา (Language) ภายใต้อกั ขระ  เป็ น Subset ของ *
12/09/47
Formal Languages
22
นิยาม 2.1.3
กาหนดให้ ,   * ดังนั้นการต่อสตริ ง (Concatenation) ของ
 และ  (เขียนได้เป็ น ) เป็ น Binary operation ของสตริ ง
ใน * ซึ่งนิยามได้ดงั นี้
i) Basis: ถ้า Length() = 0 ดังนั้น  =  และ  = 
ii) Recursive step: กาหนดให้  เป็ นสตริ งที่ความยาว
Length() = n > 0 ดังนั้น  = ωa ที่สตริ ง ω ความยาว
Length n – 1 และ a   และ  = (ω)a
12/09/47
Formal Languages
23
ตัวอย่าง 2.1.2
กาหนดให้  = ab ,  = ca และ ω = bb ดังนั้น
 = abca
ω = cabb
()ω = abcabb
(ω) = abcabb
12/09/47
Formal Languages
24
ทฤษฎี 2.1.4
กาหนดให้ , , ω  * ดังนั้น ()ω = (ω)
พิสูจน์
Basis: Length(ω) = 0 ดังนั้น ω =  และ ()ω = ()
โดยนิยามของ Concatenation หรื ออาจกล่าวใหม่ได้วา่ ()ω =
() = 
Inductive hypothesis: (ข้อสมมติโดยไม่ตอ้ งพิสูจน์)
สมมติฐานว่า ()ω = (ω) สาหรับทุกสตริ ง ω ที่ Length  n
Inductive step: ดังนั้น เราต้องพิสูจน์วา่
()ω = (ω) สาหรับทุกสตริ ง ω ที่ Length n + 1
12/09/47
Formal Languages
25
พิสูจน์
()ω
12/09/47
= ()(xa)
= (()x)a)
แทน ω ด้วย xa
นิยาม Cocatenation
= ((x)a)
= ((x)a)
= ((xa))
= (ω)
Inductive hypothesis
นิยาม Cocatenation
นิยาม Cocatenation
แทน xa ด้วย ω
Formal Languages
26
ข้อควรรู้
0
1
2
3
:
เขียนใหม่ได้เป็ น 
เขียนใหม่ได้เป็ น 
เขียนใหม่ได้เป็ น 
เขียนใหม่ได้เป็ น 
ถ้า  = ab ดังนั้น 2 = abab
ซึ่งไม่ใช่ aabb เพราะมันเท่ากับ a2b2
12/09/47
Formal Languages
27
Substring, Prefix, และ Suffix
แบบ Unformal อาจกล่าวได้วา่
 เป็ น Substring ของ  ถ้า  ปรากฏอยูภ่ ายใน 
แบบ Formal
 เป็ น Substring ของ  ถ้ามีสตริ ง x และ y โดยที่  = xy
 เป็ น Prefix ของ  ถ้ามีสตริ ง x และ y โดยที่  = xy
และ x = 
 เป็ น suffix ของ  ถ้ามีสตริ ง x และ y โดยที่  = xy
และ y = 
12/09/47
Formal Languages
28
นิยาม 2.1.5
กาหนดให้  ป็ นสตริ งใน * ดังนั้น ตัวกลับ (Reversal) ของ R
นิยามได้ดงั นี้
i) Basis: Length() = 0 ดังนั้น  =  และ R = 
ii) Recursive step: ถ้า Length() = n > 0 ดังนั้น  =
wa สาหรับสตริ ง ω ที่ Length n – 1, a  , และ R =
aωR (ก็คือ (ωa)R = aωR)
12/09/47
Formal Languages
29
ทฤษฎี 2.1.6
กาหนดให้ ,   * ดังนั้น ()R = RR
Basis: Length() = 0 ดังนั้น  =  และ ()R = R
ในทานองเดียวกัน RR = RR = R
Inductive Hypothesis: สมมติฐาน ()R = RR ที่ทุกสตริ ง
 ของ Length  n
Inductive Hypothesis: เราต้องพิสูจน์วา่ ที่ทุกสตริ ง  ของ
Length n + 1 ว่า ()R = RR
โดยกาหนดให้  = ωa โดยที่ ω เป็ นสตริ งของ Length n และ a 
,
12/09/47
Formal Languages
30