Tải bản đầy đủ (.pdf) (29 trang)

BÀI TẬP - Toán rời rạc và Nhập môn lý thuyết đồ thị ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (692.28 KB, 29 trang )

BÀI TẬP
Toán rời rạc và
Nhập môn lý thuyết đồ thị
Tài liệu học tập dành cho sinh viên
Khoa CNTT - UEF
Phiên bản 1.0
2008

MỤC LỤC
PHẦN 1
BÀI TẬP 3
CHƯƠNG 1
QUAN HỆ 4
A. Bài tập củng cố lý thuyết 4
1Quan hệ và các tính chất của nó 4
2Quan hệ n-ngôi và ứng dụng 4
B. Bài tập thực hành trên máy tính 4
C. Viết tiểu luận 4
CHƯƠNG 2
ĐỒ THỊ 5
A. Bài tập củng cố lý thuyết 5
1Giới thiệu 5
2Các thuật ngữ đồ thị 6
3Biểu diễn các đồ thị và sự đẳng cấu đồ thị 9
4Tính liên thông 10
5Các đường đi Euler và Hamilton 12
6Các bài toán đường đi ngắn nhất 14
B. Bài tập thực hành trên máy tính 15
C. Viết tiểu luận 16
CHƯƠNG 4
ĐỘ PHỨC TẠP TÍNH TOÁN 16


A. Bài tập củng cố lý thuyết 16
1Dãy và phép tính tổng 16
2Độ tăng của hàm 17
3Thuật toán 18
4Độ phức tạp của thuật toán 19
1
5Các kỹ thuật thiết kế thuật toán 20
6Độ phức tạp thuật toán qua các ví dụ 20
B. Bài tập thực hành trên máy tính 21
C. Viết tiểu luận 22
PHẦN 2
LỜI GIẢI
VÀ HƯỚNG DẪN 23
CHƯƠNG 1
QUAN HỆ 24
A. Bài tập củng cố lý thuyết 24
1Quan hệ và các tính chất của nó 24
2Quan hệ n-ngôi và ứng dụng 24
B. Bài tập thực hành trên máy tính 24
C. Viết tiểu luận 24
CHƯƠNG 2
ĐỒ THỊ 25
A. Bài tập củng cố lý thuyết 25
1Giới thiệu 25
2Tiêu đề mục 2 26
B. Bài tập thực hành trên máy tính 26
C. Viết tiểu luận 26
2
Chương 2. Quan hệ
PHẦN 1

BÀI TẬP
3
Chương 2. Quan hệ
CHƯƠNG 1
QUAN HỆ
A. Bài tập củng cố lý thuyết
1 Quan hệ và các tính chất của nó
Bài 1.1. Nội dung
Bài 1.2. Nội dung
….
2 Quan hệ n-ngôi và ứng dụng
Bài 2.1. Nội dung
Bài 2.2. Nội dung
….
B. Bài tập thực hành trên máy tính
Bài 1. Nội dung
Bài 2. Nội dung
….
C. Viết tiểu luận
Bài 1. Nội dung
Bài 2. Nội dung
….
4
Chương 2. Quan hệ
CHƯƠNG 2
ĐỒ THỊ
A. Bài tập củng cố lý thuyết
1 Giới thiệu
Bài 1.1. Với mỗi trường hợp sau, vẽ các mô hình đồ thị biểu diễn các
đường bay và nói rõ về loại đồ thị được dùng. Trong đó lịch bay mỗi

