Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 184 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
184
Dung lượng
3,61 MB
Nội dung
Cau true du* lieu vä giäi thuat o H H O ■ C ■> NÖI DUNG > H Bài tốn tìm kiếm Input: Cho mảng a có n phần tử X: Giá trị cần tìm Output: Tìm phần tử có giá trị = X có hay khơng mảng > Hai thuật tốn tìm kiếm: ■ ■ ■ Tìm kiếm tuắn tự (áp dụng mảng) ■ Tìm kiếm nhị phân (áp dụng mảng có thứ tự) Thuật tốn tìm kiếm tuyến tính Ý tưởng :Lần lượt so sánh X với phần tử A tìm thấy hay hết phẩn tử mảng Các bước tiến hành Bưác 1: Khởi gán i= l Bước 2: So sánh a[i] với giá trị X cắn tìm, có khả + a[i]=x tìm thấy X Dừng + a[i] # X sang bước Bước 3: M + l //xét tiếp phẩn tử mảng Nếu i >N: Hết mảng Dừng Ngược lại: Lặp lại bước Thuật tốn tìm kiếm tuyến tính ỉnt LinearSearch(int a[],ỉnt n, int x) cấu trúc d liệu v giải thuật ữ { int i=0; while((i Độ phức tạp O(N) Cải tiến thuật tốn tìm tuyến tính cấu trúc d liệu v giải thuật ữ • Nhận xét: Sơ phép so sánh thuật toán trường hợp xâu 2*n • Để giảm thiểu số phép so sánh vịng lặp cho thuật tốn, ta thêm phắn tử “lính canh vào cuối dãy” int LinearSearch(int a[],int n, ỉnt x) { int i=0; a[n]=x; //a[n] phần tử “lính canh” while(a[i]!=x) i++; if(i==n) return 0; //Tìm khơng thấy X else return 1;// tìm tháy } Thuật tốn tìm kiếm nhị phân Ý tưởng: -S o sánh khóa cắn tìm với phân tử dãy hành -N ếu nhỏ tìm bên trái dãy hành -Ngược lại tìm bên phải dãy hành -L ặ p lại động tác Dãy hành dãy ta tang tìm, sơ đâu tiên phần tử dãy left, số phần tử cuối dãy hành right Các bước thuật tốn tìm kiếm nhị phân • B c 1: le ft= l; right=N ¡//tìm kiếm tất phán tử • Bước 2: - m id = ( le ft+ r ig h t) /2 \ỉì số phắ tử đứng dãy hành - So sánh a[mid] với X Có khả có: • a[mid]= x: tìm thấy Dừng • a[mid]>x + R ig h t= m id -1 ¡//Tìm tiếp X dãy a[Left] a[mid-l] • a[mid]