You are on page 1of 39

Chương 2: Thuật toán, lý thuyết số và ứng

dụng (p1)

Giảng viên: Hoàng Thị Điệp


Khoa CNTT – Đại học Công Nghệ

Toán học rời rạc Học kì II, 2021-2022


Nội dung chính
 Thuật toán
 Biểu diễn số nguyên
 Thuật toán Euclid
 Phương trình đồng dư và ứng dụng
 Thuật toán mã hóa RSA

2
Thuật toán: Định nghĩa
“Một thuật toán là một chuỗi các bước (chỉ dẫn) chính xác
để thực hiện một phép tính toán hoặc giải quyết một bài
toán.”
 Ví dụ: Thuật toán tìm phần tử lớn nhất trong một chuỗi
hữu hạn
procedure

for to
if then
return { là phần tử lớn nhất}

3
Thuật toán: Các đặc trưng
 Đầu vào (Input): Thuật toán có các giá trị đầu vào thuộc một tập xác định.
 Đầu ra (Output): từ mỗi tập giá trị đầu vào, thuật toán tạo ra các giá trị đầu
ra thuộc một tập xác định. Các giá trị này có thể là lời giải cho bài toán mà
thuật toán đang giải quyết.
 Tính xác định (Definiteness): Các bước của thuật toán được xác định một
cách chính xác.
 Tính chính xác (Correctness): Thuật toán cần tạo ra các kết quả chính
xác với mỗi tập đầu vào.
 Tính hữu hạn (Finiteness): Thuật toán cần tạo ra các giá trị đầu ra sau
một số hữu hạn (có thể lớn) các bước đối với mọi tập đầu vào.
 Tính hiệu quả (Effectiveness): Các bước của thuật toán cần được thực
hiện một cách chính xác trong một khoảng thời gian hữu hạn.
 Tính tổng quát (Generality): Thuật toán cần khả dụng cho mọi bài toán
thuộc cùng một dạng mong muốn, chứ không chỉ áp dụng cho một tập đặc
biệt các giá trị đầu vào.

4
Thuật toán: Ví dụ
 Thuật toán tìm kiếm tuyến tính
procedure linearSearch )

while and

if then
else
return { là chỉ số của số hạng bằng ,
hoặc là 0 nếu không tìm thấy }

5
Thuật toán: Ví dụ
 Thuật toán tìm kiếm nhị phân
procedure binarySearch( , )
//
{ là điểm mút trái của khoảng tìm kiếm}
{ là điểm mút phải của khoảng tìm kiếm}
while

if then
else
if then
else
return { là chỉ số dưới của số hạng bằng , hoặc
là 0 nếu không tìm thấy }

6
Thuật toán: Ví dụ
 Thuật toán tìm kiếm nhị phân
procedure binarySearch( , )
//
{ là điểm mút trái của khoảng tìm kiếm}
{ là điểm mút phải của khoảng tìm kiếm}
while

if then
else
if then
else
return { là chỉ số dưới của số hạng bằng , hoặc
là 0 nếu không tìm thấy }

binarySearch(18, 8, 10, 12, 13, 15, 16, 18, 19, 20, 22) qua từng vòng lặp while?
7
Thuật toán: Ví dụ
 Thuật toán sắp xếp nổi bọt
procedure bubbleSort
for to
for 1 to
if then đổi chỗ và
{ được sắp xếp giá trị tăng dần}

8
Thuật toán: Ví dụ

Hình 1: Các bước của thuật toán sắp xếp nổi bọt
9
Thuật toán: Ví dụ
 Thuật toán sắp xếp chèn
procedure insertionSort
for to

while

for to

{ được sắp xếp giá trị tăng dần}

10
Bắt đầu :32415
j =2 :23415
j =3 :23415
Thuật toán: Ví dụ j =4 :12345
j =5 :12345
 Thuật toán sắp xếp chèn
procedure insertionSort
for to

while

for to

{ được sắp xếp giá trị tăng dần}

