P. 1
Chapter3 Phan tich do phuc tap cua mot so giai thuat tren cau truc du lieu

Chapter3 Phan tich do phuc tap cua mot so giai thuat tren cau truc du lieu

4.5

|Views: 1,447|Likes:
Được xuất bản bởinomaddarcy

More info:

Published by: nomaddarcy on May 27, 2008
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

08/13/2013

pdf

text

original

Chương 3

Phân tích độ phức tạp một số giải thuật trên cấu trúc dữ liệu

1

Nội dung
1. Tìm kiếm tuần tự trên danh sách liên kết 2. Cây tìm kiếm nhị phân 3. Hàng đợi có độ ưu tiên và heapsort 4. Kỹ thuật băm

2

1.Tìm kiếm tuần tự trên danh sách liên kết

Tìm kiếm tuần tự (sequential search) có thể được thực hiện thông qua việc dùng danh sách liên kết (linked list) biểu diễn các mẩu tin trong tập tin. Một lợi điểm: dễ làm cho danh sách liên kết có thứ tự mà giúp cho việc tìm kiếm nhanh chóng hơn.

3

Tìm kiếm tuần tự trên một danh sách liên kết có thứ tự.
Qui ước: z là nút giả trong danh sách liên kết.
3 4 7

21 Z

type link = ↑ node node = record key, info: integer; next: link end; var head, t, z: link; i: integer;
4

Giải thuật tìm kiếm tuần tự trên danh sách liên kết
procedure initialize; begin new(z); z↑.next: = z; new(head); head↑.next:= z end; function listsearch (v: integer; t: link): link; begin z↑.key: = v; repeat t:= t↑.next until v < = t↑.key; if v = t↑.key then listsearch:= t else listsearch: = z end;
5

Giải thuật tìm kiếm tuần tự trên danh sách liên kết (tt.)
function listinsert (v: integer; t: link): link; begin z↑.key: = v; while t↑.next↑.key < v do t: = t↑.next; new(x); x↑.next: = t↑.key; t↑.next: = x; x↑.key: = v; listinsert: = x; end; Tính chất: Tìm kiếm tuần tự trên danh sách liên kết có thứ tự dùng trung bình khoảng N/2 thao tác so sánh cho cả sự tìm kiếm thành công hay không thành.
6

Chứng minh:

Với sự tìm kiếm thành công, nếu giả sử rằng mỗi mẩu tin trong danh sách liên kết có xác xuất bằng nhau (1/N) để được tìm thấy, số lần so sánh trung bình sẽ là:
(1 + 2+ …+ N)/N = N(N+1)/(2N) = (N+1)/2.

Với sự tìm kiếm không thành công, nếu giả sử rằng mỗi mẩu tin trong danh sách liên kết hay nút kết thúc z có xác xuất bằng nhau (1/(N+1))để được tìm thấy ở vị trí sau cùng của quá trình tìm kiếm, số lần so sánh trung bình sẽ là:
(1 + 2+ …+ (N+1))/(N+1) = (N+2)(N+1)/(2(N+1)) = (N+2)/2.

7

2.Cây tìm kiếm nhị phân
Trong một cây tìm kiếm nhị phân (binary search tree), tất cả các mẩu tin với khóa nhỏ hơn khóa tại nút đang xét thì ở cây con bên trái của nút và các mẩu tin với khóa lớn hơn hay bằng khóa tại nút đang xét thì ở cây con bên phải của nút.
1 0 5 1 3

2

7

1 9

8

Khởi tạo cây nhị phân
Một cây rỗng được biểu diễn bằng cây có con trỏ bên phải chỉ đến nút giả z.
procedure tree_init; begin new(z); z↑.1: = z; z↑.r: = z; new(head); head↑.key: = 0; head↑.r: = z; end;

9

Tác vụ thêm vào
Thêm một nút vào trong cây, ta thực hiện một sự tìm kiếm (không thành công) nút ấy trên cây, rồi gắn nút ấy vào vị trí ứng với nút giả z tại điểm mà quá trình tìm kiếm kết thúc.
A

S E

A

R

Hình vẽ minh họa việc thêm nút P vào cây nhị phân.

C

H

10