ngày như sau:
- Từ TP.HCM: có một chuyến đến Hà Nội, một chuyến đến Đà Nẵng,
một chuyến đến Phú Quốc, một chuyến đến Nghệ An, một chuyến đến
Hải Phòng;
- Từ Hà Nội: có hai chuyến đến TP.HCM, một chuyến đến Đà Nẵng, một
chuyến đến Nghệ An, một chuyến đến Hải Phòng;
- Từ Đà Nẵng: có một chuyến đến Hải Phòng, hai chuyến bay đến
TP.HCM; một chuyến đến Hà Nội;
- Từ Nghệ An: có một chuyến đến Hà Nội, một chuyến đến TP.HCM;
- Từ Hải Phòng: có một chuyến đến Hà Nội, một chuyến đến TP.HCM,
và một chuyến đến Đà Nẵng;
- Từ Phú Quốc: có một chuyến đến TP.HCM.
a) Đồ thị biểu diễn các thành phố có chuyến bay giữa chúng.
b) Đồ thị biểu diễn số chuyến bay hoạt động giữa các thành phố, cộng
với một khuyên biểu thị chuyến du lịch đặc biệt ngắm cảnh thành phố,
cất và hạ cánh tại Phú Quốc.
c) Đồ thị biểu diễn đầy đủ thông tin về hướng bay và số chuyến bay giữa
các thành phố.
Bài 1.2. Xác định xem đồ thị nào sau đây là đồ thị đơn, đa đồ thị, đồ thị
có hướng.
5
Chương 2. Quan hệ
Bài 1.3. Trong trận đấu vòng tròn, đội H thắng đội G, đội C, và đội A;
đội G thắng đội A và đội C; đội C thắng đội A. Hãy mô hình hóa kết quả
này bằng một đồ thị có hướng.
….
2 Các thuật ngữ đồ thị
Bài 2.1. Xác định số lượng các đỉnh, số lượng các cạnh, và bậc của các
đỉnh trong các đồ thị sau. Cho biết đỉnh nào là đỉnh cô lập, đỉnh nào là
đỉnh treo.

6
a)
b)
c)
d)
c
a
f
e
d
a)
b
Chương 2. Quan hệ
Bài 2.2. Tìm tổng các bậc của các đỉnh trong các đồ thị ở các Bài 2.1, và
kiểm chứng rằng nó bằng hai lần số các cạnh trong đồ thị.
Bài 2.3. Có thể tồn tại một đồ thị đơn có 15 đỉnh, mỗi đỉnh có bậc bằng 5
không? Tại sao?
Bài 2.4. Trong một buổi chiêu đãi, mọi người đều bắt tay nhau. Chứng tỏ
rằng tổng số người được bắt tay là một số chẵn. Giả sử không ai tự bắt
tay mình.
Bài 2.5. Xác định số đỉnh, số cạnh, số bậc vào và số bậc ra của mỗi đỉnh
đối với đồ thị có hướng sau.
7
a
e
d
c
b)
b
b

h
g
e
c)
c
d
i
f
a
a
d
c
b
Chương 2. Quan hệ
Bài 2.6. Hãy xác định tổng các bậc vào và tổng các bậc ra các đỉnh của
đồ thị trong bài 2.5 một cách trực tiếp. Chứng tỏ rằng chúng đều bằng
tổng các cạnh của đồ thị.
Bài 2.7. Đồ thị sẽ có bao nhiêu cạnh nếu nó có các đỉnh bậc 4, 3, 3, 2, 2.
Vẽ một đồ thị như vậy.
Bài 2.8. Có tồn tại đồ thị đơn chứa năm đỉnh với các bậc sau đây? Nếu
có hãy vẽ đồ thị đó.
a) 3, 3, 3, 3, 2. b) 1, 2, 3, 4, 5.
c) 1, 2, 3, 4, 4.
Bài 2.9. Vẽ tất cả các đồ thị con của đồ thị sau.
Bài 2.10. Tìm hợp của các cặp đồ thị đơn sau

8
a
c
d

b
a
b
c
d
e
f
f b
da)
Chương 2. Quan hệ
3 Biểu diễn các đồ thị và sự đẳng cấu đồ thị
Bài 3.1. Dùng danh sách kề biểu diễn các đồ thị sau.
Bài 3.2. Biểu diễn các đồ thị trong bài 3.1 bằng ma trận kề.
Bài 3.3. Vẽ các đồ thị ứng với ma trận kề được cho như sau.
a)
0 1 0
1 0 1
0 1 0
 
 
 
 
 
b)
0 0 1 1
0 0 1 0
1 1 0 1
1 1 1 0
 
 

 
 
 
 
