1. Trang chủ
  2. » Luận Văn - Báo Cáo

sap xep va tim kiem

87 23 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

 Với giải thuật trên ta có thể dựng được cây nhị phân tìm kiếm ứng với một dãy khóa đưa vào bằng cách liên tục bổ sung các nút ứng với từng khóa, bắt đầu từ một c[r]

(1)

SẮP XẾP VÀ TÌM KIẾM

SẮP XẾP VÀ TÌM KIẾM

Nhóm thực hiện:

Nhóm thực hiện:

1 Trần Văn Trọng

1 Trần Văn Trọng

2 Phạm Thị Mai

2 Phạm Thị Mai

3 Nguyễn Thị Bích Phương

3 Nguyễn Thị Bích Phương

4 Bùi Thị Kim Ngân

4 Bùi Thị Kim Ngân

5 Nguyễn Thị Mơ

5 Nguyễn Thị Mơ

6 Nguyễn Hữu Đạt

(2)

PHẦN I:SẮP XẾP

(3)

NỘI DUNG CẦN TÌM HIỂU

Các Phương Pháp Sắp Xếp Phức Tạp

Các Phương Pháp Sắp Xếp Đơn Giản

Những Nhận Xét Chung

SẮP XẾP

SẮP XẾP

1

2 3

4

Khái Niệm Các Phương Pháp Sắp Xếp

(4)

YÊU CẦU CẦN NẮM VỮNG

Các thuật toán

2

Nội dung phương pháp

31

Biết vận dụng linh hoạt thuật toán

(5)

KHÁI NIỆM VÀ CÁC PHƯƠNG PHÁP SẮP XẾP

Phương Pháp Sắp Xếp Phức Tạp

3

Các Khái Niệm

31

Phương Pháp Sắp Xếp Đơn Giản

(6)

KHÁI NIỆM

Sắp xếp q trình bố trí lại phần tử

(7)

KHÁI NIỆM

 Khái niệm nghịch thế

Giả sử xét mảng có thứ tự tăng dần, có i<j

ai>aj ta gọi nghịch

Mục tiêu xếp khử nghịch (bằng cách hoán vị)

 Quy ước: Các phương pháp xếp

sắp xếp theo chiều tăng dần

a1 a2 a3 …….

(8)

PHƯƠNG PHÁP SẮP XẾP ĐƠN GIẢN

Phương pháp lựa chọn Phương pháp chèn

(9)

Phương pháp xếp kiểu lựa chọn

Phương pháp xếp kiểu lựa chọn

Giải Thuật

2

Ý Tưởng Thuật Toán

31

Đánh giá

34

Vi dụ

(10)

Ý TƯỞNG THUẬT TỐN

Giả sử ta có n số cần xếp đó:

Bước 1:ta chọn số nhỏ n số để vị trí

thứ

Bước 2: ta chọn số nhỏ n-1 số để vị

trí thứ

 ………

Bước i: ta chọn số nhỏ ki,ki+1,…,kn số để

ở vị trí thứ i

 ………

Bước n-1: ta chọn số nhỏ số để vị

trí thứ n-1

(11)

GIẢI THUẬT

GIẢI THUẬTBước 1: i=1; //xét từ đầu dãy

Bước 2: min:=i;

Bước 3:j:=i+1; //tìm vị trí phần tử nhỏ nhất.

j<=n

Nếu a[j]<a[min] min:= j;

j=j+1;

Bước 4:Nếu (a[min]<a[i])

hốn vị (a[i] ,a[min]);

Bước 5: i=i+1;

(12)(13)

ĐÁNH GIÁ

 Đây phương pháp xếp đơn giản

 Ở lượt thứ i,để chọn khóa nhỏ cần (n-i) phép so sánh.Nên độ phức tạp thuật toán O(n2)

(14)

PHƯƠNG PHÁP CHÈN TRỰC TIẾP

PHƯƠNG PHÁP CHÈN TRỰC TIẾP

Ý Tưởng Thuật Toán

(15)

