Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.13 MB, 117 trang )
3. Tìm kiếm nhị phân
Ý tưởng: Sử dụng dãy đã sắp xếp ta tìm cách thu hẹp phạm
vi tìm kiếm sau mỗi lần so sánh khóa với số hạng được chọn.
aGiua
Giua=[ (N+1)/2].
3. Tìm kiếm nhị phân
Nếu kGiua = x thì Giua là chỉ số cần tìm.
Nếu kGiua > k thì việc tìm kiếm tiếp theo chỉ xét trên dãy
k1, ka2,..., kGiua–1
Nếu aGiua < k thì thực hiện tìm kiếm trên dãy kGiua+1,
kGiua+2,..., kN.
Quá trình trên sẽ được lặp lại
3. Tìm kiếm nhị phân
Thuật toán
Bước 1. Nhập N, k1 k2,..., kn và giá trị khóa x.
Bước 2. Dau ⇐ 1, Cuoi ⇐ N Giua ⇐ .
Bước 4. Nếu kGiua = x thì thông báo chỉ số Giua, rồi kết thúc
Bước 5. Nếu kGiua > x thì đặt Cuoi = Giua – 1 rồi chuyển đến bước 7.
Bước 6. Dau ⇐ Giua + 1
Bước 7. Nếu Dau > Cuoi thì thông báo dãy không có số hạng có giá trị trùng với
x, rồi kết thúc.
Bước 8. Quay lại bước 3.
k = 21, N =10
k = 25, N =10
i
1
2
3 4
5
6
7
8
9
10
i
1
2
3
4
5 6
7
8
9
10
A
2
4
5 6
9
21
22
30
31
33
A
2
4
5
6
9 21
22
30
31
33
Dau
1
6
6
Dau
1
6
6
7
8
Cuoi
10
10 7
Cuoi
10
10
7
7
7
Giua
5
8
Giua
5
8
6
7
aGiua
9
30 21
aGiua
9
30
21
22
Lượt
0
1
Lượt
0
1
2
3
6
2
Sau hai lượt thì aGiua = k. Vậy chỉ số cần tìm là i = Giua = 6.
4
Tại lượt thứ tư Dau > Cuoi nên kết luận trong dãy A không có
toán hạng nào có giá trị là 25 cả.
3. Tìm kiếm nhị phân
Nhận xét và đánh giá
Trường hợp tốt nhất, đôệ phức tạp tính toán là O(1), trong
trường hợp xấu và trung bình là O(lgN) ,
Tuy nhiên với dãy chưa được sắp xếp thì cần có chi phí cho
viêệc sắp xếp.
CHƯƠNG IV: DANH SÁCH (LIST)
Khái niệm danh sách
Biểu diễn danh sách trong máy tính.
Một số nhận xét.
Kiểu dữ liệu con trỏ (pointer) và việc cấp phát/thu hồi bộ nhớ
động.
. Khái niệm danh sách
a) Định nghĩa
Danh sách là một tập sắp thứ tự các phần tử cùng kiểu.
Các phần tử được sắp theo thứ tự “trước- sau”
Danh sách con gồm các phần tử liên tiếp từ ai đến aj của danh
sách.
Nếu i=1 gọi là phần đầu (prefix)
Nếu j=n gọi là phần cuối (postfix).
1. Khái niệm danh sách
Dãy con là một DS tạo thành bằng cách loại từ DS một số
phần tử. Ví dụ, DS = (a,b,c,d,e,f). Khi đó:
(c,d,e) là một danh sách con của DS
(a, b) là một phần đầu của DS
(c,d,e,f) là một phần cuối của DS
(a,c,f) là một dãy con của DS