1. Trang chủ
  2. » Công Nghệ Thông Tin

Các giải thuật sắp xếp

63 831 9
Tài liệu đã được kiểm tra trùng lặp

Đ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 63
Dung lượng 453,76 KB

Nội dung

Các giải thuật sắp xếp

Trang 1

S P X P Ắ Ế

Nguy n Văn Linh ễ

Trang 3

T m quan tr ng c a bài toán s p x p ầ ọ ủ ắ ế

 S p x p m t danh sách các đ i t ắ ế ộ ố ượ ng theo m t ộ

th t nào đó là m t bài toán th ứ ự ộ ườ ng đ ượ c v n ậ

Trang 4

S p x p trong và s p x p ngoài ắ ế ắ ế

S p x p trong ắ ế là s s p x p ự ắ ế d li u đ ữ ệ ượ c t ch c trong b nh ổ ứ ộ ớ

trong c a máy tính.

 Các đ i t ố ượ ng c n đ ầ ượ c s p x p là các m u tin g m m t ho c nhi u ắ ế ẩ ồ ộ ặ ề

tr ườ ng M t trong các tr ộ ườ ng đ ượ c g i là khóa (key), ki u c a nó là m t ọ ể ủ ộ

ki u có quan h th t (nh các ki u s nguyên, s th c, chu i ký t ) ể ệ ứ ự ư ể ố ố ự ỗ ự

 Danh sách các đ i t ố ượ ng c n s p x p s là m t m ng c a các m u tin ầ ắ ế ẽ ộ ả ủ ẩ

v a nói trên ừ ở

 M c đích c a vi c s p x p là t ch c l i các m u tin sao cho các khóa ụ ủ ệ ắ ế ổ ứ ạ ẩ

c a chúng đ ủ ượ c s p th t t ắ ứ ự ươ ng ng v i quy lu t s p x p ứ ớ ậ ắ ế

 M t cách m c nhiên, quy lu t s p x p là th t không gi m Khi c n s p ộ ặ ậ ắ ế ứ ự ả ầ ắ

x p theo th t không tăng thì ph i nói rõ ế ứ ự ả

S p x p ngoài ắ ế là s s p x p đ ự ắ ế ượ c s d ng khi s l ử ụ ố ượ ng đ i t ố ượ ng c n ầ

s p x p l n không th l u tr trong b nh trong mà ph i l u tr trên ắ ế ớ ể ư ữ ộ ớ ả ư ữ b ộ

nh ngoài ớ

Trang 5

T ch c d li u và ngôn ng cài đ t ổ ứ ữ ệ ữ ặ

const int n = 10;

typedef int keytype;

typedef float othertype;

typedef struct recordtype {

Trang 7

Gi i thu t s p x p ch n (Selection Sort) ả ậ ắ ế ọ

v i a[i] ớ

Trang 8

Ph ươ ng pháp ch n ph n t ọ ầ ử

(lowindex = i).

= j).

Trang 10

i = i+1

a[j].key<lowkey

lowindex = j lowkey = a[j].key

S

Đ Đ

Trang 12

O(n 2

1) -

n(n 1)

i - (n

2 - n

0

= i

=

=

= ∑

Trang 13

Gi i thu t s p x p xen (Insertion ả ậ ắ ế

Sort)

t ự

Trang 14

Ph ươ ng pháp xen

đó a[0],a[1], a[j-1]:

Trang 18

 Vòng l p /*1*/ có i ch y t 1 đ n n-1 nên ta có: ặ ạ ừ ế

)

O(n 2

1) -

