Tải bản đầy đủ (.doc) (27 trang)

Nghiên cứu các phương pháp sắp xếp

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 (209.08 KB, 27 trang )

Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
Nội dung
Nội dung.......................................................................................................................................1
I. Mở đầu ...................................................................................................................................2
II. Phát biểu bài toán ..................................................................................................................2
III. Phương pháp nghiên cứu ......................................................................................................3
1.Phương pháp....................................................................................................................................3
2. Đánh giá các giải thuật xử lí ngoài .................................................................................................3
IV. Thiết kế cấu trúc dữ liệu và giải thuật...................................................................................4
1. sắp xếp bằng phương pháp trộn tự nhiên (Phương pháp 1).........................................................4
1.1 Tư tưởng....................................................................................................................................4
1.2 Giải thuật...................................................................................................................................4
1.3 Cài đặt chương trình.................................................................................................................8
1.4 Đánh giá giải thuật...................................................................................................................11
2. sắp xếp ngoài bằng phương pháp trộn khác ( phương pháp 2)...................................................11
2.1 Tư tưởng:.................................................................................................................................11
2.2 Giải thuật:................................................................................................................................11
2.3 Cài đặt chương trình:.............................................................................................................14
2.4 Đánh giá giải thuật:.................................................................................................................15
3. Cải tiến sắp xếp trộn (phương pháp 3).........................................................................................16
3.1 Tư tưởng..................................................................................................................................16
3.2 Giải thuật.................................................................................................................................16
3.3 Đánh giá giải thuật..................................................................................................................18
4. Trộn nhiều đường (phương pháp 4).............................................................................................19
4.1 Tư tưởng.................................................................................................................................19
4.2 Giải thuật ...............................................................................................................................19
4.3. Cài đặt chương trình:( tham khảo chương trình chạy bằng C++)..........................................21
4.4. Đánh giá giải thuật:................................................................................................................26
Nhóm sinh viên thực hiện: 10 Trang 1
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
I. Mở đầu


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 dụng trong các ứng dụng tin học. Ví dụ ta cần sắp xếp danh sách thí
sinh theo tên với thứ tự Alphabet hoặc sắp xếp danh sách sinh viên theo điểm trung
bình từ cao đến thấp. Một ví dụ khác là khi cần tìm kiếm một đối tượng trong một
danh sách các đối tượng bằng giải thuật tìm kiếm nhị phân thì danh sách các đối
tượng này phải được sắp xếp trước đó.
Tóm lại sắp xếp là một yêu cầu không thể thiếu trong khi thiết kế các phần
mềm. Do đó việc nghiên cứu các phương pháp sắp xếp là rất cần thiết để vận dụng
trong khi lập trình.
Ta đã biết đến các phương pháp sắp xếp trong và trong các giải thuật mà chúng
ta đề cập từ trước tới nay, chúng ta đã giả sử rằng số lượng các dữ liệu vào là khá nhỏ
để có thể chứa hết ở bộ nhớ trong (main memory). Nhưng điều gì sẽ xảy ra nếu ta
muốn xử lí phiếu điều tra dân số toàn quốc hay thông tin về quản lí đất đai cả nước
chẳng hạn? Trong các bài toán như vậy số lượng dữ liệu vượt quá khả năng lưu trữ
của bộ nhớ trong. Để có thể giải quyết các bài toán đó chúng ta phải dùng bộ nhớ
ngoài để lưu trữ và xử lí.

II. Phát biểu bài toán
Các phương pháp như Bubble-Sort, QuickSort,…là sắp xếp trong làm việc với
dữ liệu nhỏ. Nhiều ứng dụng sắp xếp quan trọng liên quan đến việc xử lí các tập tin
có kích thước lớn, nên không có đủ bộ nhớ cho những tập tin quá lớn như vậy. Các
phương pháp thích hợp cho những ứng dụng như vậy gọi là phương pháp sắp xếp
ngoài, vì chúng liên quan đến xử lí dữ liệu bên ngoài đơn vị xử lí trung ương.
Do đó chúng ta sử dụng sắp xếp ngoài để sắp xếp khi đối tượng cần sắp xếp
lớn không thể lưu trữ trên bộ nhớ trong mà phải lưu trữ trên bộ nhớ ngoài.
Nhóm sinh viên thực hiện: 10 Trang 2
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
III. Phương pháp nghiên cứu
1. Phương pháp
Kiểu dữ liệu tập tin là kiểu thích hợp nhất cho việc biểu diễn dữ liệu được lưu