c)
1 1 1 0
0 0 1 0
1 0 1 0
1 1 1 0
 
 
 
 
 
 
Bài 3.4. Dùng ma trận liên kết để biểu diễn các đồ thị trong Bài 3.1.
Bài 3.5. Xác định xem các cặp đồ thị đã cho có là đẳng cấu không.
9
ba
dc
e
a
f
b
e
d
g
c
b)
a

c
d
b
a)
a
d
c
b
b)
Chương 2. Quan hệ
4 Tính liên thông
Bài 4.1. Các danh sách đỉnh sau đây có tạo nên đường đi trong đồ thị
bên dưới hay không? Đường đi nào là đơn? Đường đi nào là chu trình?
Độ dài của các đường đi này là bao nhiêu?
a) (a, e, b, c, b)
b) (a, e, a, d, b, c, a)
c) (e, b, a, d, b, e)
10
u
4
u
5
u
2
u
3
v
1
v
2

v
4
v
5
u
1
v
3
a)
Chương 2. Quan hệ
d) (c, b, d, a, e, c)
Bài 4.2. Các danh sách đỉnh sau đây có tạo nên đường đi trong đồ thị
bên dưới hay không? Đường đi nào là đơn? Đường đi nào là chu trình?
Độ dài của các đường đi này là bao nhiêu?
a) (a, b, e, c, b)
b) (a, d, a, d, a)
c) (a, d, b, e, a)
d) (a, b, e, c, b, d, a)
Bài 4.3. Xác định xem các đồ thị đã cho có liên thông không.
Bài 4.4. Có bao nhiêu thành phần liên thông trong các đồ thị ở các Bài
tập 4.3? Tìm các thành phần liên thông đó.
Bài 4.5. Tìm tất cả các đỉnh cắt và cạnh cắt của đồ thị.
11
Chương 2. Quan hệ
5 Các đường đi Euler và Hamilton
Bài 5.1. Xác định xem có tồn tại chu trình Euler trong các đồ thị sau hay
không. Vẽ chu trình đó khi nó tồn tại.
Bài 5.2. Xác định xem các đồ thị trong Bài 5.1 có đường đi Euler không.
Vẽ các đường đi đó nếu có.
Bài 5.3. Xác định xem có thể vẽ các bức tranh sau bằng một nét liền,

không nhấc bút lên khỏi mặt giấy không?
Bài 5.4. Xác định sự tồn tại chu trình Euler trong các đồ thị có hướng
sau. Vẽ các chu trình này nếu chúng tồn tại.
12
Chương 2. Quan hệ
Bài 5.5. Xác định xem đồ thị có hướng trong Bài 5.4 có đường đi Euler
hay không. Vẽ các đường đi Euler này nếu có.
Bài 5.6. Xác định đồ thị đã cho có chứa chu trình Hamilton hay không.
Nếu có hãy tìm một chu trình như thế. Nếu không có hãy giải thích lý do
vì sao không tồn tại.
13
Chương 2. Quan hệ
Bài 5.7. Đồ thị trong Bài 5.6 có đường đi Hamilton không? Nếu có, hãy
tìm đường đó. Nếu không có, cho biết lý do tại sao không tồn tại một
đường đi như vậy.
6 Các bài toán đường đi ngắn nhất
Bài 6.1. Tìm chiều dài của đường đi ngắn nhất giữa a và z trong đồ thị có
trọng số sau đây
14
Chương 2. Quan hệ

Bài 6.2. Tìm độ dài của đường đi ngắn nhất giữa các cặp đỉnh sau đây
trong các đồ thị có trọng số ở Bài 6.1.
a) a và d b) a và f c) c và f d) b và z
B. Bài tập thực hành trên máy tính
Viết các chương trình với các đầu vào và đầu ra như sau:
Bài 1. Một đồ thị cho trước bởi danh sách kề. Xác định bậc các đỉnh của
đồ thị này.
Bài 2. Một đồ thị cho trước bởi danh sách kề. Xác định xem đồ thị này
có là đồ thị lưỡng phân hay không?

