1. Trang chủ
  2. » Luận Văn - Báo Cáo

Sắp xếp Data structures and Algorithms

45 146 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 45
Dung lượng 471,05 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

So sánh từng cặp liền nhau theo thứ tự tăng dần tính từ đầu dãy, nếu không đúng thứ tự sắp xếp thì đổi chỗ.. Nếu trong lần duyệt thứ n qua dãy, có một lần đổi chỗ đã thực hiện thì lặp lạ

Trang 1

These slides are adapted from slides provided with Data Structures and Algorithms in C++

Goodrich, Tamassia and Mount (Wiley, 2004)

Trang 2

Một số giải thuật sắp xếp

Sắp xếp nổi bọt (Bubble Sort)

Sắp xếp xen vào (Insertion Sort)

Sắp xếp hòa nhập (Merge Sort)

Sắp xếp nhanh (Quick Sort)

Trang 3

Sorting 3

Sắp xếp nổi bọt

Thuật toán

1 So sánh từng cặp liền nhau theo thứ tự tăng

dần tính từ đầu dãy, nếu không đúng thứ tự sắp xếp thì đổi chỗ.

2 Nếu trong lần duyệt thứ n qua dãy, có một

lần đổi chỗ đã thực hiện thì lặp lại bước 1.

Reference: http://www.algolist.net/Algorithms/Sorting/Bubble_sort

Trang 5

Sorting 5

Giả mã

Input dãy S có n ph ần tử, toán tử so sánh C

do

swapped false

for each i in 1 to length(S) – 1 inclusive do:

if S[i - 1] > S[i] according to C then

swap(S[i - 1], S[i]) swappedtrue

Trang 7

Sorting 7

Tính hiệu quả, thời gian thực thi

Trường hợp xấu nhất và trung bình: O(n 2 )

Trường hợp tốt nhất: (dãy đầu vào đã sắp

xếp) :O(n)

Trang 8

Sắp xếp xen vào

Trang 10

Giả mã

Input dãy S có n ph ần tử, toán tử so sánh C

for i from 1 to length(S) do

j i

while j > 0 && S[j - 1] > S[j] then

swap(S[j - 1], S[j]) j

Trang 11

Sorting 11

Tính hiệu quả, thời gian thực thi

Trường hợp xấu nhất và Trung bình: O(n2)

Trường hợp tốt nhất: (dãy đã sắp xếp sẵn) :O(n)

Tính phụ thuộc (hiệu năng tùy thuộc thứ tự ban đầu của dãy);

Tính ổn định (giữ lại vị trí tương đối của các phần tử giống nhau);

Tính tại chỗ (không gian cần cho thuật toán là không đổi);

Trực tuyến (có thể thêm phần tử vào dãy trong khi

đang sắp xếp).

Trang 12

Chia - đ ể - Trị

Chia đ ể trị (Divide-and conquer) là m ột mô hình tổng quát đ ể thiết kế thuật toán :

 Chia(Divide) : chia d ữ liệu vào S thành

2 hay nhi ều tập con rời nhau S1, S2, …

 Recur : gi ải các trường hợp

nh ỏ hơn bằng đệ quy

 Tr ị(Conquer) : k ết hợp các đáp án của S1, S2, …, thành m ột đáp án thống nhất của S

Trư ờng hợp cơ sở của các thủ tục đệ quy là tập con

c ủa S mà có kích thước hằng

Vi ệc phân tích có thể thực hiện bằng recurrence equations

Trang 13

S ắp xếp hòa nhập

7 2  9 4 → 2 4 7 9

7  2 → 2 7 9  4 → 4 9

7 → 7 2 → 2 9 → 9 4 → 4

Trang 14

S ắp xếp hòa nhập(Merge-Sort)

Thu ật toán Sắp xếp hòa nhập

(Merge-sort) v ới 1 dãy S có n

ph ần tử bao gồm 3 bước :

thành hai dãy con S1 , S2 v ới

Trang 15

c ủa hai dãy con

Ghép hai dãy con đã

s ắp xếp, mỗi dãy có n/2

ph ần tử và được biểu

di ễn trong một danh

sách liên k ết đôi, thời

gian th ực thi là O(n)

Trang 16

Sơ đ ồ thuật toán

Quá trình thu ật toán sắp xếp hòa nhập(Merge-Sort) có thể biểu

di ễn bằng cây nhị phân

 Các đ ỉnh biểu diễn việc tiến hành thủ tục đệ quy khi sắp xếp

và là nơi lưu gi ữ

 Một dãy khi chưa sắp xếp và các dãy con của nó

 Dãy đã sắp xếp sau khi thực thi thuật toán

 G ốc là dãy ban đâu, mang lời gọi đệ quy đầu tiên

 Các lá là dãy con có đ ộ dài là 0 hoặc 1

7 2  9 4 → 2 4 7 9

7  2 → 2 7 9  4 → 4 9

Trang 27

Sorting 27