Tác vụ thêm vào (tt.)
procedure tree_insert (v: integer; x: link): link; var p: link; ; begin repeat p: = x; if v < x↑.key then x: = x↑.1 else x: = x↑.r until x = z; new(x); x↑.key: = v; x↑.1: = z; x↑.r: = z; /* create a new node */ if v < p↑. key then p↑.1: = x /* p denotes the parent of the new node */ else p↑.r: = x; tree p↑.r: = x end
11

In ra cây nhị phân
procedure treeprint(x: kink) begin if x <> z then begin treeprint (x↑.1); printnode (x); treeprint (x↑.r) end end; Vì một cây nhị phân diễn tả một tập tin có thứ tự, việc in ra các trị khóa trong cây theo một cách đúng đắn sẽ đem lại một danh sách các khóa có thứ tự.
12

Tác vụ tìm kiếm
type link = ↑ node; node = record key, info: integer; l, r: link end; var t, head, z: link; function treesearch (v: integer, x: link): link; /* search the node with the key v in the binary search tree x */ begin while v <> x↑. key and x <> z do begin if v < x↑.key then x: = x↑.1 else x: = x↑.r end; treesearch: = x end;
13

Tính chất của sự tìm kiếm trên cây nhị phân
Tính chất: Một tác vụ thêm vào hay tìm kiếm trên một cây nhị phân đòi hỏi chừng 2lnN so sánh trên một cây được tạo ra từ N trị khóa ngẫu nhiên. Chứng minh: Chiều dài lối đi của 1 nút: là số cạnh cần duyệt qua để từ nút ấy về nút rễ +1. Đối với mỗi nút trên cây nhị phân, số so sánh được dùng cho một sự tìm kiếm nút ấy thành công chính là chiều dài lối đi của nút ấy. Tổng tất cả chiều dài lối đi của mọi nút trên cây nhị phân được gọi là chiều dài lối đi của cây nhị phân.
14

Chứng minh (tt.)
Khi chia chiều dài lối đi toàn cây với N, ta sẽ được số so sánh trung bình đối với một sự tìm kiếm thành công trên cây. Nhưng nếu CN biểu thị chiều dài lối đi trung bình của toàn cây, ta có một hệ thức truy hồi sau đây, với C1 = 1
CN = N +

N 1

(Ck-1 + CN-k)

Số hạng N là do sự kiện nút rễ đóng góp 1 vào chiều dài lối đi của mỗi nút. Số hạng thứ hai là do sự kiện khóa tại nút rễ có xác xuất bằng nhau để trở thành phần tử lớn thứ k trong cây, với hai cây con lần lượt chứa k-1 nút và N-k.
15

Chứng minh (tt.)
k

k-1

N-k

Hệ thức truy hồi này rất giống hệ thức truy hồi khi phân tích Quicksort, và nó đã được giải cùng một cách để đưa lại cùng một kết quả. Do đó chiều dài trung bình của cây N nút là CN ≈ 2N lnN. Suy ra chiều dài trung bình của một nút trong cây là 2lnN. ⇒ Một tác vụ tìm kiếm hay thêm vào đòi hỏi trung bình 2lnN so sánh trên một cây gồm N nút.
16

Độ phức tạp trong trưòng hợp xấu nhất
Tính chất: Trong trường hợp xấu nhất, một tác vụ tìm kiếm trên cây nhị phân gồm N khóa có thể cần N so sánh.
Trường hợp xấu nhất xảy ra khi cây nhị phân bị suy biến thành một danh sách liên kết.

Tác vụ xóa
Việc xoá một nút rất dễ nếu nút ấy không có nút con hay chỉ có một nút con. Để xóa một nút có đủ hai con thì khá phức tạp: ta phải thay thế nó với nút có trị khóa cao nhất kế tiếp (tức nút tận cùng trái của cây con bên phải).
17

E A R

C

H N M L F

Thí dụ: Tác vụ xoá

H

A

R

C

N

M

P

L 18

The following procedure is to delete the node t from the binary tree x. procedure treedelete (t, x: link); var p, c: link; begin repeat /* search for the node t in the tree */ p: = x; if t↑.key < z↑. key then x: = x↑.1 else x: = x↑.r until x = t; if t↑.r = z then /* the node t has no right child */ x: = x↑.1 /* replace the deleted node with the left child of t */ else if t↑.r↑.1 = then /* the right chile of t has no left child */ begin x: = x↑.r; x↑.1: = t↑.1 end /* replace the deleted node with its right child */
19

