1 .GIỚI THIỆU
2. MỘT SỐ GIẢI THUẬT TÌM KIẾM
2.2 TÌM KIẾM TUẦN TỰ
Giải thuật tìm kiếm tuần tự có thể sử dụng cho dãy phần tử có trật tự bất kỳ. Trong trường hợp dãy chưa được sắp xếp thì chúng ta phải duyệt tồn bộ dãy để kiểm tra xem khóa cần tìm có trong dãy hay khơng.
Mơ phỏng tìm kiếm trên dãy số ngun:
- Trường hợp tìm thấy khóa key = 8
2 3 6 8 5 4 9 0
- Trường hợp khơng tìm thấy khóa key = 8
2 3 6 7 5 4 9 0
i = 3 =
22
Một ví dụ khác là tìm kiếm họ tên sinh viên trong danh sách n sinh viên, khi đó mã nguồn được viết như sau:
Độ phức tạp thời gian: O(n) trong trường hợp xấu nhất chúng ta cần duyệt tồn bộ dãy mới tìm thấy phần tử.
Nếu các phần tử của mảng đã được sắp xếp thì nhiều trường hợp chúng ta khơng phải quét toàn bộ dãy để tìm phần tử. Trong thuật giải ở dưới, khi khóa cần tìm nhỏ hơn arrInt[i] thì chúng ta khơng cần tìm dãy cịn lại với giả sử dãy được sắp xếp tăng dần.
23
Độ phức tạp: Trong trường hợp xấu nhất vẫn là O(n) vì chúng ta có thể phải duyệt tồn bộ dãy trong trường hợp khóa nằm ở cuối dãy hoặc khóa khơng có trong dãy. Nhưng trường hợp trung bình thì vẫn giảm độ phức tạp hơn so với cách trên.
Nhận xét: Khi danh sách đã được sắp xếp theo khóa (tăng dần hoặc giảm dần) thì việc tìm kiếm phần tử dựa trên thuật tốn tìm kiếm tuần tự có thể bỏ chi phí nhiều khi khóa cần tìm ở cuối danh sách và khi số phần tử danh sách rất lớn. Vì vậy để giảm chi phí tìm kiếm trong trường hợp này, chúng ta sẽ sử dụng giải thuật tìm kiếm nhị phân được trình bày ở mục 2.3.