Chương 3 Tìm kiếm và sắp xếp - Cấu trúc dữ liệu và giải thuật | Đại học Kinh tế Kỹ thuật Công nghiệp

Mỗi thuật toán tìm kiếm và sắp xếp có độ phức tạp thời gian và không gian khác nhau. Việc hiểu rõ độ phức tạp giúp lập trình viên lựa chọn thuật toán phù hợp tùy theo đặc điểm bài toán, chẳng hạn như kích thước của dữ liệu hay yêu cầu về tốc độ. Tìm kiếm tuyến tính: Đơn giản nhưng chậm. Tìm kiếm nhị phân: Nhanh nhưng yêu cầu mảng phải được sắp xếp.

B3 Tìm kiếm - sdf
Chương 3
Tìm kiếm sắp xếp
Cấu trúc dữ liệu
- Khoa CNTT
2
Nội dung trình bày
Tìm kiếm
Sắp xếp
Cấu trúc dữ liệu
- Khoa CNTT
3
3.1 Tìm kiếm
Tìm kiếm thao tác quan trọng & thường xuyên
trong tin .học
- Tìm kiếm một nhân viên trong danh sách nhân viên.
- Tìm một sinh viên trong danh sách sinh viên của mộ
lớp…
- Tìm kiếm một tên sách trong thư viện.
Cấu trúc dữ liệu
- Khoa CNTT
4
3.1 Tìm kiếm
Tìm kiếm quá trình xác định một đối tượng nào đó
trong một tập c đối tượng. Kết quả trả về đối
tượng tìm được (nếu có) hoặc một chỉ số (nếu có)
xác định vị trí của đối tượng trong .tập đó
Việc tìm kiếm dựa theo một trường nào đó của đối
tượng
VD: đối tượng sinh viên các dữ liệu {MaSV,
HoTen, DiaChi,}. Khi đó thể tìm kiếm trên danh
sách sinh viên theo .trường MaSV hoặc HoTen
Cấu trúc dữ liệu
- Khoa CNTT
5
3.1 Tìm kiếm
Bài toán :được tả như sau
- Tập dữ liệu được lưu trữ dãy a
1
, a
2
,..,a
n
. Giả sử
chọn cấu trúc dữ liệu mảng để lưu trữ dãy số này
trong bộ nhớ chính, khai ;báo: int a[n]
- Gia trị cần tìm x, kiểu nguyên: ;int x
Tìm kiếm
Tìm kiếm tuyến tính Tìm kiếm nhị phân
Tập dữ liệu đã
được sắp xếp
Tập dữ liệu
bất kỳ
Cấu trúc dữ liệu
- Khoa CNTT
6
3.1.1 Tìm kiếm tuyến tính
Ý tưởng chính: tiên,duyệt tuần tự từ phần t đầu
lần lượt so sánh khóa tìm kiếm với các phần tử
trong danh sách. Cho đến khi tìmgặp phần tử cần
hoặc đến khi duyệt hết danh ch.
Cấu trúc dữ liệu
- Khoa CNTT
7
Các bước tiến hành:
- Bước 1: duyệt tuần tự từ phần tử đầu tiên;
- Bước 2: so sánh các phần tử trong danh sách với khóa
tìm kiếm hai khả năng
Nếu bằng nhau Tìm thấy Dừng
Nếu khác nhau chuyển Sang bước 3
- Bước 3: xét phần tử kế tiếp trong mảng
Nếu hết mảng, không tìm thấy Dừng.
Nếu chưa hết mảng quay lại bước 2
3.1.1 Tìm kiếm tuyến tính
Cấu trúc dữ liệu
- Khoa CNTT
8
3.1.1 Tìm kiếm tuyến tính
Các :bước tiến hành
- Bước 1: i = 0;
- Bước 2: So sánh a[i] với x, hai khả năng
a[i] = x: Tìm thấy Trả về i Dừng
a[i] x: Sang 3bước
- Bước 3: i ++ // xét phần tử kế tiếp trong
mảng
Nếu i > N: Hết mảng, Trả vềkhông tìm thấy -1
Dừng
Nếu i N: Quay lại bước 2
Cấu trúc dữ liệu
- Khoa CNTT
9
3.1.1 Tìm kiếm tuyến tính
a,dụ: Cho dãy số giá trị tìm x = 8
12 2 5 8 1 6 4
12 2 5 8 1 6 4
X = 8
Tìm thấy
Minh họa tìm kiếm tuyến tính
Cấu trúc dữ liệu
- Khoa CNTT
10
3.1.1 Tìm kiếm tuyến tính
dụ: Cho dãy số a, giá trị tìm x = 9
12 2 5 8 1 6 4
12 2 5 8 1 6 4
X = 9
Không
tìm thấy
Minh họa tìm kiếm tuyến tính
| 1/56

