Tiểu luận Cấu trúc dữ liệu và giải thuật Đề tài:

27 3.3K 7
Tiểu luận Cấu trúc dữ liệu và giải thuật Đề tài:

Đ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

DANH SÁCH THÀNH VIÊN Họ tên Mã sinh viên Hoàng Minh Tâm 11146192 Phạm Nguyễn Tiến 11144316 Lại Thị Thanh Trang 11144538 Đoàn Thị Tố Uyên 11144942 MỤC LỤC LỜI NÓI ĐẦU Ngày nay, ngành công nghệ thông tin ngày phát triển, khoa học máy tính không ngừng vươn tới tìm tòi mẻ Mọi người chủ yếu làm việc dựa máy móc thiết bị điện tử phần mềm ứng dụng lại trở nên quan trọng hữu ích hết Tất thông tin muốn biết, muốn tìm hiểu, bạn tìm Internet thông qua công cụ tìm kiếm Các công cụ tìm kiếm xây dựng từ phần mềm tìm kiếm khác Và chương trình tìm kiếm đề cập đến tiểu luận gồm: • Tìm kiếm • Tìm kiếm nhị phân • Tìm kiếm nhị phân tìm kiếm CHƯƠNG I: GIỚI THIỆU VÀ PHÁT BIỂU ĐỀ TÀI I Phát biểu đề tài Trong sống hàng ngày chúng ta, việc tìm kiếm thiếu chẳng hạn việc tìm sách giá sách, mặt hàng để mua, người bạn facebook, điều thể toán tin học tìm xem dãy số cho có số giá trị X cho trước hay không ? Bài toán tìm kiếm phát biểu sau: Cho bảng gồm n ghi R 1, R2, R3, , Rn Mỗi ghi Ri (1 ≤ i ≤ n) có khóa K i tương ứng Hãy tìm ghi có giá trị khóa tương ứng X cho trước? X gọi khóa tìm kiếm hay đối trị tìm kiếm Quá trình tìm kiếm kết thúc xảy hai trường hợp sau: - Trường hợp 1: Tìm ghi có giá trị khóa tương ứng X, ta nói phép tìm kiếm thỏa (tìm thấy) - Trương hợp 2: Không tìm ghi có giá trị khóa tương ứng X cả, ta nói phép tìm kiếm không thỏa (không tìm thấy) Khi phép tìm kiếm không thỏa thường xuất yêu cầu bổ sung thêm ghi có khóa X vào, giải thuật thể yêu cầu gọi “Tìm kiếm có bổ sung” Ở đây, ta xét phương pháp tìm kiếm phổ biến thực tìm kiếm liệu lưu trữ nhớ mà ta gọi tìm kiếm Không giảm tính tổng quát, giải thuật ta xét việc tìm kiếm khóa đại diện cho ghi tương ứng II Phạm vi, đối tượng nghiên cứu Trước hết, cần hiểu “giải thuật tìm kiếm” gì? Trong ngành khoa học máy tính, giải thuật tìm kiếm thuật toán lấy đầu vào toán trả kết lời giải cho toán đó, thường sau cân nhắc loạt lời giải Hầu hết thuật toán nghiên cứu nhà khoa học máy tính để giải toán thuật toán tìm kiếm Có loại tìm kiếm là: tìm kiếm thông tin, tìm kiếm có thông tin tìm kiếm đối kháng Trong đây, ta đề cập đến tìm kiếm thông tin Tìm kiếm thông tin bao gồm : tìm kiếm danh sách tìm kiếm Tìm kiếm danh sách lại chia thành loại : Tìm kiếm tuyến tính (hay gọi tìm kiếm tuần tự), tìm kiếm nhị phân, tìm kiếm nội suy, bảng băm xét tìm kiếm tìm kiếm nhị phân a) Tìm kiếm tuần tự: Tìm kiếm (tiếng Anh Sequential search) hay tìm kiếm tuyến tính (tiếng Anh linear search) phương pháp tìm kiếm phần tử cho trước danh sách cách duyệt phần tử danh sách lúc tìm thấy giá trị mong muốn hay duyệt qua toàn danh sách Nó có thời gian chạy lớn: O(n), n số phần tử danh sách, sử dụng thẳng cho danh sách mà không cần tiền xử lý b) Tìm kiếm nhị phân Thuật toán tìm kiếm nhị phân dùng để tìm kiếm phần tử danh sách xếp, ví dụ danh bạ điện thoại xếp theo tên, tìm kiếm số điện thoại người theo tên người Thuật toán tìm kiếm nhị phân chạy nhanh tìm kiếm có số nhược điểm Tìm kiếm nhị phân chậm bảng băm Nếu nội dung danh sách bị thay đổi danh sách phải xếp lại trước sử dụng tìm kiếm nhị phân Thao tác thường tốn nhiều thời gian Thời gian thực thi: Sau phép so sánh, số lượng phần tử danh sách cần xét giảm nửa Thuật toán kết thúc số lượng phần tử không Vì thời gian thực thi thuật toán O(log2n) c) Tìm kiếm trên nhị phân tìm kiếm − Cây: Trong khoa học máy tính, cấu trúc liệu sử dụng rộng rãi gồm tập hợp nút (tiếng Anh: node) liên kết với theo quan hệ cha - Cây cấu trúc liệu mô (hay nói cách khác chép) (có gốc) lý thuyết đồ thị Hầu khái niệm lý thuyết đồ thị thể cấu trúc liệu Tuy nhiên cấu trúc liệu tìm ứng dụng phong phú hiệu nhiều giải thuật Khi phân tích giải thuật cấu trúc liệu cây, người ta thường vẽ tương ứng lý thuyết đồ thị  Các nút: o Nút gốc: Trong có nút đặc biệt gọi nút gốc (hay nói đơn giản gốc) Nút gốc nút nút cha Nút gốc nơi khởi đầu nhiều giải thuật Tất nút khác nối nút gốc đường qua cạnh hay liên kết o Nút lá: Các nút nút gọi nút (lá) o Các nút trong: nút nút có con, nghĩa nút Các khái niệm mức nút, chiều cao định nghĩa giống lý thuyết đồ thị  Cây con: Một phận cấu trúc liệu mà tự Một nút T, với nút tạo thành T  Cây lý thuyết đồ thị: Trong lý thuyết đồ thị, một đồ thị liên thông chu trình Cây gọi tự  Cây thứ tự: Có hai dạng cấu trúc sở không thứ tự có thứ tự Một không thứ tự có cấu trúc cây, nút, thứ tự Một cây, nút tuân theo thứ tự xác định gọi có thứ tự Cây tìm kiếm nhị phân thứ tự điển hình  Cây tổng quát nhị phân: Các nút có nhiều hai gọi tổng quát, nút có không hai gọi nhị phân − Cây nhị phân tìm kiếm: • Cây tìm kiếm ứng với n khóa k1,k2, kn nhị phân mà nút gán khóa cho với mỗi nút k: o o Mọi khóa trái nhỏ khóa nút k Mọi khóa phải lớn khóa nút k • Cây tìm kiếm nhị phân cấu trúc liệu sử dụng để xây dựng cấu trúc liệu trừu tượng tập hợp, đa tập hợp, dãy kết hợp − Duyệt nhị phân: Khi xét nhị phân, đỉnh với đỉnh đứng sau gốc Ta xét đỉnh A đỉnh nhị phân Theo thứ tự người ta xem xét thứ tự thăm đỉnh A so với việc thăm hai thăm A trước sau, thăm A xen việc thăm hai con, thăm A sau thăm hai con: A, trái, phải Con trái, A, phải Con trái, phải, A Tất nhiên nút việc thăm không diễn Còn L R A lại gốc con, việc thăm thay việc duyệt gốc Từ có phương pháp duyệt tiền thứ tự, trung thứ tự, hậu thứ tự nhị phân có gốc đỉnh A sau: - Duyệt tiền thứ tự gốc A Nếu Cây rỗng: Return Thăm A Duyệt tiền thứ tự gốc L Duyệt tiền thứ tự gốc R - Duyệt trung thứ tự gốc A Nếu Cây rỗng: Return Thăm A Duyệt trung thứ tự gốc L Thăm A Duyệt trung thứ tự gốc R - Duyệt hậu thứ tự gốc A Nếu rỗng: Return Duyệt hậu thứ tự gốc L Duyệt hậu thứ tự gốc R Thăm A III Mục đích luận − Xác định ý tưởng ban đầu giải thuật − Viết giải thuật − Nêu lên độ phức tạp giải thuật − Nêu ví dụ minh họa CHƯƠNG II: NỘI DUNG ĐỀ TÀI I Tìm kiếm Ý tưởng giải thuật Trong Khoa học máy tính tìm kiếm (tiếng Anh Sequential search) hay tìm kiếm tuyến tính (tiếng Anh linear search) phương pháp tìm kiếm phần tử cho trước danh sách cách duyệt phần tử danh sách lúc tìm thấy giá trị mong muốn hay duyệt qua toàn danh sách Ý tưởng thuật toán: Xét dãy số cần tìm có n phần tử: k1, k2, k3, , kn Giá trị cần tìm X - Bắt đầu từ khoá đầu tiên, so sánh khoá X với khoá tương ứng dãy - Quá trình tìm kiếm kết thúc tìm khoá thoả mãn đến hết dãy gặp điều kiện dừng vòng lặp Giải thuật Thuật toán tiến hành so sánh x với phần tử thứ nhất, thứ hai, mảng A gặp phần tử có khóa cần tìm, tìm hết mảng mà không thấy X  Các bước thực giải thuật Bước 1: i = 1;// Bắt đầu phần tử dãy Bước 2: So sánh k[i] với X, có khả năng: + k[i] = X: Tìm thấy Dừng + k[i] ≠ X: Sang bước Bước 3: i = i+1; //xét phần tử mảng Nếu i > N: Hết mảng, không tìm thấy Dừng Ngược lại: Lặp lại Bước  Cài đặt giải thuật ① {nhập dãy khóa k mảng A với số phần tử n} Procedure NhapDayKhoa(Var A: Array[1 100] of Integer; var n: Integer); Var i: Integer; Begin Write(‘Nhap so phan tu:’); readln(n); For i:=0 to n Begin Write(‘Nhap phan tu thu ‘,i); readln(A[i]); End; End; ② Function TK_TUANTU(k, n, X); {Cho dãy khóa k gồm n khóa, giải thuật nhằm tìm kiếm dãy xem có khóa X hay không? Nếu có hàm đưa số tương ứng khóa đó, không thấy đưa giá trị 0} (1) {Khởi tạo} i:= 1; (2) {Thực tìm kiếm dãy khóa} While ((i n then return(0) 10 Như vậy, thời gian thực phép gán không đáng kể thuật toán cải tiến chạy nhanh thuật toán ban đầu Ví dụ minh họa Sau đây, ta minh họa giải thuật tìm kiếm qua ví dụ sau: Cho dãy khóa: 12 Tìm X = X = 10? 14 20 11 30 28 - Với X = 2, ta thực bước tìm kiếm sau: + So sánh X với 12: X ≠ 12 => Chuyển sang khóa i = + So sánh X với 8: X ≠ => Chuyển sang khóa i = + So sánh X với 2: X = => Tìm kiếm thỏa, trả kết số i = => Khóa có giá trị X nằm vị trí thứ dãy khóa - Với X = 10, ta thực bước tìm kiếm sau: + So sánh X với 12: X ≠ 12 => Chuyển sang khóa i = + So sánh X với 8: X ≠ => Chuyển sang khóa i = + So sánh X với 2: X ≠ => Chuyển sang khóa i = + So sánh X với 14: X ≠ 14 => Chuyển sang khóa i = + So sánh X với 3: X ≠ => Chuyển sang khóa i = + So sánh X với 5: X ≠ => Chuyển sang khóa i = + So sánh X với 20: X ≠ 20 => Chuyển sang khóa i = + So sánh X với 11: X ≠ 11 => Chuyển sang khóa i = + So sánh X với 30: X ≠ 30 => Chuyển sang khóa i = 10 13 + So sánh X với 28: X ≠ 28 => Chuyển sang khóa i = 11, n = 10 < 11 => Tìm kiếm không thỏa => Không tìm thấy khóa có giá trị X II Tìm kiếm nhị phân Ý tưởng giải thuật Thuật toán tìm kiếm tỏ đơn giản thuận tiện trường hợp số phần tử dãy không lớn Tuy nhiên, số phần tử dãy lớn, chẳng hạn cần tìm từ từ điển hay tìm kiếm tên khách hàng danh bạ điện thoại thành phố lớn thực thuật toán tìm kiếm thực nhiều thời gian Trong thực tế, thông thường phần tử dãy có thứ tự, thuật toán tìm nhị phân sau rút ngắn đáng kể thời gian tìm kiếm dãy có thứ tự Ta quy ước dãy khóa xếp theo chiều tăng dần giá trị số thứ tự từ điển với giá trị ký tự Khóa lấy để so sánh với khóa tìm kiếm luôn chọn khóa “ở giữa” dãy khóa xét Giả sử dãy khóa xét k l, kl+1, ,kr khóa “ở giữa” dãy km với m =(nghĩa phép toán (l+r) div 2) Đầu tiên, ta xét dãy khóa ban đầu kl, kl+1, , kr So sánh giá trị X với giá trị phần tử dãy km, xảy trường hợp sau: • • Nếu X = km phép tìm kiếm thỏa, đưa số m tương ứng Nếu X < km, phép tìm kiếm thực tiếp với dãy trước khóa k m kl, kl+1, ,km Nếu X > km, phép tìm kiếm thực tiếp với dãy sau khóa km km+1,km+2, ,kr • Lặp lại trình tìm thấy phần tử có giá trị X dãy khóa xét rỗng (tức không tìm thấy) Giải thuật Với ý tưởng giải thuật trên, sau ta cài đặt giải thuật hai dạng: dạng đệ quy dạng không đệ quy (dạng lặp) a Giải thuật dạng đệ quy  Các bước thực giải thuật: 14 B1: Nhập vào dãy khóa xếp B2: If (l > r) B2.1: Không tìm thấy B2.2: Thực bước B3: Tính số m theo công thức: m = B4: If (X = k[m]) B4.1: Tìm thấy vị trí m B4.2: Thực bước B5: If (X < k[m]) Tìm đệ quy dãy khóa kl, kl+1, , km-1 B6: If (X > k[m]) Tìm đệ quy dãy khóa km+1, km+2, , kr B7: Kết thúc  Cài đặt giải thuật: ① {nhập dãy khóa k mảng A với số phần tử n} Procedure NhapDayKhoa(Var A: Array[1 100] of Integer; var n: Integer); Var i: Integer; Begin Write(‘Nhap so phan tu:’); readln(n); For i:=0 to n Begin Write(‘Nhap phan tu thu ‘,i); readln(A[i]); End; End; ② Function TKNF_DQ(k,l,r,X); {Dãy khóa k gồm n khóa xếp theo chiều tăng dần, giải thuật sử dụng biến l, r, m – tương ứng số dưới, số số dãy khóa xét (ban đầu l = 1, r = n); giải thuật sử dụng thêm biến vitri để đưa số khóa tương ứng tìm thấy, không tìm thấy vitri có giá trị 0} (1) If (l > r) then vitri:=0; (2) else {dãy khóa xét có số nhỏ số trên} Begin {Tính số m theo công thức} m:= (l+r) div 2; {Thực so sánh để tìm kiếm dãy khóa} Case X < k[m]: vitri:= TKNF_DQ(k,l,m-1,X); X > k[m]: vitri:= TKNF_DQ(k,m+1,r,X); else vitri:= m; end case; end; 15 (3) return(vitri);  Phân tích thuật toán đệ quy: b  - Trường hợp tốt phần tử mảng có giá trị X: Số phép gán: Gmin = Số phép so sánh: Smin = - Trường hợp xấu không tìm thấy phần tử có giá trị X: Số phép gán: Gmax = + Số phép so sánh: Smax = + - Trung bình: Số phép gán: Gtb = ½ + Số phép so sánh: Stb = ½(3 + 3) Giải thuật dạng lặp(không đệ quy) Các bước thực giải thuật B1:khởi tạo: l = r=n B2: If (l > r) B2.1: không tìm thấy B2.2: thực bước B3: m = B4: If (X = k[m]) B4.1: Tìm thấy vị trí m B4.2: Thực bước B5: If (X < m) B5.1: r = m – B5.2: lặp lại B2 B6: If (X > m) B6.1: l = m+1 B6.2: lặp lại B2 B7: Kết thúc  Cài đặt giải thuật ① {nhập dãy khóa k mảng A với số phần tử n} 16 Procedure NhapDayKhoa(Var A: Array[1 100] of Integer; var n: Integer); Var i: Integer; Begin Write(‘Nhap so phan tu:’); readln(n); For i:=0 to n Begin Write(‘Nhap phan tu thu ‘,i); readln(A[i]); End; End; ② Function TKNF_LAP(k,n,X); {Cho dãy khóa k gồm n khóa xếp theo chiều tăng dần, giải thuật sử dụng biến l, r, m – tương ứng số dưới, số số dãy khóa xét (ban đầu l = 1, r = n); giải thuật sử dụng thêm biến vitri để đưa số khóa tương ứng tìm thấy, không tìm thấy vitri có giá trị 0} (1) {Khởi tạo} l:= 1; r:= n; vitri:= 0; (2) {Thực tìm kiếm} While l k[m]: l:= m + 1; else vitri:= m; end case; end; (3) return(vitri);  Phân tích thuật toán lặp - Trường hợp tốt phần tử mảng có giá trị X: Số phép gán: Gmin = Số phép so sánh: Smin = - Trường hợp xấu không tìm thấy phần tử có giá trị X: Số phép gán: Gmax = + Số phép so sánh: Smax = + - Trung bình: Số phép gán: Gtb = + 3.5 17 Số phép so sánh: Stb = ½(3 + 3) Độ phức tạp giải thuật Để đánh giá độ phức tạp giải thuật, ta dựa vào phép so sánh Từ bước phân tích thuật toán trên, ta dễ dàng xác định độ phức tạp thuật toán là: - Trong trường hợp tốt nhất: Tt(n) = O(1) - Trong trường hợp xấu nhất: Tx(n) = O() - Trong trường hợp trung bình: Ttb(n) = O() Ví dụ minh họa Ta minh họa giải thuật tìm kiếm nhị phân với khóa tìm kiếm X = X = 23 dãy khóa gồm 10 phần tử xếp sau: 15 17 22 25 30 - Với X = 5: bước thực tìm kiếm sau: [1 [1 3 4 [4 5] 5] [5] [5] 15 17 22 25 30 => Phép tìm kiếm thỏa - Với X = 23: bước thực tìm kiếm sau: [1 15 [15 17 17 22 22 [22 25 25 25 [25 ][ 30] 30] 30] 30] => Phép tìm kiếm không thỏa Với: Ký hiệu “[“ ứng với l, “]” ứng với r “][“ ký hiệu dãy khóa xét rỗng 18 III Tìm kiếm nhị phân tìm kiếm Khái niệm nhị phân tìm kiếm Cây nhị phân tìm kiếm ứng với n khóa cho k 1, k2, k3, , kn nhị phân mà nút định danh khóa dãy khóa cho (mỗi khóa tương ứng với nút) nút thỏa mãn đồng thời hai tính chất sau: + Mọi nút thuộc trái nút nhỏ nút + Mọi nút thuộc phải nút lớn nút Ta quy ước thứ tự tăng dần dãy khóa dãy số thứ tự từ điển ký tự, xâu ký tự Nếu thứ tự giảm dần dãy khóa nhị phân tìm kiếm định nghĩa sau: Cây nhị phân tìm kiếm ứng với n khóa cho k 1, k2, k3, , kn nhị phân mà nút định danh khóa dãy khóa cho (mỗi khóa tương ứng với nút) nút thỏa mãn đồng thời hai tính chất sau: + Mọi nút thuộc trái nút lớn nút + Mọi nút thuộc phải nút nhỏ nút Ý tưởng giải thuật Cây nhị phân tìm kiếm lưu trữ móc nối máy, có nút gốc trỏ trỏ T Quy cách nút tổ chức sau: TROTRAI KHOA DL_KHAC TROPHAI Trong đó: - Trường TROTRAI, TROPHAI: Là trường trỏ tương ứng trỏ tới nút gốc trái nút gốc phải nút - Trường KHOA: Chứa liệu (thông tin) nút Trường DL_KHAC lưu trữ thông tin khác ghi, vai trò tìm kiếm Quá trình Tìm kiếm sau: So sánh khóa tìm kiếm X với khóa gốc xảy trường hợp sau: 19 + Cây rỗng (T = null): X cây, phép tìm kiếm không thỏa + X trùng với khóa gốc: Tìm thấy X cây, phép tìm kiếm thỏa + X nhỏ khóa gốc: Công việc tìm kiếm thực tiếp tục cách xét trái gốc với kỹ thuật tương tự Phép tìm kiếm không thỏa thỏa + X lớn khóa gốc: Công việc tìm kiếm thực tiếp tục cách xét phải gốc với kỹ thuật tương tự Phép tìm kiếm không thỏa thỏa Trong trường hợp phép tìm kiếm không thỏa, thường xuất yêu cầu bổ sung thêm nút mà trường KHOA có giá trị X vào nhị phân tìm kiếm cho tính chất nhị phân tìm kiếm không thay đổi ta gọi giải thuật tìm kiếm có bổ sung Giải thuật tìm kiếm có bổ sung nhị phân tìm kiếm cài đặt sau Giải thuật Function CAY_TKNF(T,X); {Giải thuật thực tìm kiếm nhị phân tìm kiếm (có nút gốc trỏ T) xem có nút khóa X hay không? Nếu tìm kiếm thỏa đưa trỏ q trỏ tới nút đó, tìm kiếm không thỏa bổ sung nút có khóa X vào cho thỏa mãn tính chất nhị phân tìm kiếm đưa trỏ q trỏ tới nút bổ sung kèm thông báo Trong giải thuật sử dụng thêm trỏ p sau trỏ q} {Khởi tạo} p:= null; q:= T; {Thực tìm kiếm} While q null Case X < KHOA(q): 20 p:= q; q:= TROTRAI(q); {Chuyển xuống trái} X > KHOA(q): p:= q; q:= TROPHAI(q); {Chuyển xuống phải} X = KHOA(q): return(q); end case; {Tìm không thấy, thực bổ sung} {Xin cấp phát nút mới} q KHOA(p): TROPHAI(p):= q; {Bổ sung vào làm nút phải nút trỏ p} end case; writeln(‘Không tìm thấy có nút khóa X Đã bổ sung.’); return(q); 21 Chú ý: Ta sử dụng giải thuật tìm kiếm có bổ sung để xây dựng nhị phân tìm kiếm ứng với dãy khóa cho ban đầu cách liên tục bổ sung nút ứng với khóa rỗng Đầu tiên ta phải dựng lên nút gốc ứng với khóa (ta quy ước khóa đầu dãy), trường hợp ứng với trường hợp tìm kiếm rỗng, sau với khóa ta tìm không thấy bổ sung vào khóa cuối dãy khóa bổ sung vào giải thuật kết thúc ta nhị phân tìm kiếm ứng với dãy khóa cho Dạng nhị phân tìm kiếm hoàn toàn phụ thuộc vào thứ tự phần tử thuộc dãy cho Như vậy, với dãy khóa trình tự khóa khác cho ta nhị phân tìm kiếm khác Phân tích đánh giá độ phức tạp Với giải thuật CAY_NFTK trên, ta thấy dạng nhị phân tìm kiếm dựng phụ thuộc hoàn toàn vào dãy khóa đưa vào ban đầu Như vậy, trường hợp tốt nhất, nhị phân tìm kiếm có dạng nhị phân hoàn chỉnh có chiều cao h = mà số lượng phép so sánh lại tỉ lệ với chiều cao nên độ phức tạp giải thuật trường hợp O() Trường hợp xấu xảy nhị phân có dạng nhị phân suy biến (xảy dãy khóa đưa vào ban đầu vốn có xếp rồi), trường hợp danh sách tuyến tính tìm kiếm lúc tìm kiếm có độ phức tạp mà ta biết O() Trong trường hợp trung bình, người ta chứng minh số lượng phép so sánh C tb = 1,386., độ phức tạp giải thuật trường hợp trung bình O( Ví dụ minh họa Sau đây, ta minh họa việc tìm kiếm với khóa tìm kiếm X = 25 X = 75 nhị phân tìm kiếm tương ứng với dãy khóa: 50 30 19 25 90 54 22 Ta có nhị phân tìm kiếm tương ứng với dãy khóa trên: 74 80 50 22 19 25 30 54 90 74 80 22 Cây nhị phân tìm kiếm ứng với dãy khóa cho - Với X = 25, ta thực tìm kiếm sau: + So sánh X với 50: X < 50 => Chuyển sang tìm kiếm trái + So sánh X với 19: X > 19 => Chuyển sang tìm kiếm phải + So sánh X với 25: X = 25 => Phép tìm kiếm thỏa - Với X = 75, ta thực tìm kiếm sau: + So sánh X với 50: X > 50 => Chuyển sang tìm kiếm phải + So sánh X với 90: X < 90 => Chuyển sang tìm kiếm trái + So sánh X với 54: X > 54 => Chuyển sang tìm kiếm phải + So sánh X với 74: X > 74 => Chuyển sang tìm kiếm phải + So sánh X với 80: X < 80 => Chuyển sang tìm kiếm trái, trái rỗng nên phép tìm kiếm không thỏa thực bổ sung nút có giá trị khóa 75 vào làm nút trái nút có giá trị khóa 80 (Xem hình đây) 23 50 90 30 54 19 25 74 80 22 75 Cây nhị phân tìm kiếm sau bổ sung nút có khóa 75 24 CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN I Đánh giá kết nghiên cứu Qua việc tìm hiểu giải thuật tìm kiếm trên, ta đánh giá ưu nhược điểm giải thuật sau: Tìm kiếm Ưu điểm Nhược điểm Tìm kiếm nhị phân Tìm kiếm nhị phân tìm kiếm - thực loại dãy/mảng - thực tìm kiếm nhanh - thao tác đơn giản, - thao tác đơn giản, dễ thực dễ thực - thực - thực tìm kiếm loại nhanh so với dãy/mảng tìm kiếm mảng có kích thước lớn Khi dãy/mảng có - vận giải thuật phức tạp, kích thước lớn, dụng dãy/mảng khó thực tìm kiếm tỏ có thứ tự tốn thời gian - thuật toán đệ quy tốn nhớ để ghi nhận mã lênh chương trình (mỗi lần gọi đệ quy) chạy chương trình nên làm cho chương trình chạy chậm lại Do vậy, thực tế nên dùng thuật toán không đệ quy Như vậy, so sánh thuật toán ta thấy thuật toán có ưu nhược điểm riêng Do đó, phải lựa chọn thuật toán trên, ta cần phải xác định rõ nhu cầu thực tế để lựa chọn cho phù hợp II Kết luận Bằng kiến thức thầy Lưu Minh Tuấn giảng dạy lớp với kiến thức có giáo trình sưu tầm mạng, chúng em xây dựng thành công 25 phương pháp tìm kiếm môn giải thuật là: tìm kiếm tuần tự, tìm kiếm nhị phân tìm kiếm nhị phân tìm kiếm Chương trình bao gồm ý tưởng phương thức để xây dựng giải thuật tìm kiếm phương pháp Do nhiều thiếu sót chưa mở rộng mặt thực tế Chúng em mong thầy đọc đóng góp ý kiến để chúng em rút kinh nghiệm bổ sung cho chương trình xây dựng tiếp sau Chúng em xin chân thành cảm ơn 26 TÀI LIỆU THAM KHẢO Bài giảng Cấu trúc liệu & GT – Lưu Minh Tuấn – Bộ môn CNTT – ĐHKTQD, 2004 Giáo trình Cấu trúc liệu giải thuật – Hàn Viết Thuận – ĐHKTQD Cấu trúc liệu Giải thuật - Đỗ Xuân Lôi - ĐHBKHN, NXB thống kê, 1999 Giáo trình cấu trúc liệu giải thuật – Hoàng Kiếm – Nhà xuất Giáo dục, 1996 Bài tập cấu trúc liệu thuật toán – Lê Minh Trung – Nhà xuất thống kê, 2004 Lập trình nâng cao Pascal với CTDL –Lê Minh Trung - tập I, II NXB, 1997 Toán rời rạc – Nguyễn Đức Nghĩa, Nguyễn Tô Thành – NXB khoa học kỹ thuật, 2001 27 [...]... 26 TÀI LIỆU THAM KHẢO 1 Bài giảng Cấu trúc dữ liệu & GT – Lưu Minh Tuấn – Bộ môn CNTT – ĐHKTQD, 2 3 4 5 6 7 2004 Giáo trình Cấu trúc dữ liệu và giải thuật – Hàn Viết Thuận – ĐHKTQD Cấu trúc dữ liệu và Giải thuật - Đỗ Xuân Lôi - ĐHBKHN, NXB thống kê, 1999 Giáo trình cấu trúc dữ liệu và giải thuật – Hoàng Kiếm – Nhà xuất bản Giáo dục, 1996 Bài tập cấu trúc dữ liệu và thuật toán – Lê Minh Trung – Nhà xuất... cho đến khi tìm thấy phần tử có giá trị X hoặc dãy khóa xét là rỗng (tức là không tìm thấy) 2 Giải thuật Với ý tưởng của giải thuật như trên, sau đây ta đi cài đặt giải thuật dưới hai dạng: dạng đệ quy và dạng không đệ quy (dạng lặp) a Giải thuật ở dạng đệ quy  Các bước thực hiện giải thuật: 14 B1: Nhập vào một dãy khóa đã được sắp xếp B2: If (l > r) B2.1: Không tìm thấy B2.2: Thực hiện bước kế tiếp... đổi và ta gọi là giải thuật tìm kiếm có bổ sung Giải thuật tìm kiếm có bổ sung trên cây nhị phân tìm kiếm được cài đặt như sau 3 Giải thuật Function CAY_TKNF(T,X); {Giải thuật thực hiện tìm kiếm trên cây nhị phân tìm kiếm (có nút gốc được trỏ bởi T) xem có nút khóa bằng X hay không? Nếu tìm kiếm được thỏa thì đưa ra con trỏ q trỏ tới nút đó, nếu tìm kiếm không thỏa thì bổ sung nút mới có khóa bằng X vào... sung vào cây cho đến khi khóa cuối cùng của dãy khóa được bổ sung vào thì giải thuật kết thúc và ta được cây nhị phân tìm kiếm ứng với dãy khóa đã cho Dạng của cây nhị phân tìm kiếm hoàn toàn phụ thuộc vào thứ tự của phần tử thuộc dãy đã cho Như vậy, với cùng một dãy khóa nếu trình tự các khóa khác nhau sẽ cho ta các cây nhị phân tìm kiếm khác nhau 4 Phân tích và đánh giá độ phức tạp Với giải thuật. .. phân và tìm kiếm trên cây nhị phân tìm kiếm Chương trình bao gồm những ý tưởng và những phương thức cơ bản để xây dựng một giải thuật tìm kiếm bằng 3 phương pháp Do đó còn nhiều thiếu sót và chưa được mở rộng về mặt thực tế Chúng em rất mong thầy đọc và đóng góp ý kiến để chúng em rút kinh nghiệm và bổ sung cho những chương trình được xây dựng tiếp sau này Chúng em xin chân thành cảm ơn 26 TÀI LIỆU... không thỏa và thực hiện bổ sung nút mới có giá trị khóa bằng 75 vào làm nút con trái của nút có giá trị khóa bằng 80 (Xem hình dưới đây) 23 50 90 30 54 19 25 74 80 22 75 Cây nhị phân tìm kiếm sau khi đã bổ sung nút có khóa bằng 75 24 CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN I Đánh giá kết quả nghiên cứu Qua việc tìm hiểu các giải thuật tìm kiếm trên, ta có thể đánh giá được các ưu và nhược... vận giải thuật phức tạp, kích thước quá lớn, dụng khi dãy/mảng khó thực hiện tìm kiếm tuần tự tỏ đã có thứ tự ra rất tốn thời gian - các thuật toán đệ quy tốn kém bộ nhớ để ghi nhận mã lênh chương trình (mỗi lần gọi đệ quy) khi chạy chương trình nên làm cho chương trình chạy chậm lại Do vậy, trong thực tế nên dùng thuật toán không đệ quy Như vậy, so sánh giữa các thuật toán ta thấy mỗi thuật toán đều... nếu tìm thấy, nếu không tìm thấy thì trả ra giá trị 0 Kết thúc} If i < n+1 then return(i); Else return(0); 3 Phân tích và đánh giá độ phức tạp của giải thuật Sau đây ta sẽ phân tích độ phức tạp của hai thuật toán đã nêu ở trên và đánh giá độ phức tạp bằng cách đếm số phép so sánh  Thuật toán ban đầu - Trường hợp tốt nhất khi phần tử đầu tiên của mảng có giá trị bằng X: Số phép gán: Gmin = 1 Số phép... thuật toán đều có ưu và nhược điểm riêng Do đó, khi phải lựa chọn một trong các thuật toán trên, ta cần phải xác định rõ nhu cầu thực tế để lựa chọn sao cho phù hợp II Kết luận Bằng những kiến thức được thầy Lưu Minh Tuấn giảng dạy trên lớp cùng với những kiến thức có trong giáo trình và sưu tầm trên mạng, chúng em đã xây dựng thành công 3 25 phương pháp tìm kiếm trong môn giải thuật là: tìm kiếm tuần... phức tạp của giải thuật, ta dựa vào phép so sánh Từ các bước phân tích thuật toán ở trên, ta có thể dễ dàng xác định được độ phức tạp của thuật toán là: - Trong trường hợp tốt nhất: Tt(n) = O(1) - Trong trường hợp xấu nhất: Tx(n) = O() - Trong trường hợp trung bình: Ttb(n) = O() 4 Ví dụ minh họa Ta sẽ minh họa giải thuật tìm kiếm nhị phân với các khóa tìm kiếm X = 5 và X = 23 đối với dãy khóa gồm 10