trong bộ nhớ ngoài.
Có thể xem một tập tin bao gồm nhiều mẫu tin được lưu trong các khối. Mỗi
khối lưu một số nguyên vẹn các mẫu tin, không có mẫu tin nào bị chia cắt để lưu trên
hai khối khác nhau.
Ghi Ghi
Đọc
Đọc
Mỗi lần đọc 1 mẫu tin Mỗi lần đọc 1 khối
2. Đánh giá các giải thuật xử lí ngoài
Đối với bộ nhớ ngoài thì thời gian tìm một khối để đọc vào bộ nhớ trong là rất
lớn so với thời gian thao tác trên dữ liệu khối đó. Vì vậy khi đánh giá các giải thuật
thao tác trên bộ nhớ ngoài, chúng ta tập trung vào việc xét số lần đọc khối vào bộ nhớ
trong và số lần ghi khối ra bộ nhớ ngoài ta gọi chung là phép truy xuất khối(block
access). Vì kích thước các khối là cố định nên ta không thể tìm cách tăng kích thước
một khối mà chúng ta phải tìm các giảm số lần truy xuất khối .
Nhóm sinh viên thực hiện: 10 Trang 3
Bộ nhớ trong
Bộ nhớ đệm
Bộ nhớ ngoài
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
IV. Thiết kế cấu trúc dữ liệu và giải thuật
1. sắp xếp bằng phương pháp trộn tự nhiên (Phương pháp 1)
1.1 Tư tưởng
Sắp xếp tập tin F, sử dụng 2 tập tin phụ F1 và F2.
Thực hiện luân phiên 2 công việc:
- Tách tập tin lớn thành 2 tập tin con có thứ tự.
- Trộn 2 tập tin con thành tập tin lớn có thứ tự.
1.2 Giải thuật
Lặp lại các bước sau:
Phân đoạn F thành F1 và F2

- Trộn F1 và F2 vào F
Cho tới khi số đoạn trong F chỉ còn một.
1.2.a Giải thuật phân đoạn
Phân file F thành 2 file F1 và F2.
Bước 1: Mở file F để đọc, mở file F1 và F2 để ghi, khởi gán giá trị đầu số
đoạn con = 0 { sodoancon:=0 };
Bước 2: Thực hiện cho tới khi đọc hết file F
- Nếu chưa hết file F thực hiện việc đọc phần tử (PT) của F và ghi nó
vào F1 cho đến khi gặp PT nhỏ hơn PT trước nó hoặc hết file F, tăng số
đoạn con lên 1, {inc(sodoancon)};
- Nếu chưa hết file F thực hiện việc đọc PT để của F và ghi nó vào F2
cho đến khi gặp PT nhỏ hơn PT trước nó hoặc hết file F; tăng số đoạn
con lên 1, {inc(sodoancon)};
Bước 3: Đóng file F1, F2, F.
Ví dụ:
Cho file F gồm 21 mẫu tin với khóa là các số nguyên như sau:
3 65 6 15 29 20 25 5 31 40 12 50 67 45 9 18 34 17 11 98 8
3 65 6 15 29 20 25 5 31 40 12 50 67 45 9 18 34 17 11 98 8
Nhóm sinh viên thực hiện: 10 Trang 4
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến

Phân file F thành 2 file F1 và F2
Lần 1:
F1
F2 6 15 29
Lần 2:
F1 3 65 20 25
F2 6 15 29 5 31 40
Lần 3:
F1 3 65 20 25 12 50 67


F2 6 15 29 5 31 40 45
Lần 4:
F1 3 65 20 25 12 50 67 9 18 34
F2 6 15 29 5 31 40 45 17
Lần 5:
F1 3 65 20 25 12 50 67 9 18 34 11 98
F2 6 15 29 5 31 40 45 17 8
 Số đoạn con: 10

1.2.b Giải thuật trộn
Trộn các đoạn con có thứ tự trong file F1 và file F2 vào file F, biến numsubfile
là số đoạn con có trong F.
Bước 1: Mở file F1, F2 để đọc, mở file F để ghi;
Nhóm sinh viên thực hiện: 10 Trang 5
3 65
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
Bước 2: Đọc PT đầu tiên của file F1 vào biến x và phần tử đầu tiên của F2 vào
biến y.
Thực hiện cho tới khi đọc hết file F1 và F2
(i) Thực hiện cho tới khi hết đoạn con trong F1 hoặc hết đoạn con trong F2
i
1.
Nếu phần tử x của F1 < phần tử y của F2 thì di chuyển x vào F và
đọc phần tử tiếp theo của F1.
i
2.
Nếu phần tử x của F1 > phần tử y của F2 thì di chuyển y vào F và
đọc phần tử tiếp theo của F2.
Bước 3: Nếu file F1 chưa kết thúc thì ghi các phần tử còn lại của nó sang F,