else begin e: = x↑.r; while c↑.1↑.1 <> z do c: = x↑.1; /* find the leftmost node of the right subtree */ x: = c↑.1; /* x denotes the node that will replace the deleted one */ c↑.1 = x↑.r; /* connect c, the parent of x to the right child of x */ x↑.1: = t↑.1; x↑.r: = t↑.r /* connect x: the children of the deleted node t */ end; if t↑.key < p↑.key then p↑.1: = x /* connect x to the parent of the deleted node */ else p↑.r: = x; end;
20

3. Hàng đợi có độ ưu tiên và giải thuật sắp thứ tự HEAPSORT
Một cấu trúc dữ liệu mà hỗ trợ ít nhất hai tác vụ: + thêm một phần tử mới vào cấu trúc + xóa bỏ phần tử lớn nhất được gọi là hàng đợi có độ ưu tiên (a priority-queue). Hàng đợi có độ ưu tiên khác với hàng đợi thông thường ở điểm khi lấy phần tử ra khỏi hàng đợi thì đó không phải là phần tử cũ nhất trong hàng đợi mà là phần tử có độ ưu tiên lớn nhất trong hàng đợi.

21

Hàng đợi có độ ưu tiên (tt.)
Chúng ta muốn xây dựng và duy trì một cấu trúc dữ liệu chứa những mẩu tin có trị khóa số (độ ưu tiên) và có hỗ trợ một số trong những tác vụ sau: - tạo một hàng đợi có thứ tự ưu tiên gồm N phần tử. - thêm (insert ) một phần tử mới vào. - xóa bỏ phần tử lớn nhất ra khỏi hàng đợi. - thay thể phần tử lớn nhất với một phần tử mới - thay đổi độ ưu tiên của một phần tử. - Xóa bỏ một phần tử bất kỳ nào đó. - Ghép hai hàng đợi có độ ưu tiên thành một hàng đợi có độ ưu tiên lớn hơn.

22

Thi công hàng đợi có độ ưu tiên
Hàng đợi có độ ưu tiên như đã mô tả là một ví dụ về kiểu dữ liệu trừu tượng đã nói ở chương 1. Có hai cách để thi công hàng đợi có độ ưu tiên: • Dùng mảng để thi công hàng đợi có độ ưu tiên (Cách này thì đơn giản khi thêm vào một phần tử mới nhưng khi xóa bỏ phần tử có độ ưu tiên lớn nhất ra khỏi hàng đợi thì độ phức tạp sẽ cao.) • Dùng cấu trúc dữ liệu heap.

23

Cấu trúc dữ liệu heap
Cấu trúc dữ liệu mà có thể hỗ trợ cho các tác vụ làm việc với hàng đợi có độ ưu tiên sẽ chứa các mẩu tin trong một mảng sao cho: mỗi khóa phải lớn hơn khóa ở hai vị trí khác trong mảng. Tương tự mỗi khóa trong hai khóa này phải lớn hơn hai trị khóa khác và cứ như thế.. Thứ tự này sẽ dễ thấy hơn khi ta diễn tả mảng như một cấu trúc cây với những đường nối mỗi khóa xuống hai khóa nhỏ hơn. Các trị khóa trong cấu trúc cây thỏa điều kiện heap như sau: Khóa tại mỗi nút cần phải lớn hơn (hay bằng) các khóa ở hai con của nó (nếu có). Điều này hàm ý rằng trị khóa lớn nhất ở nút rễ.
24

Thí dụ: Heap dưới dạng cây nhị phân

X

T

O

G

S

M

N

A

E

R

A

I

25

Heap dưới dạng một mảng
Ta có thể diễn tả dạng cây của heap thành một mảng bằng cách đặt nút rễ tại vị trí 1 của mảng, các con của nó tại vị trí 2 và 3, các nút ở các mức kế tiếp ở các vị trí 4, 5, 6 và 7, v.v.. k a[k] 1 2 3 4 5 6 7 8 9 10 11 12 X T O G S MNA E R A I

Từ một nút dễ dàng để đi tới nút cha và các nút con của nó. • Cha một nút ở vị trí j sẽ là nút ở vị trí j div 2. • Hai con của một nút ở vị trí j sẽ ở các vị trí 2j và 2j+1.
26

