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

Tài liệu Giáo trình: "Thiết kế và đánh giá thuật tóan" pdf

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 (622.71 KB, 231 trang )

1
1
Thiết kế và đánh giá
Thiết kế và đánh giá
thuật toán
thuật toán
Cao học, khoa công nghệ thông tin
Cao học, khoa công nghệ thông tin
Đại học quốc gia Hà nội.
Đại học quốc gia Hà nội.
Phan Thị Hà Dương
Phan Thị Hà Dương
Viện Toán học.
Viện Toán học.


2
Chương trình
Chương trình
Chương 1
Chương 1
: Giới thiệu về thuật toán
: Giới thiệu về thuật toán
Chương 2
Chương 2
: Phân tích tính hiệu quả của thuật
: Phân tích tính hiệu quả của thuật
toán
toán
Chương 3
Chương 3


: Phương pháp “tham lam”
: Phương pháp “tham lam”
Chương 4
Chương 4
: Phương pháp “chia để trị”
: Phương pháp “chia để trị”
Chương 5
Chương 5
: Phương pháp qui hoạch động
: Phương pháp qui hoạch động
Chương 6
Chương 6
: Thuật toán trên đồ thị
: Thuật toán trên đồ thị
Chương 7
Chương 7
: Phương pháp xác suất
: Phương pháp xác suất
Chương 8
Chương 8
: Về độ phức tạp tính toán
: Về độ phức tạp tính toán
3
Ví dụ: Chương 3: Phương pháp
Ví dụ: Chương 3: Phương pháp
“tham lam”
“tham lam”
I.
I.
Giới thiệu chung

Giới thiệu chung
II.
II.
Thuật toán trên đồ thị
Thuật toán trên đồ thị
1)
1)
Cây bao trùm nhỏ nhất
Cây bao trùm nhỏ nhất
2)
2)
Đường đi ngắn nhất
Đường đi ngắn nhất
III.
III.
Thuật toán sắp xếp lịch làm việc
Thuật toán sắp xếp lịch làm việc
IV.
IV.
Thuật toán “heurisitic”
Thuật toán “heurisitic”
1)
1)
Tô màu đồ thị
Tô màu đồ thị
2)
2)
Người đưa hàng
Người đưa hàng
4

Sách tham khảo
Sách tham khảo
5
Sách tham khảo
Sách tham khảo
2.
2.
Algorithmique - conception et analyse
Algorithmique - conception et analyse
G. Brassard and P.Bratley, Masson, Paris ,
G. Brassard and P.Bratley, Masson, Paris ,
1987
1987
3.
3.
Data structure and algorithms
Data structure and algorithms
A. Aho, J. Hopcroft and J. Ullman, Addison
A. Aho, J. Hopcroft and J. Ullman, Addison
Wesley Publishing Company
Wesley Publishing Company
4.
4.
Lý thuyết độ phức tạp tính toán.
Lý thuyết độ phức tạp tính toán.
Phan Đình Diệu.
Phan Đình Diệu.
6
Chương 1: Giới thiệu về thuật
Chương 1: Giới thiệu về thuật

toán
toán
I.
I.
Khái niệm thuật toán
Khái niệm thuật toán
II.
II.
Một số ví dụ
Một số ví dụ
III.
III.
Đánh giá thuật toán trong trường hợp
Đánh giá thuật toán trong trường hợp
xấu nhất và theo trung bình
xấu nhất và theo trung bình
IV.
IV.
Về thuật toán hiệu quả
Về thuật toán hiệu quả
V.
V.
Một số bài toán cụ thể
Một số bài toán cụ thể
VI.
VI.
Cấu trúc dữ liệu
Cấu trúc dữ liệu
7
Khái niệm về thuật toán

Khái niệm về thuật toán
Thuật toán:
Thuật toán:
Dữ kiện vào
K
ế
t

q
u


r
a
Quá trình tính toán
Một dãy các bước tính toán
Một dãy số
D
ã
y

s


đ
ư

c

s


p

x
ế
p
Thuật toán sắp xếp
8
Một số từ khóa
Một số từ khóa
if (điều kiện) then {…} else
if (điều kiện) then {…} else
for (điều kiện) do {…}
for (điều kiện) do {…}
while (điều kiện) do {…}
while (điều kiện) do {…}
procedure (T, a, b) {…}
procedure (T, a, b) {…}
function(A) {… return r; }
function(A) {… return r; }
9
Sắp xếp chèn vào
Sắp xếp chèn vào
5
5
2
2
4 6 1 3
4 6 1 3
2

2
5
5
4
4
6 1 3
6 1 3
2
2
4 5
4 5
6
6
1 3
1 3
2
2
4 5
4 5
6
6
1
1
3
3
1
1
2 4 5 6
2 4 5 6
3