Ý TƯỞNG THUẬT TOÁN

 Giả sử cho dãy n phần tử cần xếp k1,k2,…,kn  Coi dãy gồm k1 xếp

 Thêm k2,ta so sánh với k1 nếu k2<k1 chèn trước k1

 Đối với k3,ta xét dãy k1,k2 xếp tìm cách chèn k3vào dãy để thứ tự xếp

 ………

 Cứ ta xếp dãy k1,k2,…,ki điều kiện dãy k1,k2,…,ki-1 xếp cách chèn ki

(16)

GIẢI THUẬT

Bước 1: i = 2; // giả sử có đoạn a[1] đã

Bước 2: x = a[i];

Tìm vị trí vt thích hợp đoạn a[1] đến a[i-1] để chèn a[i] vào

Bước 3: Dời chỗ phần tử từ a[vt]đến a[i-1] sang phải vị trí để dành chỗ cho a[i]

Bước 4: a[vt]= x; // có đoạn a[1] a[i] đã sắp xếp

Bước 5: i = i+1;

(17)(18)

ĐÁNH GIÁ

 Trong trường hợp tốt nhất: tổng số phép so sánh n-1

 Trong trường hợp xấu dãy số có thứ tự ngược lại với thứ tự cần xếp lượt thứ i cần có i-1 phép so sánh tổng phép so sánh là:

(n-1)+(n-2)+…+2+1=n*(n-1)/2

 Trường hợp giá trị xuất cách ngẫu nhiên,thì lượt thứ i cần i/2 phép so sánh.Như tổng số phép so sánh là:

(1/2)+(2/2)+…+(n/2)=n*(n+1)/4

(19)

 “Chèn trực tiếp” , “Chọn trực tiếp”, “Nổi bọt”

đều thuật tốn có độ phức tạp

O(n2)

 Dễ cài đặt, dễ kiểm lỗi

 “Chèn trực tiếp” tốt “Chọn trực tiếp”,

là mảng có thứ tự sẵn.

 Cần có giải thuật hiệu cho việc

(20)

Nhó

Phương pháp xếp kiểu bọt

Đánh Giá Giải Thuật

Ý Tưởng Thuật toán

(21)

Ý TƯỞNG THUẬT TOÁN.

 Giả sử ta có n số cần xếp đó:  So sánh hai số liên tiếp:

Nếu thứ tự để nguyên Nếu ngược thứ tự đổi chỗ

 Sau vịng số bé đổi lên vị trí

 Sau vịng số bé n-1 số cịn lại lên vị trí

 ………

 Sau vịng n-1 số bé số lại lên vị trí n-1

(22)

GIẢI THUẬT

Bước 1:

i = 1;

Bước 2:

j = N;

Trong (j > i) thực hiện:

Nếu a[j]<a[j-1]: Hoán vị a[j] a[j-1]

j = j-1;

Bước 3:

i = i+1;

(23)(24)

ĐÁNH GIÁ THUẬT TOÁN

ĐÁNH GIÁ THUẬT TOÁN

 Trong trường hợp số phép so sánh là: (n-1)+(n-2)+…+2+1=n*(n-1)/2

Vì độ phức tạp thuật tốn O(n2)

(25)

NHỮNG PHƯƠNG PHÁP SẮP XẾP PHỨC TẠP

 Phương pháp xếp nhanh-Quick Sort.

 Phương pháp xếp vun đống-Heap Sort.

(26)

Nhó

PHƯƠNG PHÁP SẮP XẾP NHANH

QUICK SORT

Ý Tưởng Thuật Toán

1

Giải Thuật

2

5 Ví dụ

(27)

Ý TƯỞNG THUẬT TỐN

 Giả sử ta có dãy n số đó:

 Nếu n<=1 ta khơng cần làm

 Ngược lại ta chọn phần tử làm chốt

 Mọi phần tử nhỏ chốt ta xếp vào vị trí đứng trước chốt,mọi phần tử lớn chốt ta xếp vào vị trí sau chốt

(28)

GIẢI THUẬT

Cho dãy aL, aL+1, … aR

Bước 1:

Phân hoạch dãy aL … aR thành dãy con:

 Dãy 1: aL … aj < x  Dãy 2: aj+1 … ai-1 =x  Dãy 3: ai … aR > x