11
Thuật toán tham lam (Greedy algorithm)
 Giải quyết các vấn đề tối ưu hóa (Optimization problems)
 Bài toán đổi tiền n xu
 Dùng đồng 25 xu, 10 xu, 5 xu, 1 xu
 Dùng ít đồng tiền nhất có thể

 Chọn giải pháp tốt nhất tại mỗi bước thay vì xem xét toàn bộ
chuỗi các bước có thể cho lời giải tối ưu nhất

12
Thuật toán tham lam: Ví dụ
 Thuật toán đổi tiền tham lam
procedure change
//

for to
{ đếm số lượng xu mệnh giá được sử dụng}
while
{thêm một xu mệnh giá }

{ là số lượng xu thuộc mệnh giá trong tiền đổi với }

13
Độ tăng của hàm
 Khái niệm O-lớn (Big-O): Cho và là các hàm từ tập số
nguyên hoặc tập số thực đến tập số thực. Ta nói là
nếu tồn tại hằng số và sao cho:

với mọi . [Đọc là “ là O-lớn (big-O) theo .”]

 Chú ý: Dễ thấy, tăng chậm hơn một bội số cố định của


khi tăng tới vô hạn.
 và được gọi là “chứng cứ (witnesses)”

14
Độ tăng của hàm
 Chú ý: là có thể được viết là
.
 Dấu bằng ở đây không thể hiện phép bằng thực sự.
 Có thể viết là bởi vì biễu diễn
một tập các hàm là .

 Khi là , và là một hàm có giá trị


tuyệt đối lớn hơn với giá trị đủ lớn,
 Suy ra là .
 Nói cách khác, hàm trong mối quan hệ là
có thể được thay thế bằng một hàm với giá trị
tuyệt đối lớn hơn.

15
Độ tăng của hàm: Ví dụ
 Chứng minh:

 Lời giải:
 Ta thấy rằng khi ta có:

Do đó, chúng ta có thể chọn và để thấy rằng là


. Nghĩa là, với mọi .
(Lưu ý rằng không cần sử dụng giá trị tuyệt đối ở đây vì tất cả các hàm
trong đẳng thức đều dương khi dương.)
 Ngoài ra, với , chúng ta có và do đó, với ta
có:

Do đó, và cũng là “chứng cứ/witnesses” cho mối quan hệ


là .
16
Độ tăng của hàm: Ví dụ

Hình 1: Hàm là
17
Độ tăng của hàm: Ví dụ
 Chứng minh:
 Đặt , với là
các số thực. Khi đó, là .
 Lời giải:
 Sử dụng bất đẳng thức tam giác (xem Bài tập 7, mục 1.8) với ,
ta có:

 Qua đó,
,
với với mọi .
Do đó, và cho thấy là .

18
Độ tăng của hàm
 Định lý:
 Giả sử là và là
o Thì là .
 Giả sử và đều là
Thì
o là .
 Giả sử là và là
o Thì là .

19
Nội dung chính
 Thuật toán
 Biểu diễn số nguyên
 Thuật toán Euclid
 Phương trình đồng dư và ứng dụng
 Thuật toán mã hóa RSA

20
Số nguyên và Phép chia
 Lý thuyết số là một nhánh của toán học, nghiên cứu
về các số nguyên và các tính chất của chúng.
 Số nguyên (Integer):
 Tập số nguyên
 Tập số nguyên dương
 Lý thuyết số có nhiều ứng dụng trong khoa học máy
tính:
 Đánh chỉ mục (Indexing) phục vụ lưu trữ và tổ chức dữ liệu
(data)
 Mã hóa
 Mã sửa lỗi
 Bộ tạo số ngẫu nhiên

21
Phép chia (Division)
 Định nghĩa: Giả sử a và b là 2 số nguyên, trong đó a ≠ 0. Ta
nói b chia hết cho a nếu có một số nguyên c sao cho b = ac.
Nếu b chia hết cho a ta nói a là một ước số của b và b là bội
số của a.
 b chia hết cho a được kí hiệu là a|b
 Ví dụ 1:
 4|24 Đúng hay sai? Đúng