Các lối đi trên heap
Một heap là một cây nhị phân, được diễn tả như là một mảng trong đó mỗi nút thỏa mãn điều kiện heap. Đặc biệt, phần tử có khóa lớn nhất luôn ở vị trí thứ nhất của mảng. Tất cả các giải thuật làm việc trên heap đi dọc theo một lối đi nào đó từ nút rễ xuống mức đáy (bottom) của heap. ⇒ Trong một heap có N nút, tất cả các lối đi (path) thường có lgN nút trên đó.
27

Các giải thuật trên Heap
Có hai tác vụ quan trọng làm việc trên heap: thêm vào phần tử mới và xóa bỏ phần tử lớn nhất ra khỏi heap.

1. Tác vụ thêm vào (insert)
Tác vụ này sẽ làm tăng kích thước của heap lên thêm một phần tử. N được tăng thêm 1. Và phần tử mới được đặt vào tại vị trí a[N], nhưng lúc đó điều kiện heap có thể sẽ bị vi phạm. Nếu điều kiện heap bị vi phạm, nó sẽ được khắc phục bằng cách hoán đổi phần tử mới với cha của nó. Điều này lại có thể gây ra vi phạm điều kiện heap và nó sẽ được khắc phục tiếp với cùng một cách tương tự.
28

Tác vụ thêm vào
procedure upheap(k:integer) var v: integer; begin v :=a[k]; a[0]:= maxint; while a[k div 2] <= v do begin a[k]:= a[k div 2 ]; k:=k div 2 end; a[k]:= v end; procedure insert(v:integer); begin N:= N+1; a[N] := v ; unheap(N) end;
29

Thêm (P) vào heap
X

T

P

G

S

O

N

A

E

R

A

I

M

30

Tác vụ xóa bỏ phần tử lớn nhất
Tác vụ xóa sẽ làm giảm kích thước của heap một đơn vị, tức nó làm giảm N một đơn vị. Nhưng phần tử lớn nhất (tức a[1]) sẽ được xóa bỏ và được thay thể bằng phần tử mà đã ở vị trí a[N]. Nếu trị khóa tại nút rễ quá nhỏ, nó phải được di chuyển xuống để thỏa mãn điều kiện heap. Thủ tục downheap thực hiện việc di chuyển phần tử đang ở nút rễ xuống bằng cách hoán đổi nút ở vị trí k với nút lớn hơn trong hai nút con của nó, nếu cần và dừng lại khi nút ở k lớn hơn hai nút con của nó.

31

Tác vụ xóa bỏ
procedure downheap(k: integer); label 0 ; var j, v : integer; begin v:= a[k]; while k<= N div 2 do begin j:= 2*k; if j < N then if a[j] < a[j+1] then j:=j+1; if v >= a[j] then go to 0; a[k]:= a[j]; k:= j; end; 0: a[k]: =v end;

function remove: integer; begin remove := a[1]; a[1] := a[N]; N := N-1; downheap(1); end;

32

Thí dụ về tác vụ xóa
Trước khi xóa
T

S

P

G

R

O

N

A

E

C

A

I

M

33

Sau khi xóa
S

R

P

G

M

O

N

A

E

C

A

I

34

Tính chất của các tác vụ trên heap
Tính chất 3.1: Mọi tác vụ thêm vào, xóa bỏ, downheap, upheap dòi hỏi ít hơn 2lgN so sánh khi thực hiện trên một heap gồm N phần tử.
Tất cả những tác vụ này phải đi dọc theo một lối đi giữa nút rễ cho đến cuối heap mà bao gồm ít hơn lgN phần tử với một heap gồm N phần tử. Thừa số 2 là do tác vụ downheap mà cần hai thao tác so sánh trong vòng lặp trong và các thao tác khác chỉ đòi hỏi lgN lần so sánh.
35

Giải thuật heapsort
Ý tưởng: Giải thuật bao gồm 2 công tác (1) tạo một heap chứa những phần tử cần sắp thứ tự và (2) lần lượt lấy chúng ra khỏi heap theo một thứ tự. M : kích thước của heap N: số phần tử cần được sắp thứ tự. N:=0; for k:= 1 to M do insert(a[k]); /* construct the heap */ for k:= M downto 1 do a[k]:= remove; /*putting the element removed into the array a */
36

