Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Thuật toán sắp xếp
MIỄN PHÍ
Số trang
4
Kích thước
108.0 KB
Định dạng
PDF
Lượt xem
1734

Thuật toán sắp xếp

Nội dung xem thử

Mô tả chi tiết

Lại bàn về giải thuật sắp xếp

Tạ Tiến Đạt

Các bạn thân mến!

Hôm nay qua bài viết này tôimuốn đề cập tới một thuật toán sắp xếp ổn định để giải bài

toán mã hóa Burrows (mà hẳn nhiều bạn đã quen thuộc).Nếu bạn nào chưa rõ về bài toán

này có thể tìm đọc số báo tháng11 năm 2001, bài "Lựa chọn giải thuật sắp xếp " của thầy

Nguyễn XuânHuy để rõ hơn.

Sau đây tôisẽ đi ngay vào phân tích thuật toán sắp xếp mà tôi định nói đếnlà Sắp xếp bằng

phép đếm phân phối(Distribution Counting).

Yêu cầu bàitoán là cho một dãy khóa k1, k2..kn (nguyênkhông âm) và đưa ra dãy đã sắp

tăng (hoặc giảm tùy ý)

Giả sử tađã xây dựng được dãy c1, c2..c(n+1) vớiý nghĩa ci là số lần xuất hiện của giá trị i

trong dãy sốban đầu. Dựa vào dãy biến đếm trên ta hoàn toàn có thể suy ra giátrị kj sẽ

thuộc vào đoạn nào trong dãy sau khi sắp xếp. Cụthể sau khi có dãy c ta xây dựng lại nó

như sau:

c0= 0

c1= c0 + c1

c2= c0 + c1 + c2

cn= c0 + c1 + c2 +..+ cn

khi đó giátrị i trong dãy ban đầu khi được sắp tăng thì nó sẽ nằm ở đoạn ci-1 + 1 tới ci

và ta dễ dàngsuy ra dãy khóa sau khi sắp tăng dựa vào dãy c này.

Ta có cách cài đặt củathuật toán như sau:

procedureDistributionCounting;

begin

fillchar(c, sizeof(c), 0);

for i := 1 to n do inc(c[k[i]]);

for i := 2 to n do c[i] := c[i-1] + c[i];

for i := n downto 1 do

begin

x[c[k[i]] := k[i]; {x là dãy khóa phụ chứa các giá trị của dãyk sau khi sắp}

dec(c[k[i]]);

end;

end;

Đánhgiá:

- Thuật toáncó độ phức tạp O(Max(M, n)) trong đó M là giá trị lớn nhất trong dãysố ban

đầu, hơn hẳn thuật toán sắp xếp chèn và nổi bọt có độ phứctạp O(n2

).

Tải ngay đi em, còn do dự, trời tối mất!