Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 6 - Trịnh Anh Phúc

90 87 0
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 6 - Trịnh Anh Phúc

Đ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

Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 6: Tìm kiếm cung cấp cho người đọc các kiến thức: Tìm kiếm tuần tự và tìm kiếm nhị phân, cây nhị phân tìm kiếm, tìm kiếm xâu mẫu, bẳng băm,... Mời các bạn cùng tham khảo nội dung chi tiết.

Chương : Tìm kiếm Trịnh Anh Phúc Bộ mơn Khoa Học Máy Tính, Viện CNTT & TT, Trường Đại Học Bách Khoa Hà Nội Ngày 28 tháng năm 2014 CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà28Nội tháng ) năm 2014 / 82 Giới thiệu Tìm kiếm tìm kiếm nhị phân Tìm kiếm Tìm kiếm nhị phân Cây nhị phân tìm kiếm Định nghĩa Biểu diễn nhị phân tìm kiếm Sắp xếp nhờ sử dụng BST Cây nhị phân tìm kiếm cân Tìm kiếm xâu mẫu Thuật toán trực tiếp Thuận toán Boyer-Moore Thuận toán Rabin-Karp Thuận toán Knuth-Morris-Pratt Bảng băm (Mappping and Hashing) Đặt vấn đề CuuDuongThanCong.com Địa trực tiếp Hàm băm Tổng kết Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà28Nội tháng ) năm 2014 / 82 Tìm kiếm tìm kiếm nhị phân Định nghĩa tốn tìm kiếm Bài tốn đặt Cho danh sách list[0 n-1] phần tử target, ta cần tìm vị trí i cho list[i] = target trả lại giá trị -1 phần tử danh sách CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà28Nội tháng ) năm 2014 / 82 Tìm kiếm tìm kiếm nhị phân Tìm kiếm (linear search or sequential search) Thuật tốn tìm kiếm thực theo ý tưởng sau : Bắt đầu từ phần tử đầu tiên, duyệt qua phần tử tìm phần tử đích kết luận khơng tìm -7 -5 -4 Độ phức tạp : O(n) int linearSearch(dataArray list, int size, dataElem target){ int i; for(i = 0;i phải hoán vị < h(k, 0), h(k, 1), · · · , h(k, m − 1) > vị trí bảng xét để chứa khóa ta tiến hành bổ sung vào bảng CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 74 / 82 Bảng băm Địa mở (tiếp) Việc bổ sung khóa k mơ tả đoạn mã giả sau HASH-INSERT(T,k) i←0 repeat j ← h(k,i) if (T[j] = NULL) then T[j] ← k return j else i ← i+1 endif until (i=m) error "lỗi tràn bảng băm" End CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 75 / 82 Bảng băm Địa mở (tiếp) Việc tìm kiếm khóa k mơ tả đoạn mã giả sau HASH-SEARCH(T,k) i←0 repeat j ← h(k,i) if (T[j]=j) then return j endif i ← i+1 until ((T[j]=NULL) or (i=m)) return NULL End CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 76 / 82 2014-04-28 Bảng băm Cấu trúc liệu giải thuật Bảng băm (Mappping and Hashing) Hàm băm Bảng băm Địa mở (tiếp) Việc tìm kiếm khóa k mơ tả đoạn mã giả sau HASH-SEARCH(T,k) i←0 repeat j ← h(k,i) if (T[j]=j) then return j endif i ← i+1 until ((T[j]=NULL) or (i=m)) return NULL End Việc loại bỏ gặp khó khăn Thông thường ta đánh dấu loại bỏ không bỏ thực CuuDuongThanCong.com Bảng băm Địa mở (tiếp) Việc dò thường dùng kỹ thuật sau Dò tuyến tính (linear probing) h(k, i) = (h (k) + i) mod m Dò tồn phương (quadratic probing) h(k, i) = (h (k) + c1 i + c2 i ) mod m Băm kép (double hashing) h(k, i) = (h1 (k) + ih2 (k)) mod m h1 (k) h2 (k) hàm băm bổ trợ CuuDuongThanCong.com Với i=0,1,· · · m-1, h’(k) hàm băm ban đầu c1 c2 = số cho trước Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 77 / 82 Bảng băm Tạo chuỗi (chaining) Theo phương pháp này, ta tạo danh sách móc nối để chứa phần tử gắn vào vị trí k1 k1 k8 k2 NULL k3 NULL k4 k3 k5 k2 k5 NULL k8 k6 k4 k6 NULL CuuDuongThanCong.com m-1 Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 78 / 82 Bảng băm Tạo chuỗi (tiếp) Vấn đề thực việc tạo chuỗi Ta nên thực bổ sung phần tử ? Trả lời : bổ sung danh sách móc nối với hình minh họa Ta cần loại bỏ phần tử ? Trả lời : Nên dùng danh sách móc nối đơn cho việc loại bỏ liệu dễ dàng Thực tìm kiếm phần tử khóa cho trước ? Trả lời : Chúng ta dùng hàm băm xác định ô T, sau duyệt theo danh sách móc nối để xác định vị trí phần tử CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 79 / 82 Bảng băm Tạo chuỗi (tiếp) Chọn hàm băm - choising hash funtion : Thời gian tính hàm băm ? Thời gian tìm kiếm phân tử ? Do sinh hai yêu cầu Phải phân bố khóa vào ô Không phụ thuộc vào khuôn mẫu liệu CuuDuongThanCong.com Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 28 Nội tháng) năm 2014 80 / 82 Bảng băm Tạo chuỗi (tiếp) Hàm băm xác định phương pháp chia (the division method) Ta xác định hàm băm theo công thức h(k) = k mod m phương pháp nhân (the multiplication method) Ta nhân k với số A, 0

Ngày đăng: 11/01/2020, 17:09

Từ khóa liên quan

Mục lục

  • Tìm kim tun t và tìm kim nhi phân

    • Tìm kim tun t

    • Tìm kim nhi phân

    • Cây nhi phân tìm kim

      • Ðinh nghıa

      • Biu din cây nhi phân tìm kim

      • Sp xp nh s dung BST

      • Cây nhi phân tìm kim cân bng

      • Tìm kim xâu mu

        • Thut toán trc tip

        • Thun toán Boyer-Moore

        • Thun toán Rabin-Karp

        • Thun toán Knuth-Morris-Pratt

        • Bang bam (Mappping and Hashing)

          • Ðt vn

          • Ðia chi trc tip

          • Hàm bam

          • Tng kt

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

Tài liệu liên quan