ngược lại nếu file F2 chưa kết thúc thì ghi các phần tử còn lại của nó sang F;
Bước 4: Đóng file F1, F2, F;
Ví dụ:
Cho file F gồm 21 mẫu tin với khóa là các số nguyên như sau:
3 65 6 15 29 20 25 5 31 40 12 50 67 45 9 18 34 17 11 98 8
Qua thủ tục phân đoạn ở ví dụ trong 2.2.1 ta có:
F1 3 65 20 25 12 50 67 9 18 34 11 98
F2 6 15 29 5 31 40 45 17 8
Thực hiện trộn:
3 6 15 29 65 5 20 25 31 40 12 45 50 67 9 17 18 34 8 11 98
Giải thuật sắp xếp trộn thực hiện luân phiên 2 thủ tục phân đoạn và trộn.
Sắp xếp bằng trộn tự nhiên file F :
3 65 6 15 29 20 25 5 31 40 12 50 67 45 9 18 34 17 11 98 8
Lần 1:
- Phân đoạn:
F1 3 65 20 25 12 50 67 9 18 34 11 98
Nhóm sinh viên thực hiện: 10 Trang 6
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
F2 6 15 29 5 31 40 45 17 8
- Trộn:
3 6 15 29 65 5 20 25 31 40 12 45 50 67 9 17 18 34 8 11 98
Lần 2:
- Phân đoạn:
F1
8 11 98
F2


- Trộn:


3 5 6 15 20 25 29 31 40 65 9 12 17 18 34 45 50 67 8 11 98
Lần 3:
- Phân đoạn:
F1
8 11 98
F2

Nhóm sinh viên thực hiện: 10 Trang 7
12 45 50 67
9 17 18 34
3 5 6 15 20 25 29 31 40 65
9 12 17 18 34 45 50 67
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
- Trộn:
3 5 6 9 12 15 17 18 20 25 29 31 34 40 45 50 65 67 8 11 98
Lần 4:
- Phân đoạn:
F1
3 5 6 9 12 15 17 18 20 25 29 31 34 40 45 50 65 67
F2
8 11 98
- Trộn:
3 5 6 8 9 11 12 15 17 18 20 25 29 31 34 40 45 50 65 67 98
z(F2);
1.3 Cài đặt chương trình
a. Cài đặt chương trình phân đoạn
Thủ tục phân đoạn
Phân file F thành 2 file F1 và F2.
Procedure phandoan(var F,F1,F2:fileType);
Var kt:boolean;

Begin
Assign(F,'chinh'); Reset(F);
Assign(F1,'phu1'); Rewrite(F1);
Assign(F2,'phu2'); Rewrite(F2);
Numsub:=0;
while not eof(F) do
Nhóm sinh viên thực hiện: 10 Trang 8
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
begin
saodoancon(F,F1,kt);
inc(numsub);
if not eof(F) then
begin
saodoancon(F,F2,kt);
inc(Numsub);
end;
end;
close(F);
close(F1);
close(F2);
End;
Thủ tục sao 1 đoạn con từ file F vào file T
Procedure SaoDoancon(var F,T:FileType; var kt:boolean);
{Sao 1 doan con co thu tu F vao T}
Begin
kt:=false;
while not kt do SaoBg(F,T,kt);
End;
{________________________________________________________}
Procedure SaoBg(var F,T:fileType; var kt:boolean);

Var V,S:infotype;
Begin
if not eof(F) then
begin
read(F,V);
write(T,V);
if eof(F) then kt:=true
Nhóm sinh viên thực hiện: 10 Trang 9
Đề tài: Nghiên cứu sắp xếp ngoài GVHD: PGS-TSKH Trần Quốc Chiến
else
begin
read(F,S);
kt:=(S<V);
seek(F,filepos(F)-1);
end;
end;
End;
b. Cài đặt chương trình trộn
Giải thuật trộn các đoạn con có thứ tự trong file F1 và file F2 vào file F
Procedure Tron(var F,F1,F2:fileType);
Var kt1,kt2:boolean; v1,v2:infotype;
Begin
Assign(F,'chinh'); Rewrite(F);
Assign(F1,'phu1'); Reset(F1);
Assign(F2,'phu2'); Reset(F2);
while not(eof(F1) or eof(F2)) do
begin
read(F1,v1); read(F2,v2);
Seek(F1,filepos(F1)-1);
Seek(F2,filepos(F2)-1);

if v1<v2 then
SaoBg(F1,F,kt1)
else
SaoBg(F2,F,kt2);
end;
while not eof(F1) do
begin
Nhóm sinh viên thực hiện: 10 Trang 10

×