21/07/20
1
CƠ SỞ TOÁN HỌC CHO TIN HỌC
Nền tảng cơ bản cho các ứng dụng tin học
BỘ MÔN CÔNG NGHỆ THÔNG TIN
Chương 1. Tổng quan về thuật toán phương
pháp đếm
Chương 2. Logic và ứng dụng
Chương 3. Đại số Boole
Chương 4. thuyết đồ thị
Chương 5. Cây ứng dụng của cây
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 2
NỘI DUNG
Đỗ Đức Giáo, Toán rời rạc ứng dụng trong tin học, NXB
Giáo dục, 2008
Đỗ Đức Giáo, Hướng dẫn giải i tập Tn rời rạc, NXB
Giáo dục, 2006
Kenneth H. Rosen, Discrete Mathematics and It’s
Applications, 7
th
Edition McGraw Hill, USA, 2019
https://www.cis.upenn.edu/~jean/discmath-root-b.pdf
https://voer.edu.vn
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 3
TÀI LIỆU THAM KHẢO
CHƯƠNG I.
TỔNG QUAN VỀ THUẬT TOÁN
VÀ PHƯƠNG PHÁP ĐẾM
BM Công nghệ thông tin
Bài giảng sở toán học cho tin học
1.1. Tổng quan về thuật toán
1.1.1. Khái niệm thuật toán
1.1.2. Độ phức tạp của thuật toán
1.1.3. Một số thuật bản
1.2. Các phương pháp đếm
1.2.1. Các quy tắc đếm bản
1.2.2. Hoán vị, chỉnh hợp và tổ hợp
1.2.3. Hệ thức truy hồi
1.2.4. Quan hệ chia để trị
Bài tập Chương 1
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 5
NỘI DUNG CHƯƠNG 1
1.1.1 KHÁI NIỆM THUẬT TOÁN
Thuật toán một bảng liệt các chỉ dẫn (hay
quy tắc) cần thực hiện theo từng bước xác định
nhằm giải một bài toán đã cho.
nhiều cách trình bày thuật toán: dùng ngôn
ngữ tự nhiên, ngôn ngữ lưu đồ (sơ đồ khối), ngôn
ngữ lập trình
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 6
21/07/20
2
Các đặc trưng của thuật toán
Đầu vào (Input):Một thuật toán c giá trị đầu vào từ một tập đã
được chỉ rõ.
Đầu ra (Output):Từ mỗi tập các giá tr đầu vào, thuật toán sẽ tạo ra các
giá trị đầu ra. Các giá trị đầu ra chính là nghiệm của bài toán.
Tính dừng: Sau một số hữu hạn bước thuật toán phải dừng.
Tính xác định: mỗi bước, các bước thao tác phải hết sức ràng,
không y nên sự nhập nhằng.
Tính hiệu quả: Trước hết thuật toán cần đúng đắn, nghĩa là sau khi
đưa dữ liệu vào thuật toán hoạt động đưa ra kết quả như ý muốn.
Tính phổ dụng: Thuật toán thể giải bất kỳ một bài toán nào trong lớp
các bài toán. Cụ thể là thuật toán thể các đầu o các bộ dữ
liệu khác nhau trong một miền xác định.
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 7
THUẬT TOÁN TÌM KIẾM
Bài toán tìm kiếm: Xác định phần tử x trong một
bảng liệt các phần tử phân biệt a
1,
a
2
, ..., a
n
hoặc xác định rằng không mặt trong bảng
liệt đó. Lời giải của bài toán trên vị t của số
hạng của bảng liệt giá trị bằng x (tức i sẽ
nghiệm nếu x=a
i
0 nếu x không mặt
trong bảng liệt kê).
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 8
Thuật toán tìm kiếm tuyến tính
int LinearSearch(int x, int a[], int N)
{
int i = 0;
while ((i < n) && (x != a[i]))
i ++;
return i;
}
//i<n tim thay tai vi tri I
//i=n không tìm thấy x
A: 4 5 2 7 9 11 //N=6
X=12
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 9
Thuật toán tìm kiếm nhị phân
Thuật toán này thể được dùng khi bảng liệt
các số hạng được sắp theo thứ tự tăng dần.
Chẳng hạn, nếu các số hạng các số thì chúng
được sắp từ số nhỏ nhất đến số lớn nhất hoặc
nếu chúng các từ hay xâu tự thì chúng được
sắp theo thứ tự từ điển. Thuật toán thứ hai này gọi
thuật toán tìm kiếm nhị phân
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 10
Thuật toán tìm kiếm nhị phân
procedure tìm kiếm nhị phân (x: integer, a
1
,a
2
,...,an: integers tăng dần)
i := 1 {i điểm mút trái của khoảng tìm kiếm}
j := n {j điểm mút phải của khoảng tìm kiếm}
while i < j
begin
m:= [(i+j)/2]
if x>a
m
then i:=m+1
else j := m
end
if x = ai then location := i
else location := 0
{location chỉ số dưới của số hạng bằng x hoặc 0 nếu không tìm thấy x}
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 11
Thuật toán tìm kiếm nhị phân
int BinarySearch (int x,int a[], int N)
{
int i,j,mid;
i := 0; //{i là điểm mút trái của khoảng tìm kiếm}
j := N-1; // {j điểm mút phải của khoảng tìm kiếm}
while (i <= j)
{
mid= [(i+j)/2];
if (a[mid]==x) return mid;
if x>a[mid] i=m+1
else j = m-1;
}
return N;
}
// Nếu tìm thấy x hàm trả lại gtri < N
// Nếu ko tìm thấy x hàm trả lại gtri = N
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 12
21/07/20
3
1.1.2 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Thước đo hiệu quả của một thuật toán thời gian máy tính
sử dụng đ giải bài toán theo thuật toán đang t, khi các giá tr
đầu vào một kích thước xác định.
Thước đo thứ hai dung lượng bộ nhớ đòi hỏi để thực hiện
thuật toán khi các giá trị đầu vào ch thước xác định.
Các vấn đề như thế liên quan đến độ phức tạp tính toán của một
thuật toán.
Sự phân tích thời gian cần thiết để giải một bài toán kích
thước đặc biệt o đó liên quan đến độ phức tạp thời gian của
thuật toán.
Sự phân tích b nhớ cần thiết của máy tính liên quan đến độ
phức tạp không gian của thuật toán.
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 13
Tính độ phức tạp của thuật toán
Xét trò chơi với n đĩa ban đầu cọc A (cọc B C trống).
Gọi S
n
số lần chuyển đĩa để chơi xong trò chơi với n đĩa.
Nếu n=1 thì rõ ràng S
1
=1.
Nếu n>1 thì trước hết ta chuyển n-1 đĩa bên trên sang cọc
B (giữ yên đĩa thứ n dưới cùng của cọc A). Số lần chuyển
n-1 đĩa S
n-1
. Sau đó ta chuyển đĩa thứ n từ cọc A sang
cọc C. Cuối cùng, ta chuyển n-1 đĩa từ cọc B sang cọc C
(số lần chuyển S
n-1
).
Như vậy, số lần chuyển n đĩa từ A sang C là:
S
n
=S
n-1
+1+S
n
=2S
n-1
+1=2(2S
n-2
+1)+1=2
2
S
n-2
+2+1=.....=2
n-
1
S
1
+2
n-2
+...+2+1=2
n
1.
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 14
ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Độ phức tạp Thuật ngữ
O(1) Độ phức tạp hằng số
O(logn) Độ phức tạp lôgarit
O(n) Độ phức tạp tuyến tính
O(nlogn) Độ phức tạp nlogn
O(n
b
) Độ phức tạp đa thức
O(b
n
) (b>1) Độ phức tạp hàm mũ
O(n!) Độ phức tạp giai thừa
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 15
Đệ quy
Tìm kiếm
Sắp xếp
V.v...
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 16
1.1.3 MỘT SỐ THUẬT TOÁN CƠ BẢN
THUẬT TOÁN ĐỆ QUY
Đôi khi chúng ta thể quy việc giải bài toán với
tập các dữ liệu đầu vào xác định về việc giải cùng
bài toán đó nhưng với các giá trị đầu vào nhỏ hơn
Trong lập trình, trong 1 hàm lại gọi đến chính hàm
đó
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 17
VD THUẬT TOÁN ĐỆ QUY
Tìm kiếm nhị phân theo đệ quy
Giai thừa
v.v.
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 18
21/07/20
4
THUẬT TOÁN SẮP XẾP
Bài toán: Cho dãy số nguyên a1, a2, …aN. Cần sắp
xếp dãy đã cho theo thứ tự (tang hay giảm dần)
Các thuật toán SX
SX Chọn
SX Chèn
SX Nổi bọt
SX Quick
SX Heap
V.v
21/07/20 Bộ môn CNTT - Bài giảng Cơ sở toán học cho tin học 19
1.2. Các phương pháp đếm
S CỦA PHÉP ĐẾM
NGUYÊN DIRICHLET
CHỈNH HỢP TỔ HỢP SUY RỘNG
SINH CÁC HOÁN VỊ TỔ HỢP
HỆ THỨC TRUY HỒI
QUAN HỆ CHIA Đ TRỊ
20
Bài toán đếm
thuyết tổ hợp một phần quan trọng của toán học rời rạc
chuyên nghiên cứu sự phân bố các phần tử vào các tập hợp
Thông thường c phần tử này là hữu hạn việc phân bố
chúng phải thoả mãn những điều kiện nhất định nào đó, tùy theo
yêu cầu của bài toán cần nghiên cứu
Mỗi cách phân bố như vậy gọi một cấu hình tổ hợp được
nghiên cứu từ thế kỷ 17, khi những câu hỏi về tổ hợp được nêu
ra trong những công trình nghiên cứu các trò chơi may rủi
Liệt kê, đếm các đối tượng những tính chất nào đó một
phần quan trọng của lý thuyết t hợp
Cần phải đếm các đối tượng để giải nhiều bài toán khác nhau
21
CƠ SỞ CỦA PHÉP ĐẾM
Những nguyên lý đếm bản
Những nguyên đếm bản:
Nguyên trừ:
22
Quy tắc cộng
23
Giả sử k công việc T
1
, T
2
, ..., T
k
. Các việc này
thể làm tương ứng bằng n
1
, n
2
, ..., n
k
cách
giả sử không hai việc nào thể làm đồng thời.
Khi đó số cách làm một trong k việc đó n
1
+n
2
+
... + n
k
.
VD: Một sinh viên thể chọn bài thực nh y
tính từ một trong ba danh sách tương ứng 23,
15 19 bài. vậy, theo quy tắc cộng 23 + 15
+ 19 = 57 cách chọn bài thực hành.
Quy tắc cộng
Giá trị của biến m bằng bao nhiêu sau khi đoạn
chương trình sau được thực hiện?
m := 0
for i
1
:= 1 to n
1
m := m+1;
for i
2
:=1 to n
2
m := m+1;
.......................
for i
k
:= 1 to n
k
m := m+1;
24
21/07/20
5
Quy tắc cộng
Giá trị khởi tạo của m bằng 0. Khối lệnh này gồm k
vòng lặp khác nhau. Sau mỗi bước lặp của từng
vòng lặp giá trị của k được tăng lên một đơn vị.
Gọi T
i
việc thi hành vòng lặp thứ i. thể làm T
i
bằng n
i
cách vòng lặp thứ i n
i
bước lặp. Do
các vòng lặp không thể thực hiện đồng thời nên
theo quy tắc cộng, giá trị cuối cùng của m bằng s
cách thực hiện một trong số các nhiệm vụ T
i
, tức
m = n
1
+n
2
+ ... + n
k
.
25
Quy tắc cộng
26
Quy tắc cộng thể phát biểu dưới dạng của ngôn
ngữ tập hợp như sau: Nếu A
1
, A
2
, ..., A
k
các tập
hợp đôi một rời nhau, khi đó số phần tử của hợp các
tập hợp này bằng tổng số các phần tử của các tập
thành phần. Giả sử T
i
việc chọn một phần tử từ
tập A
i
với i=1,2, ..., k. |A
i
| cách m T
i
không
hai việc nào có thể được làm cùng một lúc.
Số cách chọn một phần tử của hợp các tập hợp này,
một mặt bằng số phần tử của nó, mặt khác theo quy
tắc cộng bằng |A
1
|+|A
2
|+ ... +|A
k
|. Do đó ta có:
|A
1
A
2
...A
k
| = |A
1
| + |A
2
| + ... + |A
k
|.
Quy tắc nhân
Giả sử một nhiệm vụ nào đó được tách ra thành k
việc T
1
, T
2
, ..., T
k
. Nếu việc T
i
thể làm bằng n
i
cách sau khi các việc T
1
, T
2
, ... T
i-1
đã được làm,
khi đó n
1
.n
2
....n
k
cách thi hành nhiệm v đã cho
27
Quy tắc nhân VD1
Người ta thể ghi nhãn cho những chiếc ghế trong
một giảng đường bằng một chữ cái và một số nguyên
dương không vượt quá 100. Bằng cách như vậy,
nhiều nhất bao nhiêu chiếc ghế thể được ghi
nhãn khác nhau?
Thủ tục ghi nhãn cho một chiếc ghế gồm hai việc, gán
một trong 26 chữ cái sau đó gán một trong 100 số
nguyên dương. Quy tắc nhân chỉ ra rằng
26.100=2600 cách khác nhau để gán nhãn cho một
chiếc ghế. Như vậy nhiều nhất ta thể gán nhãn cho
2600 chiếc ghế.
28
Quy tắc nhân VD2
bao nhiêu xâu nhị phân độ dài n.
Mỗi một trong n bit của xâu nhị phân thể chọn
bằng hai cách mỗi bit hoặc bằng 0 hoặc bằng 1.
Bởi vậy theo quy tắc nhân tổng cộng 2
n
xâu nhị
phân khác nhau độ dài bằng n.
29
Nguyên bù trừ
Khi hai công việc thể được làm đồng thời, ta
không thể dùng quy tắc cộng để tính s cách thực
hiện nhiệm vụ gồm cả hai việc. Để tính đúng số
cách thực hiện nhiệm vụ này ta cộng số cách m
mỗi một trong hai việc rồi trừ đi số cách làm đồng
thời cả hai việc. Ta thể phát biểu nguyên đếm
này bằng ngôn ngữ tập hợp. Cho A
1
, A
2
hai tập
hữu hạn, khi đó
|A
1
A
2
| = |A
1
| + |A
2
||A
1
A
2
|.
30