1. Trang chủ
  2. » Thể loại khác

CƠ SỞ LÝ LUẬN CỦA THUẬT TOÁN TÌM KIẾM NHỊ PHÂN

22 5 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 858,44 KB

Nội dung

CHƯƠNG CƠ SỞ LÝ LUẬN CỦA THUẬT TỐN TÌM KIẾM NHỊ PHÂN 1 THUẬT TỐN TÌM KIẾM NHỊ PHÂN 1.1.1 Bài tốn tìm kiếm Cho số ngun dương N (N105) dãy số nguyên A1, A2, , AN đôi khác xếp tăng dần số ngun k Tìm xem k có dãy số hay khơng? Số ngun k gọi khóa tìm kiếm hay gọi tắt khóa * Dữ liệu vào: Vào từ Tệp văn BINSEAR.INP có cấu trúc  Dòng 1: Ghi số N số k  Dòng 2: Ghi N số A1, A2, , AN số cách dấu cách * Dữ liệu ra: Ghi vào Tệp văn BINSEAR.OUT có cấu trúc  Gồm dịng: ghi số k khơng có dãy số cho, ngược lại ghi vị trí số hạng k Ví dụ: BINSEAR.INP 10 BINSEAR.OUT -8 -2 11 15 10 -8 -2 11 15 Xác định toán - Input: Dãy A dãy tăng gồm N số nguyên đôi khác A 1, A2, , AN số nguyên k; - Output: Chỉ số i mà Ai=k số khơng có số hạng dãy k 1.1.2 Thuật tốn tìm kiếm 1.1.2.1 Ý tưởng Tìm kiếm thực cách tự nhiên Lần lượt từ số hạng thứ nhất, ta so sánh giá trị số hạng xét với khóa k gặp số hạng k dãy xét hết khơng có giá trị khóa 1.1.2.2 Thuật tốn tìm kiếm Bước 1: Đọc giá trị vào N, A1, A2, , AN k Bước 2: i1; Bước 3: Nếu Ai=k thơng báo số i, kết thúc; Bước 4: ii+1; Bước 5: Nếu i>N thơng báo số 0, kết thúc; Bước 6: Quay lại bước 3; 1.1.2.3 Cài đặt chương trình const fi='BINSEAR.INP'; fo='BINSEAR.OUT'; maxn=100000; var a:array[1 maxn] of longint; n,k:longint; f:text; Procedure Doc; var i:longint; begin assign(f,fi); reset(f); readln(f,n,k); for i:=1 to n read(f,a[i]); close(f); end; function Tuantu(k:longint):longint; var i:longint; begin for i:=1 to n if a[i]=k then exit(i); exit(0); end; procedure xuly; begin assign(f,fo); rewrite(f); writeln(f,Tuantu(k)); close(f); end; begin doc; xuly; end Trang Để tìm kiếm phần tử dãy, với tìm kiếm tuần tự, ta phải duyệt tất phần tử từ phần tử vị trí đến phần tử vị trí thứ N, tức độ phức tạp O(N) Thực tế, toán kỳ thi học sinh giỏi đa dạng phức tạp, khơng liệu đầu vào lớn mà cịn địi hỏi thời gian tính tốn rút ngắn Với miền giá trị liệu vào khác nhau, ta thay đổi thuật tốn để giải tốn Tuy nhiên với dãy tuyến tính tăng hay giảm theo tiêu chí đó, có thuật tốn tìm kiếm có độ phức tạp O(logN), nhanh nhiều so với O(N) Đó thuật tốn tìm kiếm nhị phân Thuật tốn tìm kiếm nhị phân thuật tốn tìm kiếm dựa vào tính thứ tự tập hợp thay cho cách tìm kiếm thơng thường Thuật tốn dùng dãy xếp đơn điệu theo thứ tự tăng giảm khơng tăng khơng giảm 1.1.3.Thuật tốn tìm kiếm nhị phân 1.1.3.1 Ý tưởng Sử dụng tính chất dãy A dãy tăng, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm sau lần so sánh với số hạng chọn Để làm điều đó, ta chọn số hạng vị trí dãy làm chốt, chia dãy thành phần với kích thước nhỏ Sau so sánh phần tử cần tìm k với chốt, k lớn chốt tìm nửa sau dãy, k nhỏ chốt tìm nửa trước dãy (áp dụng cho dãy tăng) Quá trình tiếp tục tìm k chia dãy khơng cịn phần tử Ví dụ: Với N = 10, k= 9, dãy A = {-8, -2, 0, 1, 3, 5, 7, 9, 11, 15} Gọi phần tử chốt x, ban đầu x = Bước 1: x=3, so sánh x với k, x

Ngày đăng: 05/08/2022, 02:56

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w