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ẬT Bướ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