3
1 2 3 4 5 6
1 2 3 4 5 6
10
Thuật toán xếp chèn vào
Thuật toán xếp chèn vào
Insertion-Sort (A) {
Insertion-Sort (A) {
for
for
j = 2
j = 2
to
to
length (A)
length (A)
do
do
{
{
k = A[j]; //
k = A[j]; //
chèn A[j] vào dãy đã sắp A[1..j-1]
chèn A[j] vào dãy đã sắp A[1..j-1]
j = j-1;
j = j-1;
while
while
i > 0 and A[i] > k do {
i > 0 and A[i] > k do {

A[i+1] = A[i];
A[i+1] = A[i];
I = i-1; }
I = i-1; }
A{i+1} = k; }
A{i+1} = k; }
}
}
11
Thuật toán xen kẽ (merge sort)
Thuật toán xen kẽ (merge sort)
12
Sắp xếp xen kẽ
Sắp xếp xen kẽ
Merge-Sort(A,p,r){
Merge-Sort(A,p,r){
1.
1.
if
if
p < r
p < r
then
then
{
{
2.
2.
q =
q =

[(p+r-1)/2];
[(p+r-1)/2];
3.
3.
Merge-Sort(A,p,q);
Merge-Sort(A,p,q);
4.
4.
Merge-Sort(A,q+1,r);
Merge-Sort(A,q+1,r);
5.
5.


Merge(A,p,q,r);
Merge(A,p,q,r);
}
}
}
}
13
Phân tích thuật toán Merge-Sort
Phân tích thuật toán Merge-Sort
Đây là một thuật toán chia để trị.
Đây là một thuật toán chia để trị.
Chia
Chia
:
:
bước 2:

bước 2:
θ
θ
(1)
(1)
Trị
Trị
:
:
bước 3 và 4:
bước 3 và 4:
2T(n/2)
2T(n/2)
Hợp lại
Hợp lại
:
:
bước 5:
bước 5:
θ
θ
(n)
(n)
Tổng kết
Tổng kết
:
:
T(n) =
T(n) =



θ
θ
(1)
(1)
nếu n=1
nếu n=1
2T(n/2) +
2T(n/2) +
θ
θ
(n)
(n)
nếu n >1
nếu n >1
14
Đánh giá thuật toán
Đánh giá thuật toán
Giải quyết một bài toán.
Giải quyết một bài toán.
Vấn đề:
Vấn đề:
Có nhiều thuật toán. Chọn thuật toán nào ?
Có nhiều thuật toán. Chọn thuật toán nào ?
Mô hình hóa
Lập chương trình
Viết thuật toán
15
Phương pháp đánh giá
Phương pháp đánh giá

Phương pháp thực nghiệm
Phương pháp thực nghiệm
: Lập trình, và thử trên các ví
: Lập trình, và thử trên các ví
dụ xem thuật toán nào nhanh.
dụ xem thuật toán nào nhanh.
Phương pháp lý thuyết
Phương pháp lý thuyết
: Tính toán thời gian, bộ nhớ, …
: Tính toán thời gian, bộ nhớ, …
cần thiết của mỗi thuât toán dựa theo độ lớn của dữ liệu
cần thiết của mỗi thuât toán dựa theo độ lớn của dữ liệu
vào.
vào.
Ưu điểm
Ưu điểm
: - không phụ thuộc ngôn ngữ lập trình, loại máy
: - không phụ thuộc ngôn ngữ lập trình, loại máy
tính
tính


- Biết được tính hiệu quả của thuật toán đối với
- Biết được tính hiệu quả của thuật toán đối với
các dữ liệu có kích thước lớn.
các dữ liệu có kích thước lớn.
16
Đánh giá thuật toán trong trường
Đánh giá thuật toán trong trường
hợp xấu nhất và theo trung bình