o 4 là ước của 24
o 24 là bội của 4
 3|7 Đúng hay sai? Sai

22
Chia hết (Divisibility)
 Tính chất:
Gọi a, b, c là các số nguyên, khi đó:
1. Nếu a|b và a|c thì a|(b+c)
2. Nếu a|b thì a|bc với mọi c
3. Nếu a|b và b|c thì a|c
 Chứng minh 1: Nếu a|b và a|c thì a|(b+c)

Từ định nghĩa chia hết ta có: b = au và c = av với u,v là 2 số


nguyên. Suy ra, (b+c) = au + av = a(u+v)
Do đó, b+c chia hết cho a.

23
Chia hết (Divisibility)
 Tính chất:
Gọi a, b, c là các số nguyên. Có những tính chất sau:
1. Nếu a|b và a|c thì a|(b+c)
2. Nếu a|b thì a|bc với mọi c
3. Nếu a|b và b|c thì a|c
 Chứng minh 2: Nếu a|b thì a|bc với mọi c

Nếu a|b thì sẽ tồn tại số nguyên u nào đó sao cho b = au


Nhân 2 vế với c ta có bc = auc, vì vậy theo định nghĩa, a|bc
Do đó, bc chia hết cho a.

24
Phép chia
 Định lý:
Đặt là một số nguyên và là một số nguyên dương. Tồn tại
các số nguyên duy nhất, và , với , sao cho:

 Các định nghĩa  Ví dụ


 là số bị chia
 là số chia 
 là thương số 
 là số dư của phép chia

 Các ký hiệu 


25
Biểu diễn số nguyên
 Thường ngày, chúng ta dùng hệ thập phân, hay hệ cơ số 10,
để biểu diễn số nguyên. Ví dụ ta viết 965, nghĩa là 9×102 +
6×101 + 5×100.
 Cơ số b=10 có thể thay bằng bất kỳ số nguyên dương lớn hơn
1 nào.
 b = 2 (hệ nhị phân)
 b = 8 (hệ bát phân)
 b=16 (hệ thập lục) rất quan trọng trong tính toán.
 Người Maya cổ dùng hệ cơ số 20 và người Babylon dùng hệ
cơ số 60.

26
Biểu diễn hệ cơ số b
 Định lý 1: Cho là một số nguyên dương lớn hơn 1. Nếu n là
một số nguyên dương, nó có thể được biểu diễn duy nhất bởi:

với là số nguyên không âm, là các số nguyên


không âm nhỏ hơn , và . được gọi là các
chữ số hệ của biểu diễn.
 Biểu diễn của trong Định lý 1 được gọi là Hệ cơ số của
và được kí hiệu là .
 Ta thường bỏ số 10 trong biểu diễn thập phân.

27
Hệ cơ số 2 (Hệ nhị phân)
 Máy vi tính biểu diễn số nguyên và thực hiện tính toán với
dạng nhị phân của số nguyên.
 Các chữ số duy nhất được dùng là 0 và 1.
 Ví dụ: Biểu diễn thập phân của số nguyên có dạng nhị phân là
(1 0101 1111)2?
 Đáp án:
(1 0101 1111)2 = 1×28 + 0×27 + 1×26 + 0×25 + 1×24 + 1×23 +
1×22 + 1×21 + 1×20 = 351
 Ví dụ: Biểu diễn thập phân của số nguyên có dạng nhị phân là
(11011)2?
 Đáp án:
(11011)2 = 1×24 + 1×23 + 0×22 + 1×21 + 1×20 = 27

28
Hệ cơ số 8
 Hệ cơ số 8 sử dụng các chữ số {0, 1, 2, 3, 4, 5, 6, 7}
 Ví dụ: Biểu diễn hệ cơ số 10 của số (7016)8?
 Đáp án:
7×83 + 0×82 + 1×81 + 6×80 = 3598
 Ví dụ: Biểu diễn hệ cơ số 10 của số (111)8?
 Đáp án:
1×82 + 1×81 + 1×80 = 64 + 8 + 1 = 73

29
Hệ cơ số 16
 Hệ cơ số 16 sử dụng 16 kí tự: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E, F}
 Các chữ cái từ A đến F biểu diễn các số thập phân 10 đến 15
 Ví dụ: Biểu diễn thập phân của số (2AE0B)16?
 Đáp án:
2×164 + 10×163 + 14×162 + 0×161 + 11×160 = 175627
 Ví dụ: Biểu diễn thập phân của số (E5)16?
 Đáp án:
14×161 + 5×160 = 224 + 5 = 229

30
Chuyển đổi Hệ cơ số
 Các bước tìm biểu diễn hệ cơ số của số nguyên n:
 Chia cho để thu được thương số và số dư:

 Số dư là chữ số bên phải nhất trong biểu diễn hệ cơ số


của . Tiếp theo, chia cho .

 Số dư là số thứ 2 từ phải sang trong biểu diễn hệ cơ số


của
 Tiếp tục bằng cách chia các thương số cho , lấy các chữ số
tiếp theo từ phần dư. Quá trình kết thúc khi thương bằng 0.

31
Chuyển đổi Hệ cơ số
 Ví dụ: Tìm biểu diễn hệ cơ số 8 của (12345)10
 Đáp án:
Chia liên tục cho 8:
12345 = 8 × 1543 + 1
1543 = 8 × 192 + 7
192 = 8 × 24 + 0
24 = 8 × 3 + 0
3=8×0+3
 Biểu diễn cần tìm là các phần dư được viết từ phải sang trái:
(30071)8

32
Các phép toán trong hệ nhị phân
 Thuật toán 1: Cộng hai số nguyên dương
procedure add
{biểu diễn nhị phân của và lần lượt là và
}

for to

return {biểu diễn nhị phân của tổng là }

33
Các phép toán trong hệ nhị phân

 Thuật toán 2: Nhân hai số nguyên dương


procedure multiply
{biểu diễn nhị phân của và lần lượt là và
}

for to
if then dịch vị trí)
else
{ là các tích thành phần}

for to

return { là giá trị của }

34
Các phép toán trong hệ nhị phân
 ⋯

 Thuật toán 3: Lũy thừa mô đun


procedure modular_exponentiation

mod
for to
if then mod
mod
return { bằng mod }

35
Ví dụ về Lũy thừa Mô đun
 Ví dụ: Dùng Thuật toán 3 để tìm 3644 mod 645.
 Đáp án:
 644=(1010000100)2
 Thuật toán 3 khởi tạo

 Trong phép tính 3644 mod 645, thuật toán tính ( mod 645)
với bằng cách liên tục bình phương và
giảm bằng modulo 645.
 Nếu (với là bit ở vị trị thứ trong biểu diễn nhị phân
của 644), nó nhân giá trị hiện tại của với mod 645) và
giảm kết quả bằng modulo 645.

36
Ví dụ về Lũy thừa Mô đun
Ví dụ: Dùng Thuật toán 3 để tìm 3644 mod 645.
Sau đây là các bước:
644=(1010000100)2
 i=0: Vì , ta có và ;
 i=1: Vì , ta có và ;
 i=2: Vì , ta có và
;
 i=3: Vì , ta có và ;
 i=4: Vì , ta có và ;
 i=5: Vì , ta có và 126;
 i=6: Vì , ta có và 396;
 i=7: Vì , ta thấy rằng và
;
 i=8: Vì , ta có và ;
 i=9: Vì , ta thấy rằng .

37
Ứng dụng của lũy thừa mô đun?
 “Modular exponentiation is used in public key cryptography.”

38
Chuẩn bị bài tới
 Thuật toán
 Biểu diễn số nguyên
 Thuật toán Euclid
 Phương trình đồng dư và ứng dụng
 Thuật toán mã hóa RSA

39

You might also like