03/04/2008
1
CÁC PHƯƠNGPHÁP
GIẢI QUYẾT BÀI TOÁN
TRÊN MÁY TÍNH
Phạm Thế Bảo
Khoa Toán – Tin học
Trường Đại học Khoa học Tự nhiên Tp.HCM
Phân lọai
1
Ph
há
iế
1
.
Ph
ương p
há
ptrựct
iế
p
2. Phươngpháp gián tiếphoặc tìm kiếmlờigiải
Phạm Thế Bảo
03/04/2008
2
Phương pháp trựctiếp
• Xác định trựctiếp đượclờigiải qua mộtthủ tục tính toán
(công thức, hệ thức, định luật, …) hoặc qua các bướccăn
bản để có đượclờigiải.
Việ
iải
ết
ấ
đề
tê
á
tí h
hỉ
là
th
tá
lậ
tì h
•
Việ
cg
iải
quy
ết
v
ấ
n
đề
t
r
ê
nm
á
y
tí
n
h
c
hỉ
là
th
ao
tá
c
lậ
p
t
r
ì
n
h
hay là sự chuyển đổilờigiảitừ ngôn ngữ tự nhiên sang
ngôn ngữ máytính Æ kỹ thuậtlập trình trênmáy tính.
• Có ba loạicơ bản:
o Lọai thứ nhất, dùng để biểudiễn cho cácbàitoán đãcólờigiải
chính xác bằng một công thứctoánhọcnàođó.
ví dụ: tính tổngnsố nguyên dương.
ể
ễ
ầ
(1)
1 2
2
nn
n
+
++ + =
o Loạith
ứ
hai,
b
i
ể
udi
ễ
n cho các
b
ài toán có công thứcgiảig
ầ
n đúng
(công thức tính sin, cos, giảiphương trình siêu việt, …).
ví dụ:giảiphương trình bậc2
o Loạicuối cùng, biểudiễn các lờigiải không tường minh bằng kỹ
thuật đệ quy.
Phạm Thế Bảo
Chuyển đổidữ liệubàitoán thành dữ liệuchương trình
Nguyên lý 1: Dữ liệucủabàitoánsẽđượcbiểudiễnlạidướidạng
các biếncủachương trình thông qua các quy tắcxácđịnh của
ể
ngôn ngữ lập trình cụ th
ể
1. Biến-phương tiệnbiểidiễndữ liệucủachương trình
2. Thay đổi giá trị củabiến-lệnh gán
3. Kiểudữ liệu
4. Hằng số
5
Cấu
trúc
một
chương
trình
5
.
Cấu
trúc
một
chương
trình
Phạm Thế Bảo
03/04/2008
3
Chuyển đổi quá trình tínhtoán của bài toán
thành các cấutrúccủachương trình
• Nguyên lý 2 (Định lý Bohn-Jacopini): Mọi quá trình tính
toá
n
đềucóthể mô tả và thựchiệndựatrên
b
acấutrúcc
ơ
bản: tuầntự,rẽ nhánh và lặp.
1. Cấutrúctuầntự
2. Cấutrúcrẽ nhánh
1. Rẽ nhánh có điềukiện: if (condition)
• rẽ nhánh đơn: if ()
• rẽ nhánh đôi: if () else
2.
Rẽ
nhiều
nhánh
: case
2.
Rẽ
nhiều
nhánh
:
case
3. Rẽ nhánh không có điềukiện: LABEL và GOTO
3. Cấutrúclặp:
1. Lặpxácđịnh
2. Lặp không xác định
Phạm Thế Bảo
Phân chia bàitoán ban đầu thành những
bài toán nhỏ hơn
• Nguyên lý 3: Mọibàitoánlớn đềucóthể giải quyếtbằng
cách
phân
chia
thành
những
bài
toán
nhỏ
hơn
cách
phân
chia
thành
những
bài
toán
nhỏ
hơn
1. Thủ tụcvàhàm-phương pháp phân chia chương trình thành
những chương trình con.
2. Biếncụcbộ và biếntoàncục
3. Tham số -dữ liệu đầuvào/đầuracủahàm
Phạm Thế Bảo
03/04/2008
4
Biểudiễn tínhtoán không tường minh bằng đệ quy
• Nguyên lý 4: quá trình đệ quy trong máytính không đơngiản
như
các
biểu
thức
quy
nạp
trong
toán
học
như
các
biểu
thức
quy
nạp
trong
toán
học
• Xem phầntrước.
Phạm Thế Bảo
Phương pháp gián tiếp
• Đượcsử dụng khi chưatìmralờigiải chính
á
ủ
ấ
đề
x
á
cc
ủ
av
ấ
n
đề
.
• Đây là cách tiếpcậnchủ yếucủaloàingười
từ xưa đếnnay.
• Lờigiảitrựctiếpbaogiờ cũng tốthơn, nhưng
không
phải
lúc
nào
cũng
có
không
phải
lúc
nào
cũng
có
Phạm Thế Bảo
03/04/2008
5
Phân lọai phươngpháp gián tiếp
1. Phươngpháp thử -sai
ố
1. Thử -saihệ th
ố
ng
2. Thử - sai phân lớp
3. Thử -saingẫu nhiên
2. Phươngpháp Heuristic
3
Phương
pháp
trí
tuệ
nhân
tạo
3
.
Phương
pháp
trí
tuệ
nhân
tạo
Phạm Thế Bảo
Phương pháp thử -sai
Thomas Edison – phát biểu cách tìm một cây kim trong một
đống rơm: “trong khi chưa nghĩ ra đượcmột cách thậthay
thì cứ việc rút từng cọng rơmchođến khi rút đượccây
kim”.
Phương pháp này dự trên 3 nguyên lý:
1. Nguyên lý vét cạn(duyệttoànbộ): liệtkêtấtcả các trường hợp
xảy ra và xem xét chúng.
Ví dụ:liệtkêtấtcả số nguyên tố từ m đếnn.
2. Nguyên lý ngẫu nhiên: dựatrênviệcthử mộtsố khả năng được
chọnmột cách ngẫu nhiên trong tậpkhả năng (thường rấtlớn,
nếuápdụng nguyên lý toàn bộ sẽ tốnnhiềuthờigian).Khả
năng
tìm
lời
giải
đúng
(
hoặc
gần
đúng
)
sẽ
phụ
thuộc
vào
chiến
năng
tìm
lời
giải
đúng
(
hoặc
gần
đúng
)
sẽ
phụ
thuộc
vào
chiến
lượcchọnngẫu nhiên và mộtsốđiềukiệncụ thể.
Ví dụ:kiểmtrachấtlượng trong quá trình sảnxuấtcủamột đoàn kiểmtra.
Một lô hàng có 1000 thùng, chọnngẫu nhiên 10 thùng, mỗi thùng có
24 sảnphNm, chọnngẫu nhiên 5 sảnphNm,
Phạm Thế Bảo
03/04/2008
6
N guyên lý được phát triên thành phươngpháp Monté-Carlos.
Càng ngày nguyên lý ngẫu nhiên càng phát triểnmạnh mẽ,
trong sốđócómộtphương pháp nổibậtlàphươn gpháp
Genetic
.
3. N guyên lý mê cung: nguyên lý này đượcápdụng khi chúng ta
khô
biết
hí h
á
"
hì h
d
"
ủ
lời
iải
à
hải
â
khô
ng
biết
c
hí
n
h
x
á
c
"
hì
n
h
d
ạng
"
c
ủ
a
lời
g
iải
,m
à
p
hải
x
â
y
dựng lờigiảidần qua từng bước, giống như tìm đượcrakhỏi
mê cung.
Phạm Thế Bảo
Thử sai - hệ thống
1. N guyên lý vét cạntoànbộ:muốn tìm cây kim trong đống
rơm, hãy lầnlượt rút từng cọng rơm đến khi rút đượccây
kim.
Thuậtgiải: gọi D là không gian bàitoán (tậptấtcả khả năng
xảyra),D={(x
1
,x
2
, ,x
n
)/x
i
∈D
i
vớiD
i
là tậphữuhạncóm
i
phầntử}.
gọi f: D {true, false} là quy tắcxácđịnh lờigiải.
Ví dụ:một đàn gà và mộtbầy chó có tổng cộng N chân, đàn
gà
đông
hơn
bầy
chó
M
con
Hỏi
có
bao
nhiêu
gà
và
chó
?
gà
đông
hơn
bầy
chó
M
con
.
Hỏi
có
bao
nhiêu
gà
và
chó
?
Phạm Thế Bảo
03/04/2008
7
2. N guyên lý mắtlưới: lướibắtcáchỉ bắt đượcnhững con cá có
kích thướclớnhơnkíchthướcmắtlưới.
Ví dụ:
Tìm nghiệmphương trình trong một đoạn
Khử nhiễu trong ảnh
3. N guyên lý mê cung: Muốn thóat khỏimêcungthìphảibiết
quay lui và biết đánh dấunhững nơi đã đi qua.
Ví dụ:
Tìm đường đingắnnhất
Phạm Thế Bảo
Thử - sai phân lớp
1. N guyên lý chung về giảm độ phứctạpcủathử - sai: thu hẹp
tập
trường
hợp
trước
và
trong
khi
duyệt
,
đồng
thời
đơn
giản
tập
trường
hợp
trước
và
trong
khi
duyệt
,
đồng
thời
đơn
giản
hóa tối đa điềukiệnchấpnhậnmộttrường hợp.
2. Quy tắc:
1. đơngiản điềukiện: tránh tính lại trong vòng lặpvàthừakế kếtquả
tính toán củabướctrước: tổ hợpchỉnh hợp, heap sort,
2. Kỹ thuậtcầm canh: mã đituần,
• số âm đầutiêntrongmảng: điềukiện while(x[i]>0&&i<=n) do có bao nhiêu so
áh
?
iế
l i
[
1
]
1
hil ( [
i
]
0
)
d
s
á
n
h
?
v
iết
l
ạ
i
: a
[
n+
1
]
=-
1
;w
hil
e
(
x
[
i
]
>
0
)
d
o
3. N guyên lý thu gọn không gian tìm kiếm: loạibỏ những
trường hợphoặc nhóm trường hợpchắcchắn không dẫn đến
lờigiải.
Phạm Thế Bảo
03/04/2008
8
• Quy tắc rút gọn:
1. Dựatrênđánh giá toàn cục: tìm điềukiện để rút gọntậpkhả năng đề
cử trong mộtbướcxâydựng một thành phần.
Ví dụ: tìm tổ hợpchặpncủak.
2. Dựatrênđánh giá cụcbộ:xâydựng phép kiểmtrađơngiản để nhanh
chóng
loại
bỏ
được
các
khả
năng
cho
thành
phần
x[
i
]
mà
không
phải
chóng
loại
bỏ
được
các
khả
năng
cho
thành
phần
x[
i
]
mà
không
phải
xây dựng toàn bộ n-i thành phầncònlạicủalờigiải.
Ví dụ:chosáusố tự nhiên A={1,7,2,9,3,5}. Tìm dãy con củaAsao
cho tổng các phầntử trong dãy con bằng 8.
4. N guyên lý đánh giá nhánh cận: nhánh có chứaquả phảinặng
hơntrọng lượng củaquả.
Ví dụ: bàitoán ngườidulịch.
5. Quay lui không dùng đệ quy
6. Phươngpháp sinh lờigiải
Phạm Thế Bảo
Phương pháp Heuristic
• Trong nhiều bàitoán dùng phươngpháp thử -sai
sẽ
dẫn
đến
số
lượng
thử
quá
lớn
không
chấp
sẽ
dẫn
đến
số
lượng
thử
quá
lớn
không
chấp
nhận được.
• Heuristic chính là ướclượng về khả năng dẫn đến
lờigiảicủamộttrạng thái: phươngpháp vét cạn
nhưng có thêm tri thức đikèm,tối ưucụcbộ,
nguyên lý hướng đích, nguyên lý sắpthứ tự,
–
ví
dụ
:
ví
dụ
:
Mộtembébị lạc đường về nhà, em nhớ nhà mình cao
nhất trong khu vực, em sẽ tìm đến tòa nhà cao nhất
trong vùng em thấy, rồilạitiếptục ,
Giảiphương trình bậc2,đoán nghiệmtheoVi-ét
Phạm Thế Bảo
03/04/2008
9
Tìm kiếm theo chiều sâu và chiềurộng
• Là thử - sai theo nguyên lý mê cung hay
hí h
là
thử
i
kết
h
lầ
c
hí
n
h
là
thử
-sa
i
kết
h
ợp
lầ
nngược.
• N gượcvớitìmkiếmtheochiềusâu,tìmkiếm
theo chiềurộng mang hình ảnh củavếtdầu
loang.
Phạm Thế Bảo
GiảithuậtA
*
Phương pháp trí tuệ nhân tạo
• "Dạy" máytính để có "trí thông minh" như
ời
bắt
h ớ
khả
ă
"
l ậ
"
ủ
con ngư
ời
bắt
c
h
ư
ớ
c
khả
n
ă
ng
"
suy
l
u
ậ
n
"
c
ủ
a
con người.
ví dụ: bàitoán đong nước, có 3 bình A, B, và
C có dung tích 5, 8, và 13 lít. Làm sao đong
được
11
lít
nước
trong
bình
C?
Bình
C
ban
được
11
lít
nước
trong
bình
C?
Bình
C
ban
đầu đầynước.
Phạm Thế Bảo
03/04/2008
10
Mộtsố phươngpháp chuyểngiaotri
thức
1. Biểudiễntri thức
2. Hệ chuyên gia
3. Máy học
Phạm Thế Bảo
. chia bài toán ban đầu thành những
bài toán nhỏ hơn
• Nguyên lý 3: Mọibàitoánlớn đềucóthể giải quyếtbằng
cách
phân
chia
thành
những
bài
toán
nhỏ
hơn
cách
phân
chia
thành
những
bài
toán
nhỏ
hơn
1 03/04/2008
1
CÁC PHƯƠNG PHÁP
GIẢI QUYẾT BÀI TOÁN
TRÊN MÁY TÍNH
Phạm Thế Bảo
Khoa Toán – Tin học
Trường Đại học Khoa học Tự