Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch

24 0 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch

Đ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

Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGÔ QUANG THẠCH Email: thachnq@gmail.com ĐT: 01273984123 Chương 5: Tìm kiếm Giới thiệu Tìm kiếm tuyến tính Tìm kiếm nhị phân Giới thiệu Trong sống hàng ngày  Các hệ lưu trữ, hệ thống nội bộ, hệ thống bên ngoài…  Quản lý liệu, quản lý thơng tin,… … =>Tìm kiếm thường thực nhiều để khai thác thông tin Các thuật tốn tìm kiếm sử dụng coi kỹ thuật sở cho lập trình máy tính Giới thiệu Tìm kiếm phần tử tập đối tượng theo tiêu chí đề toán phổ biến tin học  Tìm kiếm hồ sơ, lý lịch, tập tin,…  Tìm kiếm thơng tin, cơng văn, văn bản, …  Giới thiệu Mơ tả tốn tìm kiếm: “cho vec tơ A bao gồm n phần tử, có giá trị số khác : A[1], A[2], A[3],…, A[n]” “cho số X, tìm xem có phần tử A mà giá trị X khơng” => Tìm kiếm “được thỏa” có, “khơng thỏa” khơng có phần tử có giá trị X Các loại tìm kiếm 1 Tìm kiếm tuyến tính 2 Tìm kiếm nhị phân Tìm kiếm tuyến tính Giới thiệu phương pháp Tìm tuyến tính kỹ thuật tìm kiếm đơn giản cổ điển Thuật toán tiến hành so sánh x với phần tử thứ nhất, thứ hai, dãy khó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 Tìm kiếm tuyến tính Các bước thực ý tưởng giải thuật: Bước : i = 1; // phần tử dãy Bước 2: So sánh a[i] với x, có khả : + a[i] = x : Tìm thấy Dừng + a[i] != x : Sang Bước Bước : i = i+1; // xét tiếp phần tử kế 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 Tìm kiếm tuyến tính Cài đặt thuật toán: int TimTuyenTinh(int a[],int n,int x) { int i=0 ; a[n]=x ; while(a[i] !=x) i++ ; if(i==n) return -1 ; else return i ; } Tìm kiếm tuyến tính Ví dụ minh họa Cho dãy số a: a = 12 Tìm x=6 15 Tìm kiếm tuyến tính X=6 12 15 15 15 15 Với i=0, a[0]=12 12 Với i=1, a[1]=2 12 Với i=2, a[2]=8 12 Tìm kiếm tuyến tính Với i=3, a[3]=5 12 15 15 15 Với i=4, a[4]=1 12 Với i=5, a[5]=6 12 Dừng vịng lặp tìm kiếm vị trí i=5 Tìm kiếm tuyến tính Nhận xét: Dị phần tử từ đầu đến cuối Thời gian tìm kiếm tốn nhiều thời gian phần tử nằm cuối danh sách Tìm kiếm nhị phân Giới thiệu phương pháp Nếu phần tử A xếp, tìm kiếm nhị phân phương pháp tìm kiếm thơng dụng (tương tự cách thức ta hay làm tra từ từ điển) Đối với phép tìm kiếm nhị phân ta ln chọn khố giữa, giả sử dẫy xét A1, …,A2 khố dãy Ai với i= (l+r)/2  Nếu X x: //tìm tiếp x dãy a[left] a[mid -1] : right =mid - 1; + a[mid] < x: //tìm tiếp x dãy a[mid +1] a[right] : left = mid + 1; Bước 3: Nếu left ≤ right //còn phần tử chưa xét -> tìm tiếp Lặp lại Bước Ngược lại: Dừng; //Ðã xét hết tất phần tử Tìm kiếm nhị phân Cài đặt int Tim_nhi_phan (int a[] , int n , int x) { int left = , right = n - , mid; while (lTiếp tục tìm dãy (a[4] a[7]) 12 15 Tìm kiếm nhị phân Tìm x=6 dãy a[4] a[7] left=4 right=7 mid=(4+7)/2=5 a[5]=8>6 =>Tìm x=6 dãy a[4] a[4] 12 15 Tìm kiếm nhị phân Tìm x=6 dãy a[4] a[4] left=4 right=4 mid=(4+4)/2=4 a[4]=6 =>Tìm x=6 dãy a[4] a[4] 12 15 Tìm kiếm tuyến tính X=11 12 15 left=0, right=7, mid=(0+7)/2=3, a[3]=5 =>Tiếp tục tìm dãy (a[4] a[7]) 12 15 Tìm kiếm nhị phân Tìm x=11 dãy a[4] a[7] 12 left=4 right=7 mid=(4+7)/2=5 a[5]=8Tiếp tục tìm x=11 dãy a[6] a[7] 15 Tìm kiếm nhị phân Tìm x=11 dãy a[6] a[7] 12 15 left=6 right=7 mid=(6+7)/2=6 a[6]=12>11 =>Kết thúc Khơng tìm x=11 dãy a[6] a[7]

Ngày đăng: 02/07/2023, 03:26

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

  • Đang cập nhật ...

Tài liệu liên quan