Bước 2:

(29)

Bước 1:

Chọn tùy ý phần tử a[k] dãy giá trị mốc, L≤k≤R

x=a[k], i=L, j=R Bước 2:

Phát hiệu chỉnh cặp a[i] a[j] nằm sai chỗ: Bước 2a: Trong (a[i]<x) i++

Bước 2b: Trong (a[j]>x)

j Bước 2c: Nếu (i<j) Hoán vị a[i] a[j] Bước 3:

Nếu i<j: Lặp lại bước

Ngược lại: Dừng phân hoạch

(30)

 Độ phức tap trường hợp xấu dãy khóa xếp O(n2).

 Độ phức tạp trung bình O(n*log2n) Độ phức tạp thuật toán tùy thuộc vào cách chọn phần tử “chốt”:

 Nếu chọn phần tử có giá trị trung bình, chia thành dãy nhau;

 Nếu chọn phải phần tử nhỏ (hay lớn nhất) sau lượt ta tách phân đoạn có kích thước nhỏ trước.Vì ta quay lại phương pháp xếp bọt

(31)

PHƯƠNG PHÁP VUN ĐỐNG HEAP SORT

Đánh giá Ví Dụ Giải Thuật

(32)

ĐỊNH NGHĨA ĐỐNG

 Đống nhị phân hoàn chỉnh mà nút cha có trường khóa lớn khóa hai nút

10

1

6

2

8

(33)

VUN ĐỐNG

 Nhận xét:

 Nếu nhị phân hoàn chỉnh đống

các nút(nếu có)cũng nhị phân hồn chỉnh đống

 Trên nhị phân hoàn chỉnh có n nút có[n/2] nút

cha

 Một nút coi đống

 Gỉa sử gốc r hai nút 2r 2r+1 đống:

 So sánh hai nút để tìm lớn  So sánh gốc với lớn

• Nếu gốc lớn xong

(34)

VÍ DỤ VUN ĐỐNG

 Vun đống sau:

Gốc gốc đống

 Gốc chưa đống nên cần vun gốc thành đống

16

40

8

6

10

1

2

(35)

Ý TƯỞNG THUẬT TỐN

 Thuật tốn:

Bước 1:Vun ban đầu thành đống Bước 2:Sắp xếp.

(36)

PHƯƠNG PHÁP SẮP XẾP HÒA NHẬP MERGE SORT

1 Phép trộn hai đường

1 Phép trộn hai đường 1 Phép trộn hai đường

1 Phép trộn hai đường

2 Ý tưởng thuật toán

2 Ý tưởng thuật toán 2 Ý tưởng thuật toán

2 Ý tưởng thuật toán

3 Giải thuật xếp

3 Giải thuật xếp 3 Giải thuật xếp

3 Giải thuật xếp

4 Ví dụ minh họa

4 Ví dụ minh họa 4 Ví dụ minh họa

4 Ví dụ minh họa

5 Đánh giá

5 Đánh giá 5 Đánh giá

(37)

PHÉP TRỘN HAI ĐƯỜNG TRỰC TIẾP

 Phép trộn đường phép hợp hai dãy khóa đã

sắp xếp ghép lại thành dãy khóa có kích thước tổng kích thước hai dãy khóa ban đầu dãy khóa tạo thành có thứ tự xếp

 Nguyên tắc trộn:

So sánh hai khóa đứng đầu hai dãy,chọn khóa nhỏ để đưa vào miền xếp đặt vào vị trí thích hợp.Khóa bị loại khỏi dãy chứa

(38)

VÍ DỤ PHÉP TRỘN HAI ĐƯỜNG

 Ta có hai mảng sau:(1,3,10,11)và(2,4,9).

 Kết sau phép trộn hai mảng

(1,2,3,4,9,10,11)

Mảng 1 Mảng 2 So sánh Miền xếp

(10,11) Ø (1,2,3,4,9,

10,11) (3,10,11) (2,4,9) 3>2 (1,2)

(1,3,10,11) (2,4,9) 1<2 (1)

