Tải bản đầy đủ (.ppt) (36 trang)

Bài giảng Lập trình cơ bản bài 5: Giải thuật xử lý thông tin và ngôn ngữ lập trình

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 (309.29 KB, 36 trang )

Bài 5. Giải thuật xử lý thông tin và
ngôn ngữ lập trình
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
Bài giảng: LẬP TRÌNH CƠ BẢN
Tài liệu tham khảo
Giải thuật xử lý thông tin và ngôn ngữ lập trình2

Giáo trình tin học cơ sở, Hồ Sỹ Đàm, Đào Kiến Quốc, Hồ
Đắc Phương. Đại học Sư phạm, 2004 – Chương 7, 9.
NỘI DUNG

Khái niệm bài toán giải thuật

Đặc trưng của giải thuật

Các phương pháp diễn đạt giải thuật

Sơ lược về đánh giá giải thuật

Ngôn ngữ lập trình và các mức khác nhau của ngôn ngữ
lập trình

Quá trình thực hiện chương trình trên ngôn ngữ bậc cao
3 Giải thuật xử lý thông tin và ngôn ngữ lập trình
KHÁI NIỆM BÀI TOÁN
Cho số tự
nhiên n
n có phải số
nguyên tố hay
không


“có” hay
“không”
Cho hồ sơ
điểm sinh viên
Tìm tất cả các sinh
viên có điểm trung
bình trên 8
Danh sách sv
thoả mãn
Thiết kế hình
học, tải trọng
Tính sức bền
Độ bền
Input
Yêu cầu
Output
Cho một bài toán nghĩa là cho input,
và yêu cầu để tìm (tính) ra output
4 Giải thuật xử lý thông tin và ngôn ngữ lập trình
KHÁI NIỆM THUẬT TOÁN

Thuật toán (algorithm) là một quá trình gồm một dãy hữu hạn các thao
tác có thể thực hiện được sắp xếp theo một trình tự xác định dùng để
giải một bài toán

Ví dụ : thuật toán Euclid tìm ước số chung lớn nhất của hai số tự
nhiên. Thay vì phải tính toán theo định nghĩa chỉ làm rõ cấu trúc của
USCLN (tích của các ước số chung với số mũ nhỏ nhất) thuật toán
Euclid dựa trên các tính chất sau:


USCLN(a,b) = USCLN (b,a))

Nếu a> b, USCLN(a,b) = USCLN (a-b,b)

USCLN(a,a)= a
5 Giải thuật xử lý thông tin và ngôn ngữ lập trình
THUẬT TOÁN EUCLID
TIM USCLN CỦA HAI SỐ TỰ NHIÊN

Bài toán: Cho hai số m, n tìm d = USCLN(m,n)
1. Bước 1: Kiểm tra nếu m= n thì về bước 5, nếu không thực hiện tiếp
bước 2
2. Bước 2: Nếu m> n thì về bước 4 nếu không thực hiện tiếp bước 3
3. Bước 3: m <n, bớt n đi một lượng bằng m và quay về bước 1
4. Bước 4: bớt m đi một lượng bằng n và quay về bước 1
5. Bước 5: Lấy d chính là giá trị chung của m và n. Kết thúc
6 Giải thuật xử lý thông tin và ngôn ngữ lập trình
VÍ DỤ CÁC BƯỚC CỦA THUẬT TOÁN EUCLID
m n
15 21
9 6
15 6
3 6
3 3
m<n
m>n
m>n
m<n
m=n
USCLN(15,21) = 3

7 Giải thuật xử lý thông tin và ngôn ngữ lập trình
CÁC ĐẶC TRƯNG CỦA THUẬT TOÁN

Input

Output

Tính xác định: Sau mỗi bước, bước tiếp theo hoàn toàn xác định.

Tính khả thi: các chỉ dẫn đặt ra đều có thể thực hiện được

Tính dừng: quá trình tính toán luôn phải dừng sau một số hữu hạn bước.

Tính phổ dụng: mỗi thuật toán không chỉ dùng cho một bài toán với dữ
liệu cụ thể mà có thể áp dụng với một lớp các bài toán cùng kiểu. Chẳng
hạn người ta nói tới thuật toán tìm USCLN của hai số tự nhiên bất kỳ chứ
không phải thuật toán tìm USCLN của 15 và 21.
8 Giải thuật xử lý thông tin và ngôn ngữ lập trình
CÁC PHƯƠNG PHÁP BIỂU DIỄN THUẬT TOÁN

