Tải bản đầy đủ (.ppt) (41 trang)

SẮP XẾP VÀ TÌM KIẾM TRÊN CTDL MẢNG

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 (1.26 MB, 41 trang )



SẮP XẾP VÀ TÌM KIẾM
TRÊN CTDL MẢNG
Nhóm 2:
Nguyễn Khắc Duy
Nguyễn Thị Lan Ngọc
Võ Hoàng Yến


GIỚI THIỆU
CTDL mảng là một trong số những CTDL thông dụng
nhất.
Mảng là một tập hợp có thứ tự các giá trị có cùng cấu trúc
được lưu trữ liên tiếp nhau trong bộ nhớ.(Mảng là một
danh sách tuyến tính).


CÁC THUẬT TOÁN
TÌM KIẾM VÀ SẮP XẾP


TÌM KIẾM

Trong hầu hết các hệ lưu trữ, quản lí dữ liệu, thao tác
tìm kiếm thường được thực hiện nhất để khai thác thông
tin.

VD: tra cứu từ điển, tìm sách thư viện

Việc xây dựng các giải thuật cho phép tìm kiếm nhanh


sẽ có ý nghĩa rất lớn


HAI GIẢI THUẬT THƯỜNG DÙNG ĐỂ
TÌM KIẾM DỮ LIỆU

Tìm kiếm tuần tự

Tìm kiếm nhị phân


TÌM KIẾM TUẦN TỰ

Một kĩ thuật tìm kiếm đơn giản và cổ điển.

Ý tưởng: So sánh x lần lượt với từng phần tử của mảng
cho đến khi gặp phần tử có khóa cần tìm, hoặc đã tìm
hết mảng mà không thấy x.


12 2 8 5 1
X=8
12 2 8 5 1
X=8
12 2 8 5 1
X=8
i=0
i=1
i=2
Tìm thấy rồi



i=2
Tìm thấy rồi
i=0 i=1
12 2 8 5 1
X=8
Vị trí của x cần tìm là:2


12 2 8 5
X=7
i=0
12 2 8 5
X=7
i=1
12 2 8 5
X=7
i=2
12 2 8 5
X=7
i=3
KHÔNG TÌM
THẤY !


i=2
KHÔNG
TÌM
THẤY !!!!!

X=7
i=0 i=1
12 2 8 5 1
i=3
i=4


NHẬN XÉT

Giải thuật tìm kiếm tuần tự không phụ thuộc thứ tự
các phần tử mảng  là cách tổng quát nhất để tìm
kiếm trên một dãy số bất kỳ.

Độ phức tạp: T(n)=O(n)


TÌM KIẾM NHỊ PHÂN

Tìm kiếm trong dãy số đã có thứ tự.

Ý tưởng: Tại mỗi bước tiến hành so sánh x với phần tử
giữa của mảng  giới hạn mảng tìm kiếm ở nửa trước
hay nửa sau mảng  thu hẹp vùng tìm kiếm (nhị phân).


X=8
1 2 4 5 6 8 12 15
L=0 R=7M=3
L=4 M=5
TÌM THẤY

RỒI !
Phần tử cần tìm là 8:
Quá trình tìm:
L=0,R=7M=3
L=4,R=7M=5


NHẬN XÉT

Giải thuật tìm kiếm nhị phân chỉ áp dụng cho những mảng
đã được sắp xếp.

Tiết kiệm thời gian rất nhiều so với tìm kiếm tuần tự.

Độ phức tạp: T(n)=O(log
2
n).


SẮP XẾP

Sắp xếp là quá trình xử lí một danh sách để chúng theo
một thứ tự thỏa mãn một tiêu chuẩn nào đó.

Sắp xếp dữ liệu là một nhu cầu thường thấy và cần
thiết. Chẳng hạn, trước khi tìm kiếm nhị phân, mảng
cần được sắp xếp.


CÁC GIẢI THUẬT SẮP XẾP

THƯỜNG THẤY

ExchangeSort (Chọn trực tiếp).

InsertSort (Chèn trực tiếp).

BubbleSort (Nổi bọt).

HeapSort

ShellSort

QuickSort


EXCHANGESORT
(Chọn trực tiếp)

Mô phỏng cách sắp xếp tự nhiên nhất trong thực tế.

Ý tưởng: thực hiện n-1 lần việc đưa phần tử nhỏ nhất về vị
trí đúng ở đầu mảng.


i=0
12 2 8 5 1
i=1 i=2 i=3
XONG RỒI !
i=4



Nhận xét

Độ phức tạp : T(n)=O(n
2
).

Số phép so sánh không phụ thuộc tình trạng
mảng ban đầu.

Số lần hoán vị phụ thuộc tình trạng mảng ban
đầu.
Trường hợp Số lần so
sánh
Số phép gán
Tốt nhất n(n-1)/2 0
Xấu nhất n(n-1)/2 3n(n-1)/2


INSERTSORT
(Chèn trực tiếp)

Ý tưởng: lần lượt chèn phần tử a[i] vào vị trí thích hợp
của đọan đã được sắp để được dãy mới a[1],a[2],…,a[i]
có thứ tự.


12 2 8 5 1
i=1 i=2 i=3 i=4
HOÀN TẤT !



Nhận xét

Độ phức tạp: T(n)=O(n
2
).

Số phép so sánh và dời chỗ phụ thuộc vào tình
trạng ban đầu của mảng.
Trường hợp Số phép so
sánh
Số phép
gán
Tốt nhất n-1 2(n-1)
Xấu nhất n(n-1)/2 n(n+1)/2-1


BUBBLESORT
(Nổi bọt)

Ý tưởng: xuất phát từ cuối mảng đổi chỗ các cặp phần tử
kế cận để đưa phần tử nhỏ hơn về vị trí đúng đầu mảng
hiện hành. Sau đó không xét đến nó nữa.


12 2 8 5 1
i=0 j=4j-1i=1 i=3
i=2
XONG RỒI !



Nhận xét

Độ phức tạp: T(n)=O(n
2
)

BubbleSort có khuyết điểm: không nhận diện
được dãy đã có thứ tự hoặc thứ tự từng phần;
các phần tử lớn được đưa về vị trí rất chậm.
Trường hợp Số phép so sánh Số phép gán
Tốt nhất n(n-1)/2 0
Xấu nhất n(n-1)/2 n(n-1)/2

×