(3,10,11) (4,9) 3<4 (1,2,3)

(39)

Ý TƯỞNG SẮP XẾP HÒA NHẬP

 Coi danh sách cần xếp(có n phần tử) n danh mà danh sách gồm phần tử.Như danh sách xếp.Trộn cặp hai danh sách kề cận thành danh sách có phần tử ta nhận n/2 danh sách xếp

 Xem danh sách cần xếp n/2 danh sách xếp,ta lại tiếp tục trộn cặp hai danh sách kế cận thành danh sách có phần tử xếp nhận n/4 danh sách

(40)

GIẢI THUẬT SẮP XẾP HÒA NHẬP

Bước 1:kiểm tra n

 Nếu n<2 return;

 Ngược lại ta chuyển xuống bước 2;

Bước 2: n1=n/2 ; //chia đôi mảng

n2=n-n1;

Bước 3:trong mà i<=n1

 A1[i]=a[i];//chuyển phần tử a[i] vào mảng A1

Bước 4:trong j<=n2

 A2[i]=a[i+n1];//chuyển phần tử a[i+n1] vào mảng A2

Bước 5:Mergesort(A1,n1);//tiếp tục chia đôi mảng A1

Mergesort(A2,n2);//tiếp tục chia đôi mảng A2

(41)

PHẦN II:Tìm kiếm

(42)

Nội dung

Bài tốn tìm kiếm

1

Tìm kiếm tuần tự

2

Tìm kiếm nhị phân

3

Cây nhị phân tìm kiếm

4

Tìm kiếm dựa vào giá trị khóa

(43)

Bài tốn tìm kiếm

 Cho bảng gồm n ghi R1, R2, R3, …, Rn Mỗi ghi Ri (1≤i≤n)

tương ứng với khoá ki

 X gọi khố tìm kiếm hay đối trị tìm kiếm (argument)

 Cơng việc tìm kiếm hồn thành hai tình sau xảy ra:  Tìm kiếm ghi có giá trị khố tương ứng X, lúc ta

nói phép tìm kiếm thoả (successfull)

 Khơng tìm thấy ghi có giá trị X cả: Phép tìm kiếm khơng

thoả (unsuccessfull) Khi bổ sung thêm ghi có khố X vào bảng gọi giải thuật tìm kiếm có bổ sung

 Khố ghi đặc điểm nhận biết ghi tìm

(44)

Tìm kiếm (seaquential searching)

 Nội dung:

 Tìm kiếm kỹ thuật tìm kiếm đơn giản cổ điển  Ta tóm tắt nội dung sau:

 “Bắt đầu từ ghi thứ nhất, so sánh khố tìm kiếm với

(45)

Tìm kiếm tuần tự…

 Giải thuật:

Type Mg=array[1 1000] of integer;

Function sequen_search(var k:Mg; n,x: integer):integer; Begin

i:=1; k[n+1]:=x;

while k[i]<>x i:=i+1;

if i = n + then sequen_search:=0 else sequen_search:=i;

End;

(46)

Tìm kiếm tuần tự…

 Ví dụ:cho dãy khóa sau:

 Nếu X = 87: Phép tìm kiếm thực sau:

Phép tìm kiếm thỏa mãn

11 23 36 42 58 65 74 87 94 99

11 23 36 42 58 65 74 8787 94 99 87

(47)

Tìm kiếm tuần tự…

 Nếu X = 51: Phép tìm kiếm thực sau:

 Phép tìm kiếm khơng thỏa

11 23 36 42 58 65 74 87 94 99 51

(48)

Tìm kiếm tuần tự…

 Phân tích đánh giá:

 Ở để đánh giá hiệu lực pháp tìm kiếm ta

cũng dựa vào số lượng phép so sánh

 Ta thấy với giải thuật thuận lợi cần

phép so sánh: Cmin = 1; cịn xấu Cmax = n+1

 Trường hợp xấu trung bình, cấp độ

lớn thời gian thực giải thuật O(n)

 Thời gian trung bình nhỏ xếp

(49)

Nội dung

Bài toán tìm kiếm

1