Dùng các chỉ dẫn

Dùng sơ đồ khối

Dùng cấu trúc điều khiển
9 Giải thuật xử lý thông tin và ngôn ngữ lập trình
THUẬT TOÁN BỐC SỎI

Ví dụ: Bài toán bốc sỏi: có 30 viên sỏi. Hai người chơi, mỗi
người đến lượt mình bốc từ 1 đến 3 viên sỏi. Ai bốc cuối

cùng là thắng. Làm thế nào để người đi trước thắng.
1. Bước 1, bốc 2 viên
2. Bước 2: nếu số sỏi đã hết, dừng cuộc chơi, tuyên bố người (đi
trước) thắng cuộc. Nếu không về bước tiếp theo
3. Bước 3: Đối phương bốc k viên 0 < k<4
4. Bước 4: Người đi trước bốc một lượng là 4 - k sau đó quay về
bước 2
10 Giải thuật xử lý thông tin và ngôn ngữ lập trình
BIỂU DIỄN BẰNG LƯU ĐỒ HOẶC SƠ ĐỒ KHỐI
Khởi đầu Kết thúc
Thứ tự xử lý
Khối thao tác
đối tượng:= biểu
thức
Khối input
Khối output
Khối input
Khối điều kiện
+ -
11 Giải thuật xử lý thông tin và ngôn ngữ lập trình
BIỂU DIỄN BẰNG LƯU ĐỒ THUẬT TOÁN EUCLID
n:= n - m
m=n?
-
+
d
m,n
m>n ?
+
-

m:=m-n
d:= m
12 Giải thuật xử lý thông tin và ngôn ngữ lập trình
BIỂU DIỄN BẰNG CẤU TRÚC ĐIỀU KHIỂN
Trong khi m ≠ n thì l p l i kh i sau:ặ ạ ố
Cho t i khi m = n thì tuyên b USCLN ớ ố
chính là giá tr chung c a m và nị ủ
read(m,n);
while m <> n do
if m>n then
m:=m-n
else
n:= n-m;
write(m);
Chương trình
trong PASCAL
Điều chỉnh lại giá trị
của m và n
Nếu m > n thì

Nếu ngược lại thì

Bớt m đi một lượng là n
Bớt n đi một lượng là m
13 Giải thuật xử lý thông tin và ngôn ngữ lập
trình
TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC
ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= e
x
- x

3
= 0
Sử dụng thuật toán chia đôi dựa vào
tính chất: nếu một hàm f liên tục
trên đoạn [a,b] có f(a) và f(b) thì
phương trình f(x) = 0 nhất định thừa
nhận một nghiệm c nằm giữa [a,b]
Phương trình có hai nghiệm như
trong hình vẽ. Ta vây nghiệm nhỏ
hơn trong đoạn [1,4]
14 Giải thuật xử lý thông tin và ngôn ngữ lập trình
TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC
ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= e
x
- x
3
= 0
Ta có f(a)>0, f(b)<0. Thuật toán
chia đôi tiến hành vây
nghiệm, mỗi bước vây, giảm
khoảng vây đi 2 lần.
1. Tính f(c) với c= (a+b)/2.
Không xảy ra f(c) = 0. Tiếp
bước 2
2. Nếu f(c)> 0 thay a bởi c, sau
đó thực hiện bước 4
3. Nếu f(c) <0 thay b bởi c. Thực
hiện bước tiếp theo
4. Nếu b-a > ε, quay về 1, nếu
không làm tiếp

5. Dừng, lấy c làm nghiệm
a
b
c
15 Giải thuật xử lý thông tin và ngôn ngữ lập trình