Sắp thứ tự dãy số 5, 3, 1, 9, 8, 2, 11 bằng heapsort
5 3 1 3 5 9 1

9 9 8 3 5 3 5 1 1 8 2

11

8

9

3

5

1

2

37

9 8 8 3 5 1 2 5
11

2 1
9 11

3

5 3 1 8 9 2
11

3 1 5 8 9 2
11

2 1
5 3

1 2
11

3 8 9
11

8

9

5

38

Độ phức tạp của heap sort
Tính chất: Heapsort dùng ít hơn 3MlgM lần so sánh để sắp thứ tự M phần tử. Giới hạn trên này xuất phát từ giải thuật heapsort và tính chất của hai tác vụ thêm vào/xóa bỏ trên heap. Vòng for thứ nhất tốn MlgM lần so sánh. Vòng for thứ hai tốn 2MlgM lần so sánh. Tổng cọng: MlgM + 2MlgM = 3MlgM
39

4.Kỹ thuật băm
Kỹ thuật băm (Hashing) là một phương pháp để tìm kiếm các mẩu tin trong một bảng bằng các biến đổi các trị khóa thành những địa chỉ (vị trí) trong bảng. Bước đầu là tạo một hàm băm (hash function ) mà chuyển đổi khóa tìm kiếm thành một địa chỉ trong bảng. Một cách lý tưởng, những trị khóa khác nhau nên ánh xạ thành những địa chỉ khác nhau, nhưng không có hàm băm nào là hoàn hảo và do đó hai hay nhiều khóa khác nhau có thể băm thành cùng một vị trí bảng. Bước kế tiếp là quá trình giải quyết đụng độ (collisionresolution) mà đối phó với trường hợp hai hay nhiều khóa khác nhau có thể băm thành cùng một vị trí bảng.
40

Hàm băm
Hàm băm là hàm biến thể các trị khóa thành những số nguyên trong tầm [0 .. M-1], với M là số mục tin mà có thể được chứa trong một số lượng ô nhớ có sẵn. Một hàm băm lý tưởng là hàm băm mà - dễ tính toán - gần giống như một hàm “ngẫu nhiêm”. Một phương pháp thông thường nhất để băm là cho M là một số nguyên tố và với mỗi trị khóa k, ta tính h(k): = k mod M Đấy là một phương pháp trực tiếp mà dễ tính và rải khá đều các trị khóa ra trên bảng băm.
41

Ví dụ
Kích thước bảng băm = 101. Giả sử mỗi trị khóa gồm 4 ký tự. Nếu khóa (“AKEY”) được mã hóa thành một mã gồm 5 bit, ta có thể coi khóa ấy là một tràng số nhị phần như sau: 00001 01011 00101 11001 1 × 323 + 11 x 322 + 5 x 321 + 25 x 320 Mà tương đương với trị số thập phân 44217 . Vì, 44217 mod 101 = 80, như vậy khóa “AKEY” ánh xạ thành 80. Tại sao kích thước M của bảng băm cần phải là số nguyên tố? Lý do là vì chúng ta muốn tất cả mọi ký tự trong khóa đều tham gia vào việc chuyển đổi (băm) thành vị trí. Trong thí dụ trên, nếu M = 32, hàm băm của bất kỳ khóa nào cũng chỉ băm mỗi ký tự sau cùng!
42

Băm một khóa dài
Nếu khóa là một dòng ký tự khá dài thì chúng ta vẫn có thể tính bằng một hàm băm mà biến đổi khóa từng ký tự một. Kỹ thuật đó thể hiện bằng giải thuật lặp như sau:

h:= key[1]; for j:= 2 to key_size do begin h:= ((h*32) + key[j]) mod M; /*25 is 32, used for 5-bit code */ end;

43

Phương pháp giải quyết đụng độ: Xâu riêng (Separate chaining)
Trong kỹ thuật băm, chúng ta phải quyết định dùng cách nào để giải quyết vấn để hai khóa khác nhau băm thành cùng một giá trị địa chỉ. Một phương pháp đơn giản nhất: tạo cho mỗi vị trí trong bảng băm một danh sách liên kết (xâu riêng) để xâu tất cả những trị khóa mà băm vào cùng vị trí đó. Khi các trị khóa được xâu trên danh sách liên kết, chúng nên được sắp cho có thứ tự. type link = ↑ node; node = record key, info: integer; next: link end; var heads: array [0..M] of link; t, x: link;
44