Bài 3. Một đồ thị cho trước bởi danh sách kề. Xây dựng ma trận kề mô tả
đồ thị đó.
Bài 4. Một đồ thị cho trước bởi ma trận kề. Liệt kê các cạnh của đồ thị
này.
Bài 5. Một đồ thị cho trước bởi ma trận liên kết. Liệt kê các cạnh của đồ
thị này.
15
Chương 2. Quan hệ
C. Viết tiểu luận
Bài 1. Tìm hiểu nguồn gốc và sự phát triển của lý thuyết đồ thị trước thế
kỷ 20.
Bài 2. Tìm hiểu một số thuật toán hiện có để xác định tính đẳng cấu của
hai đồ thị, cùng với độ phức tạp tính toán của những thuật toán này. Hiện
nay, thuật toán nào trong số đó có hiệu quả cao nhất.
Bài 3. Tìm hiểu bài toán người đưa thư (travelling salesman problem).
Bài 4. Tìm hiểu bài toán tô màu đồ thị (graph coloring).
CHƯƠNG 4
ĐỘ PHỨC TẠP TÍNH TOÁN
A. Bài tập củng cố lý thuyết
1 Dãy và phép tính tổng
Bài 1.1. Tìm số hạng a
8
của dãy {a
n
} nếu a
n
bằng
a) 2
n-1
b) 7 c) 1 + (– 1)

n
d) –(–2)
n
Bài 1.2. Tìm các số hạng a
0
, a
1
, a
2
, và a
3
của dãy {a
n
} với a
n
bằng
a) (–2)
n
b) 3 c) 7 + 4
n
d) 2
n
+ (–2)
n
Bài 1.3. Liệt kê 10 số hạng đầu của các dãy sau:
a) Dãy có được bằng cách bắt đầu từ 10 và các số hạng sau là các số
hạng đứng trước trừ đi 3.
b) Dãy có số hạng thứ n là tổng của n số nguyên dương đầu tiên.
c) Dãy có số hạng thứ n là 3
n

– 2
n
.
16
Chương 2. Quan hệ
Bài 1.4. Tìm ít nhất ba dãy khác nhau bắt đầu với các số hạng 1, 2, 4 và
các số hạng sau được tạo ra bởi một công thức hay quy luật đơn giản nào
đó.
Bài 1.5. Đối với mỗi liệt kê các số nguyên sau đây, hãy tìm một công
thức hay luật đơn giản để tạo ra các số hạng của dãy số nguyên bắt đầu
với liệt kê đã cho.
a) 3, 6, 11, 18, 27, 38, 51, 66, 83, 102, …
b) 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, …
c) 1, 10, 11, 100, 101, 111, 1000, 1001, 1010, 1011, …
Bài 1.6. Tính giá trị của các tổng sau đây, với S = {1, 3, 5, 7}.
a)
j S
j


b)
2
j S
j


c)
j S
1
j



d)
j S
1


.
Bài 1.7. Tính giá trị của các tổng sau:
a)
 
8
j
j 0
1 ( 1)

 

b)
 
8
j j
j 0
3 2



d)
 
8

j 1 j
j 0
2 2




.
Bài 1.8. Tính các tổng kép sau đây:
a)
3 2
i 1 j 1
(i j)
 


b)
3 2
i 0 j 0
(3i 2j)
 


c)
3 2
i 1 j 0
j
 

.

Bài 1.9. Tính tổng
200
3
k 99
k


2 Độ tăng của hàm
Bài 2.1. Xác định các hàm sau đây có phải là O(x
2
) hay không?
a) f(x) = 17x + 11 b) f(x) = x
2
+ 1000.
c) f(x) = x log x d) f(x) = x
4
/2
Bài 2.2. Dùng định nghĩa f(x) là O(g(x)) để chứng minh 2
x
+ 17 là O(3
x
).
17
Chương 2. Quan hệ
Bài 2.3. Chứng minh rằng
3
x 2x
2x 1



là O(x
2
).
Bài 2.4. Tìm số nguyên n nhỏ nhất để có f(x) là O(x
n
) đối với các hàm
sau:
a) f(x) = 2x
2
+ x
3
log x b) f(x) =
4 2
4
x x 1
x 1
 