c:= (a+b)/2
b-a < ε
- +
c
f(c) >0 ?
+
-
a:= c
a:= 1; b:= 4; ε = 0.00001
TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC
ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= ex- x3 = 0
b:= c
16 Giải thuật xử lý thông tin và ngôn ngữ lập trình
BIỂU DIỄN BẰNG CẤU TRÚC ĐIỀU KHIỂN
Cho ε = 0.000001, a=1 b=4
L p l i kh i sau:ặ ạ ố
Cho t i khi b-a < ớ ε thì l y c làm ấ
nghi m x p x ệ ấ ỉ
Tính c:= (a+b)/2
Tính f(c)
Nếu f(c) > 0 thì thực hiện khối
Nếu ngược lại thì thực hiện
khối


a:=1; b:= 4;
epsi:= 0.000001;
repeat
c:= (a+b)/2;
if epx(c)-sin(c) > 0
then
a:=c
else
b:= c
until b-a < epsi
write(c);
Chương
trình trong
PASCAL
Thay a bởi c
Thay b bởi c
17 Giải thuật xử lý thông tin và ngôn ngữ lập trình
HIỆU QUẢ CỦA THUẬT TOÁN

Với mỗi bài toán có thể có nhiều thuật toán khác nhau. Tuy nhiên
hiệu quả của chúng có thể rất khác nhau.

Trong tin học người ta quan tâm nhiều đến độ phức tạp về thời gian:
giải bài toán đó cần bao nhiêu thời gian, vấn đề này được quy về số
phép tính cơ bản cần được thực hiện

Độ phức tạp không gian: sự tiêu tốn không gian nhớ.

Vấn đề hiệu quả thời gian là vấn đề được nghiên cứu nhiều hơn cả.
18 Giải thuật xử lý thông tin và ngôn ngữ lập trình

VÍ DỤ HIỆU QUẢ TÌM KIẾM
Ví dụ bài toán tìm kiếm: cho một dãy n số khác nhau a
1
,a
2
a
i
a
n

một số x.Hãy cho biết x có trong dãy số đó hay không và ở vị trí thứ
bao nhiêu. Thuật toán tìm kiếm tuần tự như sau:

Bước 1. Cho i = 1

Bước 2. Nếu ai = x thì chuyển tới bước 5, nếu không thực hiện tiếp
bước 3

Bước 3. Tăng i lên 1 và kiểm tra i > n. Nếu đúng về bước 4. Nếu sai
quay về bước 2

Bước 4. Tuyên bố không có số x. Kết thúc

Bước 5. Tuyên bố số x chính là số thứ i. Kết thúc
Số bước tìm trung bình là n/2. Nếu có 1 triệu phần tử thì phải mất khoảng
500.000 phép so sánh
19 Giải thuật xử lý thông tin và ngôn ngữ lập trình
HIỆU QUẢ CỦA THUẬT TOÁN
Nếu sắp xếp dãy số theo thứ tự tăng dần có thể tìm bằng thuật toán tìm kiếm nhị
phân, với tư tưởng thu hẹp dần vùng tìm kiếm


Bước 1. Cho d := 1, c:=n (d: đầu, c: cuối, g: giữa)

Bước 2. Tính g := [(d+c)/2]

Bước 3. So x với a
g
. Nếu x=a
g
chuyển tới bước 7. Nếu khác thì tiếp tục thực hiện bước 4

Bước 4. Nếu d=c thì tuyên bố không có số x và kết thúc. Nếu không thì thực hiện bước 5 tiếp theo

Bước 5. Nếu x < a
g
thì thay c bằng a
g
và quay về bước 2. Nếu không thì thực hiện bước 6 tiếp theo

Bước 6. Thay d bằng a
g
và quay về bước 2

Bước 7. Tuyên bố số x chính là số thứ g. Kết thúc
Cứ mỗi lần không tìm được ta lại giảm độ dài vùng tìm kiếm đi hai lần. Số bước tìm trung bình là log
2
n.
Nếu có 1 triệu phần tử thì chỉ mất khoảng 20 lần tìm, rất nhỏ so với tìm tuần tự
20 Giải thuật xử lý thông tin và ngôn ngữ lập trình
NGÔN NGỮ LẬP TRÌNH


Ngôn ngữ lập trình (programming language) là ngôn ngữ biểu
diễn thuật toán dùng để điều khiển máy tính thực hiện các công
việc đã định.

Các quy tắc viết được gọi là cú pháp (syntax) của ngôn ngữ. ý
nghĩa mà ngôn ngữ chuyển tải gọi là ngữ nghĩa (semantic)