Xâu riêng (tt.)
Danh sách liên kết cho từng vị trí trong bảng băm được khởi tạo như giải thuật sau: procedure initialize; var i: integer; begin new (z); z↑.next: = z; for i: = 0 to M-1 do begin new (heads [i]); heads [i]↑.next: = z end; end; Trong hình vẽ sau trình bày việc đưa vào bảng băm một dãy các ký tự chữ.
45

Key: A S E A R C H I N G E X A M P L E Hash: 1 8 5 1 7 3 8 9 3 7 5 2 1 2 5 1 5

0

1
A

2
M

3 4
C

5 6 7
E G

8
H

9 10
I

A

X

N

E

R

S

A

E

L

P

46

Độ phức tạp của kỹ thuật băm dùng xâu riêng
Tính chất. Kỹ thuật băm dùng xâu riêng trung bình làm giảm số lần so sánh một hệ số M so với tìm kiếm tuần tự, và cần chỗ bộ nhớ cho M con trỏ để liên kết.

Chứng minh: Nếu N, số khóa có trên bảng băm, lớn hơn nhiều so với M, thì chiều dài trung bình của các xâu riêng là xấp xỉ N/M. Do đó số lần so sánh cho việc tìm kiếm tuần tự trên xâu riêng trong trường hợp trung bình là (N/M)/2.

47

Phương pháp giải quyết đụng độ: Dò tuyến tính
Phương pháp xâu riêng có thể áp dụng trong trường hợp M < N (M: kích thước bảng băm, N: số trị khóa có thể có) Có một số phương pháp để lưu N mẩu tin trong bảng băm có kích thước M mà M > N, nhờ vào những vị trí trống trong bảng băm để giải quyết đụng độ. Những phương pháp như vậy được gọi là kỹ thuật băm địa chỉ mở (open addressing hashing). Phương pháp địa chỉ mở đơn giản nhất là phương pháp dò tuyến tính ( linear probing): mỗi khi có đụng độ thì dò đến vị trí kế tiếp trong bảng băm, tức là so sánh trị khóa cần tìm với trị khóa tại mẩu tin.
48

Dò tuyến tính (tt.)
Có ba kết quả có thể có của sự thăm dò: Nếu hai trị khóa khớp nhau thì sự tìm kiếm kết thúc thành công. - Nếu không thấy có mẩu tin tại vị trí, thì sự tìm kiếm kết thúc thất bại. - Ngược lại, dò tìm tại vị trí kế tiếp, tiếp tục như thế cho đến khi tìm thấy trị khóa khớp nhau hoặc là một vị trí rỗng.

49

Giải thuật dò tuyến tính
procedure hash_initialize; var i: integer; begin for i: = 0 to M do a[i].key:= maxint; /* maxint means an empty position */ end;

function hash_search(v: integer): integer; var x: integer; begin x: = h(v); while a[x].key <> maxit and a[x].key <> v do x: = (x+1) mod M; if a[x].key: = v then hash_search: = x else hash_search: = M; end;
50

Dò tuyến tính (tt.)
function hash_insert (v: integer): integer; var x: interger begin x:= h(v); while a[x].key <> maxint do /* collision */ x: = (x+1) mod M; a[x].key: = v; hash-insert: = x; end;

Hình vẽ sau trình bày việc đưa vào bảng băm một dãy các ký tự chữ: A S E A R C H I N G E X A M P L E

51

Key: A S E A R C H I N G E X A M P L E Hash: 1 0 5 1 18 3 8 9 14 7 5 5 1 13 16 12 5
S A A C A E E G H I X E L M N

P

R

52

Tính chất của dò tuyến tính
Kích thước bảng băm dùng cho kỹ thuật dò tuyến tính thường lớn hơn bảng băm dùng xâu riêng, vì ta phải có M > N, nhưng tổng chỗ bộ nhớ sẽ ít hơn vì không cần lưu các con trỏ. Tính chất. Dò tuyến tính sử dụng trung bình ít hơn 5 bước dò đối với một bảng băm đầy dưới 2/3. Công thức chính xác về số lần dò trung bình cần cho một sự tìm kiếm không thành công là: ½ + 1/(2*(1- α)2) với α = N/M Nếu α = 2/3, ta được kết quả 5 bước dò.
53

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->