Tìm kiếm tuần tự

2

Tìm kiếm nhị phân

3

Cây nhị phân tìm kiếm

4

Tìm kiếm dựa vào giá trị khóa

(50)

Tìm kiếm nhị phân (Binary search) Được sử dụng danh sách xếp theo thứ tự (tăng dần)

Ta có khóa trung bình ktb ta có: Tb=(n+1)/2

Tại bước ta chia nửa danh sách giữ lại nửa chứa khóa cần tìm bỏ nửa khơng chứa khóa

(51)

Tìm kiếm nhị phân…

 Giải thuật:

Type Mg=array[1 1000] of integer;

Function binary_search(var k:Mg; x, n: integer):integer; Var d, c, g: integer; found: boolean;

Begin

d := 1; c := n; found := false; while not found and (d <= c) begin

g := (d + c) div 2;

if k[g] = x then found := true else if x > k[g] then d := g + else c := g - 1;

end;`

(52)

Tìm kiếm nhị phân…

 Giải thuật viết dạng đệ quy:

Function Loc(Var k: Mg; x, d, c: integer): integer; Var g: integer;

Begin

if (d > c) then Loc := else

begin

g := (d + c) div 2;

if k[g] = x then Loc := g else if (k[g] > x) then

Loc := Loc(k, x, d, g - 1) else Loc := Loc(k, x, g + 1, c) end;

(53)

Tìm kiếm nhị phân…

 Ví dụ: với dãy khóa:

 Nếu x = 23: Phép tìm kiếm thỏa mãn

bước sau:

Tìm thấy x = 23 vị trí thứ  phép tìm kiếm

thỏa mãn

11 23 36 42 58 65 74 87 94 99

11 23 36 42 58 65 74 87 94 99

(54)

Tìm kiếm nhị phân…

 Nếu x = 71: Phép tìm kiếm khơng thỏa bước

thực sau:

Phép tìm kiếm khơng thỏa

(55)

Tìm kiếm nhị phân…

 Phân tích đánh giá:

 Ta thấy số lượng phép toán so sánh phụ thuộc vào x.

 Độ phức tạp tính tốn giải thuật tìm kiếm nhị phân

trường hợp tốt là:O(1), trường hợp xấu O(log2 n) trường hợp trung bình O(log2 n).

 Rõ ràng so với tìm kiếm tuần tự, chi phí tìm kiếm nhị phân

ít nhiều

 Tuy nhiên ta không nên quên trước sử dụng tìm

kiếm nhị phân dãy khóa phải xếp rồi, nghĩa thời gian chi phí cho phải kể đến

 Nếu dãy khóa ln biến động (được bổ sung thêm loại

(56)

Nội dung

Bài tốn tìm kiếm

1

Tìm kiếm tuần tự

2

Tìm kiếm nhị phân

3

Cây nhị phân tìm kiếm

4

Tìm kiếm dựa vào giá trị khóa

(57)

Cây nhị phân tìm kiếm (binary search tree)

 Định nghĩa:

 Cây nhị phân tìm kiếm nhị phân mà khóa nút lớn khóa khác tất nút

thuộc bên trái,và nhỏ tất nút thuộc phải

 Ví dụ:

Duyệt theo thứ tự ta thu dãy tăng dần là: 17, 25, 34, 50, 66, 68, 71, 94

71 66

34

17

50 25

(58)

Cây nhị phân tìm kiếm…

 Đối với nhị phân tìm kiếm để tìm xem khóa

X có khơng ta thực bước sau:

 So sánh X với khóa gốc xảy trường hợp :

1 Khơng có gốc (cây rỗng): X khơng có cây,cho nên phép tìm

kiếm khơng thỏa

2 X trùng với khóa gốc, phép tìm kiếm đươc thỏa

3 X nhỏ khóa gốc, ta xét trái gốc,và tiếp

tục so sánh với khóa gốc

4 X lớn khóa gốc ta xét phải gốc,cây phải

(59)

Cây nhị phân tìm kiếm…

 Ví dụ: Nếu X = 68 ta thực sau:

71 66 94 34 17 50 25 68

1 So sánh X với 34, X >34 ta chuyển sang phải So sánh X với 66, X >66 ta

chuyển sang phải So sánh X với 71, X<71 ta

chuyển sang trái

4 So sánh X với 68, X=68 tìm kiếm thỏa

34

66

71

(60)

Cây nhị phân tìm kiếm…

 Ngồi phép tìm kiếm thỏa,cịn có số

trường hợp phép tìm kiếm khơng thỏa Khi ta bổ sung ln X vào nhị phân tìm kiếm.

(61)

Cây nhị phân tìm kiếm…

Type Tree = ^Node; Node = record Info: integer; Left, Right: Tree; end;

Procedure Them(var T: Tree; x: integer); Begin

if T = NIL then begin new(T);

T^.Info:= x;

T^.Left:= NIL; T^.Right:= NIL; end

else if x < T^.Info then Them(T^.Left, x)

(62)

Cây nhị phân tìm kiếm…

 Với giải thuật ta dựng nhị phân tìm kiếm ứng với dãy khóa đưa vào cách liên tục bổ sung nút ứng với khóa, bắt đầu từ rỗng.

(63)

Cây nhị phân tìm kiếm…

42 23 74 11 65 94

42

23 74

65 94

(64)

Cây nhị phân tìm kiếm…

 Nhận xét:

 Với giải thuật cấp độ lớn thời gian thực

(65)

Cây nhị phân tìm kiếm…

 Loại bỏ nhị phân tìm kiếm:

 Phép loại bỏ nhị phân tìm kiếm khơng đơn

giản phép bổ sung hay phép tìm kiếm

 Muốn xóa giá trị nhị phân tìm kiếm

(66)

Loại bỏ nhị phân tìm kiếm

 Nút D nút lá, trường hợp ta việc đem mối nối

cũ trỏ tới nút D (từ nút cha D) thay nil, giải phóng nhớ cấp cho nút D.

4

1

2

5

6

(67)

Loại bỏ nhị phân tìm kiếm…

 Nút D có nhánh con, ta đem gốc nhánh

con vào chỗ nút D, tức chỉnh lại mối nối: Từ nút cha của nút D không nối tới nút D mà nối tới nhánh nhất nút D Cuối cùng, ta giải phóng nhớ cấp cho

nút D 4

1

2

3

5

(68)

Loại bỏ nhị phân tìm kiếm…

 Nút D có hai nhánh trái phải, có hai cách làm hợp lý cả:

 Hoặc tìm nút chứa khóa lớn trái, đưa giá trị chứa

trong sang nút D, xóa nút

4

1

2

6

5

(69)

Loại bỏ nhị phân tìm kiếm…

 Hoặc tìm nút chứa khóa nhỏ phải, đưa giá trị chứa

trong sang nút D, xóa nút

4

1

2

6

5

(70)

Loại bỏ nhị phân tìm kiếm…

Procedure xoa(var p: nut);  Var

q,p1:nut;  Begin

 if (p^.right=NIL) then  begin

 q:=p;  p:=p^.left;  end

 else if (p^.left=NIL) then  begin

 q:=p;

 p:=p^.right;  end else

 begin

 q:= p^.left;  if q^.right=NIL then  begin

 p^.key:=q^.key;  p^.left:=q^.left;  end else begin

(71)

Nội dung

Bài tốn tìm kiếm

1

Tìm kiếm tuần tự

2

Tìm kiếm nhị phân

3

Cây nhị phân tìm kiếm

4

Tìm kiếm dựa vào giá trị khóa

(72)

Giới thiệu phương pháp:

 Phương pháp tìm kiếm dựa vào thân giá trị

khoá

Nội dung phương pháp:

Thiết lập hàm địa h(k) thực phép ánh xạ tập giá trị

của k lên bảng địa (các số nguyên từ → m-1 m độ dài bảng) Như ta ln có 0≤ h(k)≤ m Giá trị h(k) sử dụng lưu trữ tìm kiếm

(73)

Ví dụ:

Xét ghi chứa khóa sau: 1090, 1342, 6907 6498 chọn chữ số cuối ghi làm địa đặc

chưng cho ghi ta có:

1090 1090  090 090

1342 1342  342 342

6907 6907  907 907

6498 6498  498 498

(74)

 Khi khóa đặc chưng địa cịn địa

dụng cho khóa

 Tuy nhiên có trường hợp địa trùng dù ghi

có khóa khác theo cách chọn địa ta cần khắc phục đụng độ!!!

(75)

Hàm rải: có ba phương pháp:

- phương pháp phân đoạn - phương pháp chia

(76)

Phương pháp phân đoạn:

Được áp dụng khóa có kích thước lớn thay đổi!!! Chúng ta chia khóa thành nhiều đoạn có độ dài độ dài địa chỉ!

(77)

Các kỹ thuật phân đoạn:

- Tách: tách đoạn ra, xếp đoạn thành hàng, dóng

thẳng theo đầu trái đầu phải.

- Gấp: gấp đoạn lại theo đường biên tương tự gấp giấy Các chữ số rơi vào chỗ đặt thành hàng dóng thẳng với

- Sau đoạn kết hợp theo cách đó.

(78)

Ví dụ:

Cho khóa có giá trị sau: 19188772

+ Bằng phương pháp tách đoạn ta phân khóa thành ba đoạn bằng theo tứ tự từ phải qua trái:

772 + 118 019 909

Và ta chọn 909 địa khóa ban đầu!

(79)

+ Bằng phương pháp gấp ta có:

277

+ 188

910

1375

Và ta chọn theo nhiều cách để địa chỉ, có thể như: 137, 375 làm địa rải !!!

(80)

Phương pháp băm:

(81)

Phương pháp chia:

- Lấy số dư phép chia giá trị khố cho kích thước m bảng rải để làm địa rải Nghĩa là: h(k) = k mod m

- Thông thường: Chọn m* số nguyên tố, gần m nhỏ m để thay cho m Tức h(k) = k mod m* để khắc phục

(82)

- Ví dụ:

- Ví dụ: Với m*=997::

423 Giá trị khóa

5042 417

7042

402 0402

(83)

83

Tìm Kiếm Dựa Vào Khóa

Tìm Kiếm Dựa Vào Khóa

Phương pháp nhân:

- Giá trị khố nhân với nó, sau lấy số bao

gồm số chữ số “giữa” kết để làm địa rải. - Ví dụ:

K 5402 0367 1426 K2 29181604 00134689 02033476

H(K) gồm chữ số 181 816 134 346 033 334

(84)

Khắc phục đụng độ:

Có nhiều cách khắc phục đụng độ nghiên cứu:

(85)

Phương pháp địa mở:

Phương pháp địa mở đơn giản phương pháp thử tuyến tính.

 Hiện tượng đụng độ khắc phục cách:

- Xét xem vị trí bên cạnh vị trí bận.

- Nếu vị trí trống đưa ghi vào.

- Nếu bận tiếp tục tìm kiếm tuần tự, tới cuối (đầu)

bảng phải quay lại đầu (cuối) tìm chỗ trống quay lại vị trí cũ mà khơng tìm thấy chỗ

trống ta nói bảng rơi vào tình trạng tràn.

(86)

Ví dụ:

(87)

548

548 228228228228 503503 727727 983983 249249 491491

V7 V0 V4 V5 V2 V3 V6

V1 Trống nên 548 sếp vàoTrống nên 548 sếp vào

Trống nên 228 sếp vào

Trống nên 228 sếp vào

Trống nên 503 sếp vào

Trống nên 503 sếp vào

V6 bận nên chuyển xuống V7

V6 bận nên chuyển xuống V7

Trống nên 983 sếp vào

Trống nên 983 sếp vào

V4 bận nên chuyển xuống V5

V4 bận nên chuyển xuống V5

Trống nên 491được sếp vào

Trống nên 491được sếp vào

548

548 228228228228 503503 727727 983983 249249 491491 548

548 228228228228 503503 727727 983983 249249 491491 548

Ngày đăng: 07/05/2021, 20:55

Xem thêm:

TỪ KHÓA LIÊN QUAN

w