n(n i

1 i

=

=

= ∑

=

Trang 19

Gi i thu t s p x p “n i b t” (Bubble ả ậ ắ ế ổ ọ

Sort)

th 2 ứ

 …

Trang 21

a[j].key < a[j-1].key

j>= i+1 Đ

j = j-1

S

Trang 22

a[j].key < a[j-1].key

j>=

i+1 Đ

j = j-1

S

Trang 23

Ý t ưở ng c a QuickSort ủ

 Ch n m t giá tr khóa v làm ch t (pivot).ọ ộ ị ố

 Phân ho ch dãy a[0] a[n-1] thành hai m ng con "bên trái" và ạ ả

"bên ph i" M ng con "bên trái" bao g m các ph n t có ả ả ồ ầ ử khóa

nh h n ch t ỏ ơ ố , m ng con "bên ph i" bao g m các ph n t có ả ả ồ ầ ử

khóa l n h n ho c b ng ch t ớ ơ ặ ằ ố

 S p x p m ng con “bên trái” và m ng con “bên ph i”.ắ ế ả ả ả

 Sau khi đã s p x p đắ ế ược m ng con “bên trái” và m ng con ả ả

“bên ph i” thì m ng đã cho s đả ả ẽ ược s p b i vì t t c các khóa ắ ở ấ ảtrong m ng con “bên trái” đ u nh h n các khóa trong m ng ả ề ỏ ơ ảcon “bên ph i”.ả

 Vi c s p x p các m ng con “bên trái” và “bên ph i” cũng đệ ắ ế ả ả ược

ti n hành b ng phế ằ ương pháp nói trên

 M t m ng ch g m m t ph n t ho c g m nhi u ph n t có ộ ả ỉ ồ ộ ầ ử ặ ồ ề ầ ửkhóa b ng nhau thì đã có th t ằ ứ ự

Trang 24

Ph ươ ng pháp ch n ch t ọ ố

Trang 25

Ph ươ ng pháp phân ho ch ạ

ch t ố

ch t ố

Trang 31

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 10 5 12 8 1 15 8

L= 3

Ch t p = 8 ố

R= 8

Trang 32

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 10 5 12 8 1 15 8

L= 3

Ch t p = 8 ố

R= 7

Trang 33

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 3

Ch t p = 8 ố

R= 7

Trang 34

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 4

Ch t p = 8 ố

R= 7

Trang 35

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 5

Ch t p = 8 ố

R= 7

Trang 36

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 5

Ch t p = 8 ố

R= 6

Trang 37

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 5

Ch t p = 8 ố

R= 5

Trang 38

Ví d v phân ho ch ụ ề ạ

Chỉ số 0 1 2 3 4 5 6 7 8 9 Khoá 5 4 2 1 5 12 8 10 15 8

L= 5

Ch t p = 8 ố R= 4

5 6 7 8 9

12 8 10 15 8

Trang 45

L u đ ư ồ

Begin

k = i+1 firstkey = a[i].key

(k<=j) and (a[k].key == firstkey

return i return k

i, j

S

Trang 46

(k<=j) and (a[k].key == firstkey

return i return k

i, j

S

Trang 47

 L nh WHILE là t n ệ ốnhi u th i gian nh t.ề ờ ấ

th c hi n là n-1 hay ự ệT(n) = O(n)

Trang 49

Hàm Partition

int Partition(int i,int j, keytype pivot)

{ int L,R;

/*1*/ L = i;

/*2*/ R = j;

/*3*/ while (L <= R) {

/*4*/ while (a[L].key < pivot) L++;

/*5*/ while (a[R].key >= pivot) R ;

Trang 50

/*4*/ while (a[L].key < pivot) L++;

/*5*/ while (a[R].key >= pivot) R ;

ph n t m ng, m i ph n t m t l n, m i l n ầ ử ả ỗ ầ ử ộ ầ ỗ ầ

Trang 52

 Th i gian tìm ch t và phân ho ch m ng là O(n) = n.ờ ố ạ ả

 Khi n = 1, th t c QuickSort ch làm m t nhi m v duy nh t là g i ủ ụ ỉ ộ ệ ụ ấ ọhàm Findpivot v i kích thớ ước b ng 1, hàm này t n th i gian O(1) =1 ằ ố ờ

 Trong trường h p x u nh t, phân ho ch l ch.ợ ấ ấ ạ ệ

 Khi đó ta có th thành l p phể ậ ương trình đ quy nh sau:ệ ư

n + T(1) +

1) - T(n

1

= n nêu

1

T(n)

Gi i PT này ta đả ược T(n) =O(n2)

Trang 53

Đánh giá QuickSort

 Trong tr ườ ng h p t t nh t khi ta ch n đ ợ ố ấ ọ ượ c

ch t sao cho hai m ng con có kích th ố ả ướ c

b ng nhau và b ng n/2 ằ ằ

 Lúc đó ta có ph ươ ng trình đ quy nh sau: ệ ư

Gi i PT này ta đ ả ượ c T(n) =O(nlogn)

1 n

nêu

1

T(n)

Trang 54

HeapSort: Ð nh nghĩa Heap ị

 Cây s p th t b ph n hay còn g i là heap ắ ứ ự ộ ậ ọ

là cây nh phân mà giá tr t i m i nút (khác ị ị ạ ỗ

nút lá) đ u không l n h n giá tr c a các con ề ớ ơ ị ủ

c a nó ủ

 Ta có nh n xét r ng nút g c c a cây s p th ậ ằ ố ủ ắ ứ

t b ph n có giá tr nh nh t ự ộ ậ ị ỏ ấ

Trang 56

HeapSort : Ý t ưở ng gi i thu t ả ậ

 (1) Xem m ng ban đ u là m t cây nh phân M i nút trên cây l u tr ả ầ ộ ị ỗ ư ữ

m t ph n t m ng, trong đó a[0] là nút g c và m i nút không là nút lá ộ ầ ử ả ố ỗa[i] có con trái là a[2i+1] và con ph i là a[2i+2] V i cách t ch c này ả ớ ổ ứthì cây nh phân thu đị ược s có các nút trong là các nút a[0], …, a[(n-ẽ2)/2] T t c các nút trong đ u có 2 con, ngo i tr nút a[(n-2)/2] có th ấ ả ề ạ ừ ể

ch có m t con trái (trong trỉ ộ ường h p n là m t s ch n).ợ ộ ố ẵ

 (2) S p x p cây ban đ u thành m t heap căn c vào giá tr khoá c a ắ ế ầ ộ ứ ị ủcác nút

 (3) Hoán đ i nút g c a[0] cho cho nút lá cu i cùng.ổ ố ố

 (4) S p l i cây sau khi đã b đi nút lá cu i cùng đ nó tr thành m t ắ ạ ỏ ố ể ở ộheap m i ớ

 L p l i quá trình (3) và (4) cho t i khi cây ch còn m t nút Nút này ặ ạ ớ ỉ ộ

cùng v i các nút lá đã b đi t o thành m t m ng s p theo th t gi m ớ ỏ ạ ộ ả ắ ứ ự ả

Trang 57

Thi t k hàm PushDown ế ế

 PushDown nh n vào 2 tham s first và last đ đ y nút first xu ng ậ ố ể ẩ ố

 Gi s a[first], ,a[last] đã đúng v trí c a m t heap, ngo i tr a[first] ả ử ị ủ ộ ạ ừ

PushDown dùng đ đ y ph n t a[first] xu ng đúng v trí c a nó trong ể ẩ ầ ử ố ị ủcây

 Xét a[first], có các kh năng có th x y ra:ả ể ẩ

– N u a[firrst] ch có m t con trái và n u khoá c a nó l n h n khoá c a con trái ế ỉ ộ ế ủ ớ ơ ủ (a[first].key > a[2*first+1].key) thì hoán đ i a[first] cho con trái c a nó và k t ổ ủ ế thúc

– N u a[first] có khoá l n h n con trái c a nó và khoá c a con trái không l n ế ớ ơ ủ ủ ớ

h n khoá c a con ph i thì hoán đ i a[first] cho con trái c a nó, vi c này có ơ ủ ả ổ ủ ệ

th gây ra tình tr ng con trái s không đúng v trí nên ph i xem xét l i con trái ể ạ ẽ ị ả ạ

Trang 58

swap(a[r], a[2*r+1])

r = 2*r+1 Đ

S Đ

S

a[r].key > a[2*r+2].key

and a[2*r+2].key < a[2*r+1].key

swap(a[r], a[2*r+2])

r = 2*r+2 Đ

r = last

Trang 60

Phân tích hàm PushDown

 Ta xét PushDown(0,n-1), t c là PushDown trên cây có n nút ứ

 PushDown ch duy t trên m t nhánh nào đó c a cây nh phân, ỉ ệ ộ ủ ị

t c là sau m i l n l p thì s nút còn l i m t n a M t cách c ứ ỗ ầ ặ ố ạ ộ ử ộ ụ

th , trể ước h t PushDown trên cây có n nút; Sau l n l p th ế ầ ặ ứ

nh t, PushDown trên cây có n/2 nút; Sau l n l p th hai, ấ ầ ặ ứ

PushDown trên cây có n/4 nút;… T ng quát, Sau l n l p th i, ổ ầ ặ ứPushDown trên cây có n/2i nút

 Nh v y, trong trư ậ ường h p x u nh t (luôn ph i th c hi n vi c ợ ấ ấ ả ự ệ ệ

đ y xu ng) thì l nh l p while ph i th c hi n i l n sao chon/2ẩ ố ệ ặ ả ự ệ ầ i =

1 t c là i=logn (i=logn là s l n l p c a l nh while, trong trứ ố ầ ặ ủ ệ ường

h p x u nh t) Mà m i l n l p ch th c hi n m t l nh IF v i ợ ấ ấ ỗ ầ ặ ỉ ự ệ ộ ệ ớthân l nh IF là l i g i Swap và l nh gán, do đó t n O(1) = 1 ệ ờ ọ ệ ố

đ n v th i gian ơ ị ờ

 T đó ta th y PushDown l y O(logn) đ đ y xu ng m t nút ừ ấ ấ ể ẩ ố ộ

trong cây có n nút

Trang 62

 Th i gian th c hi n HeapSort là O(nlogn) ờ ự ệ

Ngày đăng: 20/08/2012, 13:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w