Preview text:

B3 Tìm kiếm - sdf Chương 3
Tìm kiếm và sắp xếp Nội dung trình bày  Tìm kiếm  Sắp xếp
Cấu trúc dữ liệu - Khoa CNTT 2 ệ 3.1 Tìm kiếm
 Tìm kiếm là thao tác quan trọng & thường xuyên trong tin học.
- Tìm kiếm một nhân viên trong danh sách nhân viên.
- Tìm một sinh viên trong danh sách sinh viên của mộ lớp…
- Tìm kiếm một tên sách trong thư viện.
Cấu trúc dữ liệu - Khoa CNTT 3 ệ 3.1 Tìm kiếm
 Tìm kiếm là quá trình xác định một đối tượng nào đó
trong một tập các đối tượng. Kết quả trả về là đối
tượng tìm được (nếu có) hoặc một chỉ số (nếu có)
xác định vị trí của đối tượng trong tập đó.
 Việc tìm kiếm dựa theo một trường nào đó của đối tượng
 VD: đối tượng sinh viên có các dữ liệu {MaSV,
HoTen, DiaChi,…}. Khi đó có thể tìm kiếm trên danh
sách sinh viên theo trường MaSV hoặc HoTen.
Cấu trúc dữ liệu - Khoa CNTT 4 ệ 3.1 Tìm kiếm
 Bài toán được mô tả như sau:
- Tập dữ liệu được lưu trữ là dãy a1, a2,..,an. Giả sử
chọn cấu trúc dữ liệu mảng để lưu trữ dãy số này
trong bộ nhớ chính, có khai báo: int a[n];
- Gia trị cần tìm là x, có kiểu nguyên: int x; Tìm kiếm Tìm kiếm tuyến tính Tìm kiếm nhị phân Tập dữ liệu Tập dữ liệu đã bất kỳ được sắp xếp
Cấu trúc dữ liệu - Khoa CNTT 5 ệ
3.1.1 Tìm kiếm tuyến tính
 Ý tưởng chính: duyệt tuần tự từ phần tử đầu tiên,
lần lượt so sánh khóa tìm kiếm với các phần tử
trong danh sách. Cho đến khi gặp phần tử cần tìm
hoặc đến khi duyệt hết danh sách.
Cấu trúc dữ liệu - Khoa CNTT 6 ệ
3.1.1 Tìm kiếm tuyến tính  Các bước tiến hành:
- Bước 1: duyệt tuần tự từ phần tử đầu tiên;
- Bước 2: so sánh các phần tử trong danh sách với khóa
tìm kiếm có hai khả năng 
Nếu bằng nhau  Tìm thấy  Dừng 
Nếu khác nhau chuyển Sang bước 3
- Bước 3: xét phần tử kế tiếp trong mảng 
Nếu hết mảng, không tìm thấy.  Dừng 
Nếu chưa hết mảng quay lại bước 2
Cấu trúc dữ liệu - Khoa CNTT 7 ệ
3.1.1 Tìm kiếm tuyến tính  Các bước tiến hàn : h - Bước 1: i = 0;
- Bước 2: So sánh a[i] với x, có hai khả năng
 a[i] = x: Tìm thấy  Trả về i  Dừng  a[i]  x: Sang bước 3 - Bước 3: i ++
// xét phần tử kế tiếp trong mảng
 Nếu i > N: Hết mảng, không tìm thấy  Trả về -1  Dừng
 Nếu i  N: Quay lại bước 2
Cấu trúc dữ liệu - Khoa CNTT 8 ệ
3.1.1 Tìm kiếm tuyến tính
 Ví dụ: Cho dãy số a, giá trị tìm x = 8 12 2 5 8 1 6 4
Minh họa tìm kiếm tuyến tính Tìm thấy X = 8 12 2 5 8 1 6 4
Cấu trúc dữ liệu - Khoa CNTT 9 ệ
3.1.1 Tìm kiếm tuyến tính
 Ví dụ: Cho dãy số a, giá trị tìm x = 9 12 2 5 8 1 6 4
Minh họa tìm kiếm tuyến tính Không tìm thấy X = 9 12 2 5 8 1 6 4
Cấu trúc dữ liệu - Khoa CNTT 10 ệ