.
Bài 2.5. Chứng minh rằng x
3
là O(x
4
) nhưng x
4
không phải là O(x
3
).
Bài 2.6. Xác định xem x
3

có là O(g(x)) hay không đối với các hàm g sau:
a) g(x) = x
2
b) g(x) = x
3
/2
c) g(x) = x
2
+ x
3
d) g(x) = x
2
+ x
4
Bài 2.7. Chứng minh rằng nếu f(x) là O(x) thì f(x) cũng là O(x
2
).
Bài 2.8. Cho k là một số nguyên dương. Chứng minh rằng 1
k
+ 2
k
+ … +
n
k
là O(n
k+1
).
Bài 2.9. Đối với từng hàm trong bài 2.1, hãy xác định hàm đó có là Ω(x
2
)

không? Và có là Θ(x
2
) không?
Bài 2.10. Chứng minh rằng
a) 3x + 7 là Θ(x) b) 2x
2
+ x – 7 là Θ(x
2
)
3 Thuật toán
Bài 3.1. Xây dựng thuật toán tính x
n
, với x là số thực và n là số nguyên.
(Gợi ý: trước hết đưa ra thủ tục tính x
n
khi n không phải số âm bằng cách
nhân liên tục với x, bắt đầu từ 1. Sau đó mở rộng thủ tục này và dùng
quan hệ x
-n
= 1/x
n
để tính x
n
khi n âm.)
Bài 3.2. Trình bày thuật toán chỉ dùng các lệnh gán để đổi chỗ bộ ba (x,
y, z) thành (y, z, x). Cần dùng tối thiểu bao nhiêu lệnh gán?
Bài 3.3. Liệt kê tất cả các bước cần tiến hành để tìm (nhị phân) số 7
trong dãy số đã sắp tăng 1, 3, 4, 5, 6, 8, 9, 11.
Bài 3.4. Trình bày thuật toán tìm số nguyên nhỏ nhất trong một dãy hữu
hạn các số tự nhiên.

18
Chương 2. Quan hệ
Bài 3.5. Trình bày thuật toán xác định vị trí xuất hiện cuối cùng của phần
tử nhỏ nhất trong một danh sách hữu hạn các số nguyên, trong đó các số
nguyên không nhất thiết phải khác nhau.
Bài 3.6. Trình bày thuật toán tìm cả số lớn nhất lẫn số bé nhất trong dãy
hữu hạn các số nguyên.
4 Độ phức tạp của thuật toán
Bài 4.1. Viết thuật toán dùng để xếp bốn số hạng đầu của một danh sách
có độ dài tuỳ ý theo thứ tự tăng dần. Chứng minh rằng thuật toán này có
độ phức tạp thời gian là O(1), được tính thông qua số lượng các phép so
sánh được sử dụng.
Bài 4.2. Xác định số lượng phép nhân được dùng để tính
k
2
x
bắt đầu với
x rồi bình phương liên tiếp (để tìm x
2
, x
4
, …). Cách này có hiệu quả hơn
cách nhân x với chính nó một số lần thích hợp hay không?
Bài 4.3. a) Chứng tỏ thuật toán sau có khả năng xác định số lượng bit 1
trong xâu bit S
Procedure đếm_bit(S: xâu_bit)
count := 0
while S<>0
begin
count := count + 1

S := S AND (S – 1)
end {count sẽ là số lượng các bit 1 trong S}
Các phép toán của dòng lệnh S := S AND (S – 1) đều là phép toán bit.
b) Cần phải thực hiện bao nhiêu phép AND bit để tìm số lượng bit 1
trong một xâu bit có độ dài bằng n.
Bài 4.4. Phương pháp Horner dùng để tính giá trị đa thức a
n
x
n
+ a
n-1
x
n-1
+
… + a
1
x + a
0
tại x = c như sau:
Procedure Horner(c, a
0
, a
1
, …, a
n
: những số thực)
y : = a
n
for i := 1 to n
19