Một chương trình máy tính (program)phải được thể hiện trên
một ngôn ngữ xác định. Như vậy một thuật toán có thể diễn đạt
bằng nhiều chương trình khác nhau trên những ngôn ngữ khác
nhau.
21 Giải thuật xử lý thông tin và ngôn ngữ lập trình
CÁC MỨC CỦA NGÔN NGỮ LẬP TRÌNH

Ngôn ngữ máy: ngôn ngữ thể hiện trực tiếp trong hệ lệnh của máy. Nói chung
ngôn ngữ máy là ngôn ngữ ở mức các bít, nên cũng được gọi là ngôn ngữ nhị
phân

Hợp ngữ (assembly) là loại ngôn ngữ về cơ bản là gần với ngôn ngữ nhị phân,
mỗi lệnh của ngôn ngữ máy có một lệnh tương ứng của hợp ngữ nhưng hợp
ngữ sử dụng mã chữ

Ngôn ngữ bậc cao – còn gọi là ngôn ngữ thuật toán (Algorithmic language) là
ngôn ngữ biểu diễn thuật toán độc lập với hệ lệnh của máy

Mỗi ngôn ngữ xác định một kiểu diễn đạt kịch bản điều khiển máy tính Mỗi
một kịch bản điều khiển máy viết trên một ngôn ngữ lập trình gọi là một
chương trình (program)
22 Giải thuật xử lý thông tin và ngôn ngữ lập trình

NGÔN NGỮ MÁY

Chính là ngôn ngữ được viết bằng lệnh máy trong hệ nhị phân
hoặc hệ 16

Ưu điểm, tận dụng được khả năng của máy, tối ưu được thời gian
chạy

Nhược điểm: khó viết, khó chữa lỗi, phụ thuộc vào từng loại máy.
Nói chung chi phí cao.
Mã máy nhị phân Mã hexa Ý nghĩa
1001 0001 0110 0000 0001 0000

A1 60 10
Nạp 1060 lên TG AX
0000 0011 0110 0110 0001 0000

03 66 10
Cộng AX với 1066 -> AX
1010 0011 0000 0000 0010 1011

A3 00 2B
Ghi từ AX về 2B00
23 Giải thuật xử lý thông tin và ngôn ngữ lập trình
HỢP NGỮ (ASSEMBLY)

Về cơ bản, mỗi lệnh hợp ngữ tương tự với một lệnh máy – nhưng dùng
mã chữ nên dễ hiểu, dễ sửa.

Phải dịch ra ngôn ngữ máy (thay mã lệnh và địa chỉ)


Có các lệnh macro, cho phép thay thế hiệu quả hơn

Ưu điểm: dễ lập trình dễ sửa lỗi hơn ngôn ngữ máy

Nhược điểm: vẫn còn phức tạp và phụ thuộc vào máy
Hợp ngữ Mã máy trong hệ hexa
MOV AX CHIEU_DAI
A1 64 10
ADD AX CHIEU_RONG
03 66 10
MOV NUA_CHU_VI AX
A3 00 2B
24 Giải thuật xử lý thông tin và ngôn ngữ lập trình
DỊCH HỢP NGỮ (ASSEMBLY)

Để máy có thể chạy được thì phải dịch chương trình trên hợp ngữ thành một chương
trình trên ngôn ngữ máy -> nhờ một phần mềm có tên là bộ hợp dịch (assembler)

đầu tiên bộ hợp dịch sẽ phải bố trí không gian nhớ cho các đối tượng, sau đó thay
thế mã lệnh và địa chỉ bằng các mã số.

Thay thế được thực hiện với các lệnh macro, là các lệnh tương đương với nhiều
lệnh.

Kết quả của bước dịch đầu tiên là tạo ra các mô đun đối tượng, là các đoạn chương
trình dưới dạng nhị phân nhưng chưa có cấu trúc hoàn chỉnh để sẵn sàng chạy ngay.

Thường thực hiện một bước khác là liên kết, để kết hợp nhiều mô đun đối tượng
thành một chương trình nhị phân hoàn chỉnh. Sau đó mới nạp chương trình này vào

thi hành
25 Giải thuật xử lý thông tin và ngôn ngữ lập trình

×