Ngày đăng: 05/05/2016, 10:12

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • CHƯƠNG I: GIỚI THIỆU VÀ PHÁT BIỂU ĐỀ TÀI

    • I. Phát biểu đề tài

    • II. Phạm vi, đối tượng nghiên cứu

    • III. Mục đích của bài luận

    • CHƯƠNG II: NỘI DUNG ĐỀ TÀI

      • I. Tìm kiếm tuần tự

        • 1. Ý tưởng giải thuật

        • 2. Giải thuật

        • 3. Phân tích và đánh giá độ phức tạp của giải thuật

        • 4. Ví dụ minh họa

        • II. Tìm kiếm nhị phân

          • 1. Ý tưởng giải thuật

          • 2. Giải thuật

          • 3. Độ phức tạp của giải thuật

          • 4. Ví dụ minh họa

          • III. Tìm kiếm trên cây nhị phân tìm kiếm

            • 1. Khái niệm cây nhị phân tìm kiếm

            • 2. Ý tưởng giải thuật

            • 3. Giải thuật

            • 4. Phân tích và đánh giá độ phức tạp

            • 5. Ví dụ minh họa

            • CHƯƠNG III: ĐÁNH GIÁ KẾT QUẢ NGHIÊN CỨU VÀ KẾT LUẬN

              • I. Đánh giá kết quả nghiên cứu

              • II. Kết luận

              • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

Tài liệu liên quan