Chương 2. Quan hệ
y := y*c + a
n-i
{y = a
n
c
n
+ a
n-1
c
n-1
+ … + a
1
c + a
0
}
a) Tính giá trị 3x
2
+ x + 1 tại x = 2 bằng cách thực hiện từng bước thuật
toán trên.
b) Có chính xác bao nhiêu phép nhân và phép cộng được thuật toán đó
sử dụng để tính giá trị một đa thức bậc n ở x = c? (không kể các phép
cộng được dùng để tăng biến vòng lặp.)
Bài 4.5. Một thuật toán sẽ mất bao nhiêu thời gian để giải một bài toán
có kích thước n, nếu thuật toán đó dùng 2n
2
+ 2
n
phép tính bit, mỗi phép
mất 10

-9
giây, với các giá trị của n như sau:
a) 10 b) 20 c) 50 d) 100.
Bài 4.6. Xác định số lượng phép so sánh ít nhất (hay hiệu năng trong
trường hợp tốt nhất)
a) cần thiết để xác định số lớn nhất trong một dãy số nguyên.
b) được dùng để xác định vị trí một phần tử trong dãy có n số hạng khi
dùng thuật toán tìm kiếm nhị phân.
5 Các kỹ thuật thiết kế thuật toán
Bài 5.1. Đưa ra một thuật toán đệ quy để tính tổng của n số nguyên
dương đầu tiên.
Bài 5.2. Đưa ra một thuật toán đệ quy để tìm số lớn nhất của tập hữu hạn
các số nguyên.
Bài 5.3. Đưa ra thuật toán đệ quy để tìm
n
2
a
trong đó a là một số thực và
n là một số nguyên dương. (Gợi ý: Dùng đẳng thức
 
n 1 n
2
2 2
a a


.)
Bài 5.4. Thành lập một thuật toán đệ quy để tìm số hạng thứ n của dãy
được định nghĩa: a
0

= 1, a
1
= 2, a
2
= 3, và a
n
= a
n-1
+ a
n-2
+ a
n-3
với n = 3, 4,
5, …
6 Độ phức tạp thuật toán qua các ví dụ
Bài 6.1. Nhân (1110)
2
với (1010)
2
bằng thuật toán nhân nhanh Karatsuba.
Bài 6.2. Tính thời gian thực hiện của các đoạn chương trình sau:
20
Chương 2. Quan hệ
a) Tính tổng của các số
{1} Sum := 0;
{2} for i:=1 to n do begin
{3} readln(x);
{4} Sum := Sum + x;
end;
b) Tính tích hai ma trận vuông cấp n: C = A*B:

{1} for i := 1 to n do
{2} for j := 1 to n do begin
{3} c[i,j] := 0;
{4} for k := 1 to n do
{5} c[i,j] := c[i,j] + a[i,k] * b[k,j];
end;
B. Bài tập thực hành trên máy tính
Viết các chương trình với các đầu vào và đầu ra như sau:
Bài 1. Cho a, r và n là các số nguyên không âm. Tìm tổng của cấp số
nhân a, ar, ar
2
, …, ar
n
.
Bài 2. Nhập một xâu ký tự. Xuất ra nghịch đảo của nó.
Bài 3. Cho trước một số thực a và số nguyên không âm n. Dùng đệ quy
tính a
n
.
Bài 4. Cho hai số nguyên không đồng thời bằng không. Tìm ước chung
nhỏ nhất của chúng bằng phép đệ quy.
Bài 5. Cho một danh sách các số nguyên và một phần tử x, xác định vị
trí x trong danh sách bằng cách cài đặt đệ quy thuật toán tìm kiếm nhị
phân.
Bài 6. Cho trước một số nguyên không âm n. Dùng phương pháp đệ quy
để tìm số Fibonacci thứ n.
21
Chương 2. Quan hệ
C. Viết tiểu luận
Bài 1. Trình bày khái niệm gốc của khái niệm O. Giải thích về cách mà

tác giả và những người khác đã dùng khái niệm này.
….
22
Chương 2. Quan hệ
PHẦN 2
LỜI GIẢI
VÀ HƯỚNG DẪN
23

×