28/03/2008
Á
ĐÁNH GIÁ MỘT SỐ Ố Á THUẬT TOÁN THÔNG DỤNG
Phạm Thế Bảo Khoa Toán – Tin học Trường Đại học Khoa học Tự nhiên Tp.HCM
Tìm kiếm tuần tự
• Xét một mảng các phần tử a[1], a[2], …, a[n]. Phần tử a[i] có khóa tìm kiếm là a[i].key, bài toán: cho trước khóa k, có tồn tại j để a[j].key bằng k hay không? khóa k, có tồn tại j để a[j].key bằng k hay không? i=1; found=false; while((i≤n)&&(not found)) do if(a[i].key bằng k) then ; found=true;
ế
else
Nếu bỏ else: 1. Thuật toán còn đúng không? 2. Có tăng phép đếm (gán)?
i=i+1;
endif
endw
Phạm Thế Bảo
1
28/03/2008
(cid:153) Phép toán số học: so sánh, gán (cid:153) Phép toán trên khóa: sao chép, so sánh
• Ta cần phân biệt:
• Nếu ta thêm một phần tử a[n+1].key=k thì số
phép toán sẽ tăng hay giảm? phép toán sẽ tăng hay giảm?
• Viết lại thuật toán:
i=1; a[n+1].key=k; while (a[i].key khác k) do while (a[i].key khác k) do
i = i+1;
Phạm Thế Bảo
endw
(cid:198) không tìm thấy (cid:198) tìm thấy
– i =n+1 – i=i0, với 1≤i0≤n • Để đánh giá ta cần tính α: Để đánh giá, ta cần tính α: – Tìm không thấy: k∉{a[i].key/i=1..n}(cid:198) α=n, gọi q
là xác suất tìm không thấy.
ế
n
q
q
)
1)
(1 + −
=
=
α
=
−
1 vaø coù
p i
p i ( i
trung bình
– Tìm thấy sẽ có xác suất là (1-q) – Đặt pi là xác suất để a[i].key bằng k – Giả thiết a[k].key khác a[l].key nếu k≠l ế – Nếu a[i].key bằng k thì α=i-1 ??? n ∑ α – Vậy
∑
i
i
1 =
1 =
Phạm Thế Bảo
2
• Thuật toán dừng khi nào?
28/03/2008
1
n
n
ip
– Tối thiểu – Tối đa – Trung bình g
= = =
1i=
∑ α+ = ∑ 1 • Số lần so sánh khóa trung bình cho cả hai
n
1)
(1
n
q
(
)
+
ip i
• Khi tìm thấy số lượng so sánh khóa:
i
1 =
Phạm Thế Bảo
Xem xét phân bố khóa
trường hợp tìm thấy và không tìm thấy là: + − ∑ q
1. Giả sử a[i].key=i ẫ h hiê từ tậ h 1 2 2 3 3
i lần
3)
n lần Tổng số khả năng có thể là:(1+2+…+n)+n=
n n + ( 2
q
=
=
k đ k được chọn ngẫu nhiên từ tập hợp 1, 2, 2, 3, 3, 3, …, i, i, …, i, …, n, …, n, n+1, n+2, …, 2n
3) 3)
n n
3 3
2 + +
n n n ( n n ( + + 2
=
=
p i
(cid:198) Xác suất để k∉{key} là (cid:198) Xác suất để k∉{key} là
1)
1)
i 2 n n ( +
i n n ( + 2
Phạm Thế Bảo
3
Suy ra
28/03/2008
n
(
n
1)
1
i
=
+
+
−
∑ ∑
n
3 3
n
3 3
1) 1)
2 + +
2 + +
i 2 n n ( ( + +
⎛ ⎞ ⎜ ⎜ ⎟ ⎟ ⎠ ⎝ ⎠ ⎝
1 i = n n (
⎞ ⎟ ⎟ ⎠ ⎠ 1)
n
+
+
.
.
+
=
n n
1)
1)(2 6
⎛ ⎜ ⎜ ⎝ ⎝ 1 3
+ +
2 n n ( +
1) n 2( + n 3 + 2
2
7
=
n n 9 + + n + 3) 3) 3( 3( +
Phạm Thế Bảo
i
1.. n
, = ∀ =
ip
(cid:198) Số lần so sánh khóa trung bình là:
1 n
n
1
n
i
=
=
ip i
2. Giả sử dữ liệu phân bố đều (cid:198)
∑
+ 2 2
– Số lần so sánh khóa trung bình khi tìm thấy: n 1 ∑ in n i
i i
1 1 =
1 1 =
p
c
p
=
=
1
2
c 2
p
...
=
3
c 2 2
p
...
=
n
1
c n −
2
n
n
1
n
n
⎞ ⎟ ⎠
⎛ − ⎜ ⎝
2
1
c
c
c
=
=
=
=
ta c o ù
p
i
1
1 k −
∑
∑
1 2
2
i
k
1
1
=
=
⎛ ⎜ ⎝
⎞ ⎟ ⎠
⎡ 1 −⎢ ⎢ ⎣
⎤ ⎥ ⎥ ⎦
1
−
1 2 1 2
1
c ⇒ =
n
Phạm Thế Bảo
1 2
⎛ ⎜ ⎝
⎞ ⎟ ⎠
⎡ 2 1 −⎢ ⎢ ⎣
⎤ ⎥ ⎥ ⎦
4
3. Giả sử có phân bố khóa như sau:
28/03/2008
n
n
n
c
i
=
=
ip i
i 1 i −
∑
∑
2
c 1 i − 2
i
i
i
1 =
1 =
1 =
'
'
n
n
n
) )
x
i 1 i-1
i i
=
xet f(x)= ùt f( )
ix i
x
∑ ∑
∑ ∑
(1 ( 1
x x
− −
i=1
i=1
⎛ ⎜ ⎜ ⎝
⎞ ⎟ ⎟ ⎠
⎡ = ⎢ ⎢ ⎣
⎤ ⎥ ⎥ ⎦
n
1
n
+
nx
x
1
+
=
1) + 2 ) x
n ( − (1 −
n
cf
⇒
=
vôùi c ñöôïc tính nhö treân
ip i i
∑ ∑
i
1 =
⎛ ⎜ ⎜ ⎝ ⎝
1 2 2 n
2
2
−
n
⇒
=
⇒
→
∞ ⇒ )
2
khi n ñuû lôùn (n
ip i
∑
i
1 =
1
−
⎞ ⎟ ⎟ ⎠ ⎠ + n 2 1 n 2
Phạm Thế Bảo
• Số lần so sánh khóa trung bình khi tìm thấy: ∑
• Nếu thuật tóan phân bố như trên thì độ phức
hầ hữ đ ê
tạp của thuật toán là hằng (nhỏ). • Do những phần tử thường xuyên được gặp D ặ ử h ờ nhất được sắp ở đầu, những phần tử ở đầu có xác suất gặp cao hơn các phần tử càng về sau, tỷ lệ này giảm dần rất nhanh theo hệ số 2.
Ví dụ: ứng dụng trong tổ chức dữ liệu của hệ cơ
Phạm Thế Bảo
5
sở dữ liệu Oracle
28/03/2008
p
p
=
=
2
1
p
...
=
3
c 1 c 3
...
p
=
n
c n
n
n
1
c
c H
=
=
=
t a c o ù
p
n
i
∑
∑
i
k
1
1
=
=
( ln
...
1
)
O
n
=
=
+
+
m a ø H
n
1 k 1 n n
1 2 2
+ • Lúc đó số phép so sánh khóa trung bình trong
4. Xem xét một phân bố khác như sau: c 2
n
n
n
i
=
=
≈
ip i
∑
∑
n H
n ln n
1 H i
i
i
1 =
n
1 = Phạm Thế Bảo