Độ cao h của cây nhị phân biểu diễn quá trình sắp xếp là O(log n)

 Mỗi lần tiến hành thủ tục đệ quy ta lại chia đôi dãy

Khối lượng công việc cần thực hiện tại đỉnh mức i là O(n)

 Phân chia và ghép lại 2i dãy con có độ dài n////2 i

 Tiến hành thủ tục đệ quy 2i+1 lần

Do đó thời gian cần thiết để thực thi thuật toán làO(n log n)

depth #seqs size

1 2 n////2

i 2i n////2 i

… …

Trang 28

Phân tích Merge-Sort s ử dụng

• Merge(S1,S2) c ần thời gian

th ực hiện O(n), với n là độ

Trang 30

S ắp xếp nhanh(Quick-Sort)

x ếp ngẫu nhiên sử dụng mô

Trang 31

Sorting 31

Phân chia

Chia dãy đã cho thành 2 dãy

con theo cách sau:

Mỗi hành động xóa hoặc chèn

thêm phân tử vào dãy thực

hiện ở đầu hoặc cuối dãy, cần

thời gian O(1)

Do đó, việc phân chia dãy cần

thời gian O(n)

else if y = x E.insertLast(y)

else { y > x }

G.insertLast(y)

Trang 32

Sơ đ ồ thuật toán

Ho ạt động của thuật toán Sắp xếp nhanh(Quick-Sort) có thể mô

t ả bằng cây nhị phân

 M ỗi đỉnh biểu diễn một hành động đệ quy gọi thủ tục Sắp

x ếp nhanh(Quick-Sort) và lưu giữ

 Dãy chưa sắp xếp và phần tử chốt của nó

 Dãy đã sắp xếp sau khi thủ tục tiến hành xong

 G ốc là nơi mang lời gọi thủ tục đệ quy đầu tiên

 Các lá là nơi có dãy đ ộ dài 0 hoặc 1

7 4 9 6 2 → 2 4 6 7 9

4 2 → 2 4 7 9 → → 7 9

Trang 40

Th ời gian thực thi trong

Trư ờng hợp xấu nhất xảy ra khi phần tử chốt được chọn là phần

t ử nhỏ nhất hoặc lớn nhất trong dãy

M ột trong hai dãy L và G có độ dài n − 1, dãy còn lại có độ dài 0

Th ời gian thực thi tỷ lệ thuận với tổng

Trang 41

Sorting 41

Thực hiện gọi thủ tục đệ quy Quick-Sort với dãy đầu vào có độ dài s

 G ọọọọi tốốốốt (good call) : độ dài của L và G đều nhỏ hơn 3s/4

 G ọọọọi không tốốốốt (bad call) : độ dài của L hoặc G lớn hơn 3s/4

Trang 42

Ư ớc lượng thời gian (tiếp)

Xác suất thực tế: giả sử chúng ta gieo đồng xu, để có k lần mặt ngửa thì

số lần cần gieo đồng xu là 2k

Với đỉnh ở mức i, chúng ta mong muốn rằng:

 Kich thước của dãy đầu vào cho thủ tục đệ quy hiện tại gần với

Do đó, chúng ta trông đợi rằng:

 Với đỉnh ở mức 2log4/3n, kích

thước dãy đầu vào là 1

 Chiều cao của cây sắp

xếp(Quick sort) là O(log n)

Lượng công việc càn làm ở các đỉnh

cùng mức là O(n)

Do đó, chúng ta hy vọng thời gian

thực thi thuật toán là O(n log n)

Trang 43

Sorting 43

Quick-sort có thể được cài đặt để chạy

ngay trên dãy, không tạo ra dãy

con(chạy tại chỗ)

Ở bước phân chia dãy, đổi chỗ các

phần thử trong dãy dự theo kết quả

so sanh để phân bố lại dãy

Output sequence S with the

elements of rank between l and r

rearranged in increasing order

Trang 44

Phân chia t ại chỗ

S ử dụng hai chỉ số để chia S thành hai dãy L và EΥG (một cách tương t ự để chia EΥG thành E và G).

L ặp lại cho đến khi j and k thỏa mãn:

 D ịch chuyển j về bên phải cho đến khi thấy phần tử > x.

 D ịch chuyển k về bên trái cho đến khi thấy phần tử < x.

Trang 45

Sorting 45

bubble-sort O(n2) tại chỗ

ch ậm (phù hợp với đầu vào nhỏ)

insertion-sort O(n2) tại chỗ

heap-sort O(n log n) tại chỗ

nhanh (phù h ợp đầu vào lớn)

merge-sort O(n log n) truy cập dữ liệu tuần tự

nhanh (phù h ợp đầu vào rất lớn)

Ngày đăng: 20/03/2015, 19:44

HÌNH ẢNH LIÊN QUAN

Hình Chia-đ ể -tr ị : - Sắp xếp Data structures and Algorithms
nh Chia-đ ể -tr ị : (Trang 30)

TỪ KHÓA LIÊN QUAN

w