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 โดยที่ = xy
เป็ น Prefix ของ ถ้ามีสตริ ง x และ y โดยที่ = xy
และ x =
เป็ น suffix ของ ถ้ามีสตริ ง x และ y โดยที่ = xy
และ 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 = RR
Basis: Length() = 0 ดังนั้น = และ ()R = R
ในทานองเดียวกัน RR = RR = R
Inductive Hypothesis: สมมติฐาน ()R = RR ที่ทุกสตริ ง
ของ Length n
Inductive Hypothesis: เราต้องพิสูจน์วา่ ที่ทุกสตริ ง ของ
Length n + 1 ว่า ()R = RR
โดยกาหนดให้ = ωa โดยที่ ω เป็ นสตริ งของ Length n และ a
,
12/09/47
Formal Languages
30