hợp xấu nhất và theo trung bình
Ví dụ
Ví dụ
: Sắp xếp lựa chọn
: Sắp xếp lựa chọn
Select-Sort
Select-Sort
(A){
(A){
for
for
i=1
i=1
to
to
n-1
n-1
do
do
{
{
index = i; x = T[i];
index = i; x = T[i];
for
for
j= i+1
j= i+1
to
to
n

n
do
do
{
{
if
if
T[j] < x
T[j] < x
then
then
{ index = j; x = T[j];}
{ index = j; x = T[j];}
}
}
T{index = T{i};
T{index = T{i};
T{i} = x;
T{i} = x;
}
}
}
}
17
Ví dụ
Ví dụ
Hãy chạy thuật toán
Hãy chạy thuật toán
Insertion-Sort
Insertion-Sort

Merge-Sort
Merge-Sort
Đối với các bảng sau :
Đối với các bảng sau :
A = [3,1,4,1,5,9,2,6,5,3]
A = [3,1,4,1,5,9,2,6,5,3]
B = [1,2,3,4,5,6]
B = [1,2,3,4,5,6]
C = [6,5,4,3,2,1]
C = [6,5,4,3,2,1]
18
Thời gian chạy trong trường hợp xấu nhất:
Thời gian chạy trong trường hợp xấu nhất:
là cận trên đối với mọi dữ liệu vào.
là cận trên đối với mọi dữ liệu vào.
Thời gian chạy trung bình: thường khó phân
Thời gian chạy trung bình: thường khó phân
tích và đánh giá hơn.
tích và đánh giá hơn.
19
Ví dụ: dãy Fibonacci
Ví dụ: dãy Fibonacci
Dãy Fibonacci được định nghĩa:
Dãy Fibonacci được định nghĩa:
F(0) = 0, F(1) = 1, và
F(0) = 0, F(1) = 1, và
F(n) = F(n-1) + F(n-2) với n > 1.
F(n) = F(n-1) + F(n-2) với n > 1.
Tìm thuật toán tính số Fibonacci thứ n.
Tìm thuật toán tính số Fibonacci thứ n.

20
Thuật toán thứ nhất và thứ hai
Thuật toán thứ nhất và thứ hai
fontion
fontion
fib1(n){
fib1(n){
if
if
n < 2
n < 2
then
then


return
return
n;
n;
else return
else return
f(n-1) + f(n-2);
f(n-1) + f(n-2);
}
}
fonction
fonction
fib2(n){
fib2(n){
a= 0; b = 1;

a= 0; b = 1;
for
for
k = 1
k = 1
to
to
n
n
do
do
{c=b; b = a+b; a=c;}
{c=b; b = a+b; a=c;}
return
return
b;
b;
}
}
21
Thuật toán thứ ba
Thuật toán thứ ba
fonction
fonction


fib3(n){
fib3(n){
i = 1; j = 0; k = 0; h = 1;
i = 1; j = 0; k = 0; h = 1;

while
while
n>0
n>0
do
do
{
{
if
if
(n lẻ)
(n lẻ)
then
then
{ t = jh;
{ t = jh;


j = ih + jk +t;
j = ih + jk +t;


i = ik +t;}
i = ik +t;}
t = h^2;
t = h^2;
h = 2kh+t;
h = 2kh+t;
k = k^2+t;
k = k^2+t;

n = n div 2;
n = n div 2;
}
}
return
return
j;
j;
}
}
22
Ví dụ về thời gian chạy
Ví dụ về thời gian chạy
(Pascal, CDC Cyber 835)
(Pascal, CDC Cyber 835)


n
n
10
10
20
20
30
30
50
50
100
100
10000

10000
1 000
1 000
000
000
10000
10000
0000
0000
fib1
fib1
8 ms
8 ms
1 s
1 s
2 min
2 min
21
21
days
days
fib2
fib2
1/6
1/6
ms
ms
1/3
1/3
ms

ms
½ ms
½ ms
¾ ms
¾ ms
3/2
3/2
ms
ms
150
150
ms
ms
15 s
15 s
25
25
min
min
fib3
fib3
1/3
1/3
ms
ms
2/5
2/5
ms
ms
½ ms

½ ms
½ ms
½ ms
½ ms
½ ms
1 ms
1 ms
3/2
3/2
ms
ms
2 ms
2 ms
23
Cấu trúc dữ liệu
Cấu trúc dữ liệu
Dãy (list)
Dãy (list)
type
type
tablist =
tablist =
structure
structure
{
{
value[1..lengthmax]: information elements;
value[1..lengthmax]: information elements;
counter: 0.. lengthmax;}
counter: 0.. lengthmax;}

type
type
elem =
elem =
structure
structure
{
{
value: information element;
value: information element;
next: * elem;}
next: * elem;}
6
7
3
1
4
24
Đồ thị
Đồ thị
type
type
adjgraph =
adjgraph =
structure
structure
{
{
value[1..n]: information elements;
value[1..n]: information elements;

adjacent[1..n, 1..n]: booleans;}
adjacent[1..n, 1..n]: booleans;}
type
type
listgraph = array[1..n] of
listgraph = array[1..n] of
structure
structure
{
{
value: information element;
value: information element;
neighbours: list; }
neighbours: list; }
1
2
4
3
25
Cây
Cây
type
type
treenode =
treenode =
structure
structure
{
{
value: information element;

value: information element;
children: array[ ] of * treenodes;
children: array[ ] of * treenodes;
}
}
type
type
treenode =
treenode =
structure
structure
{
{
value: information element;
value: information element;
first child: * treenode;
first child: * treenode;
next brother: * treenode;
next brother: * treenode;
}
}
type
type
binarytreenode =
binarytreenode =
structure
structure
{
{
value: information element;

value: information element;
left child, right child: * binarytreenode;
left child, right child: * binarytreenode;
}
}
a
b c
d
e f

×