Professional Documents
Culture Documents
Đặc tả hình thức - Mảng và chuỗi
Đặc tả hình thức - Mảng và chuỗi
Tập số nguyên
Z = {…, -2,-1,0,1,2,…}
Tập số tự nhiên
N = {n:Z|n 0} = {0,1,2,…}
Tập số nguyên dương
N1 = {n:Z|n>0} = {1,2,…}
Tập số hữu tỉ
Q = {x|x=m/n, m Z, n Z\{0}}
Tập số vô tỉ
I = {x|x m/n, m Z, n Z\{0}}
Tập số thực
R=Q I
Ví dụ về hàm trả lại giá trị tuyệt đối của một số nguyên sử
dụng sự miêu tả rỏ ràng như sau:
abs Z Z
n:Z n 0 abs n = -n n 0 abs n = n
Hàm successor (succ) trả lại giá trị của số tiếp theo của số
tự nhiên
Succ = { 0 ↦ 1, 1 ↦ 2, 2 ↦ 3,…}
Hàm predecessor (pred) trả lại giá trị của số phía trước
pred == succ∼
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Kiểu Số
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
8
Kiểu Số
Cardinality
Số phần tử của tập (số nguyên)
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
9
Kiểu Số
Cardinality
Đối với miền xác định a..b
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
10
Kiểu mảng
Trong 1 số trường hợp, để ghi lại thứ tự nhất định của các đối
tượng đã được sắp xếp thì ta sẽ sử dụng mảng.
Mảng (sequence):
Gồm hữu hạn phần tử (0 hay nhiều phần tử)
Có thứ tự
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
11
Kiểu mảng
Mảng:
Mảng chỉ chứa một phần tử s = {1 ↦ x} có #s=1 và được
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
12
Kiểu mảng
Ví dụ:
[4, 2, 7, 1, 5, 6, 3]
[7, 2, 1, 4, 3, 6, 5]
[„C‟, „O‟, „N‟]
[42.0, 343.0, 42.0]
[] (không giống tập mảng rổng xác định một kiểu dữ liệu)
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
13
Kiểu mảng
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
14
Kiểu mảng
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
15
Mảng
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
Hàm len
len [] = 0
len [1, 2, 3, 4, 1] = 5
Tổng quan
len s = card dom s
Một số ví dụ về mảng
[a,b] [b,a]
[a,b] [a,b,b]
Giả sử
s1= [b,b,c]
s2= [a]
Khi đó len s1= 3, len s2= 1
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
19
Các hàm và thao tác trên mảng/chuỗi
Mảng/chuỗi con
[„a‟, „a‟, „d‟, „c‟, „a‟, „b‟] (2, …, 4) = [„a‟, „d‟, „c‟]
“Hello” (2, …, 2) = “e”
s(1,…, len s) = s
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
20
Các hàm và thao tác trên mảng/chuỗi
Phép nối ⃕
s ⃕ t
r⃕(s⃕t) = (r⃕s)⃕t
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
Lưu ý (ứng dụng cho tiếp đầu ngữ (prefix) của mảng):
(s t t s) s = t
(r s s t) r t
(r t s t) (r s s r)
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
25
Các hàm và thao tác trên mảng/chuỗi
⃕/[a,b,…,n] = a⃕b⃕ … ⃕n
⃕/([a]⃕s) = [a]⃕(⃕/s)
⃕/(s⃕[a]) = (⃕/s)⃕[a]
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
26
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
27
Các hàm và thao tác trên mảng/chuỗi
Hàm tail của một mảng không rổng có thể định nghĩa như sau:
tl (s: X*) rs:X
pre s []
post s = [hd s]⃕rs
Ví dụ tl [„p‟, „q‟, „r‟] = [„q‟, „r‟]
tl [42] = []
Ví dụ:
hd s1 = b
hd s2 = a
tl s1 = [b,c]
tl s2 = []
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
28
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
29
Các hàm và thao tác trên mảng/chuỗi
Hàm inds: trả về tập chỉ số của các phần tử trong mảng
inds s = {i | 1 i len s}
Ví dụ: inds [12, 4, 6, 38, 12] = {1, 2, 3, 4, 5}
inds s = {1,…,len s}
inds s1 = {1,2,3}
inds s2 = {1}
inds [] = {}
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
Các hàm và thao tác trên mảng/chuỗi
Hàm elems: trả về tập hợp các giá trị của các phần tử trong
mảng
elems s = {s(i) | i inds s}
Ví dụ: elems [12, 4, 6, 12, 4, 6, 38, 12] = {4, 6, 12, 38}
elems s2 = {a}
elems s1 = {b,c}
elems [] = {}
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
31
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
32
Các hàm và thao tác trên mảng/chuỗi
Các mảng có thể liên kết nhờ phép liên kết phân bố tất cả các
mảng trong một mảng bởi hàm đệ quy sau:
dconc : (X*)* → X*
Dconc(ss) ≜ if ss = [] then [] else (hd ss)⃕dconc(tl ss)
Ví dụ:
dconc[s1, [],s2,s2] = [b,b,c,a,a]
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
33
Các hàm và thao tác trên mảng/chuỗi
Xác định độ dài của mảng con của mảng đả cho có kích thước
từ i tới j
subseq(s:X*, i:N1, j:N) rs:X*
pre i j+1 i len s + 1 j len s
post s1,s2 X*
len s1 = i-1 len s2 = len s – j s= s1⃕rs⃕s2
Có thể thấy được rằng:
len rs = len s – (i-1 + (len s -j))
= (j – i) + 1
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
34
Các hàm và thao tác trên mảng/chuỗi
s1(1,…,3)=[b,b,c]
s1(1,…,0)=[]
s1(4,…,3)=[]
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
35
Các hàm và thao tác trên mảng/chuỗi
4/5/2019 CuuDuongThanCong.com
Prof.Dr.Vu Thanh Nguyen https://fb.com/tailieudientucntt
36