Tải bản đầy đủ (.docx) (39 trang)

THUẬT TOÁN sắp xếp QUICK SORT

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 (2.69 MB, 39 trang )

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG

NIÊN LUẬN CƠ SỞ NGÀNH KTPM
ỨNG DỤNG LẬP TRÌNH SONG SONG ĐỂ CÀI ĐẶT
THUẬT TOÁN SẮP XẾP QUICK SORT

Cán bộ hướng dẫn:

Sinh viên thực hiện:

TS. Nguyễn Công Danh

Họ tên: Châu Hoàng Huy
MSSV: B1704811
Lớp:

HỌC KỲ 1, 2020 - 2021

DI1796A2


ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM
(Học kỳ 1, Năm học 2020-2021)
GIÁO VIÊN HƯỚNG DẪN:
STT
HỌ VÀ TÊN
1
Nguyễn Cơng Danh
SINH VIÊN THỰC HIỆN:
STT


1

HỌ VÀ TÊN
Châu Hồng Huy

MSSV
B1704811

MSCB

THƯỞNG
(Tối đa 1,0 điểm)

ĐIỂM

I. HÌNH THỨC (Tối đa 0,5 điểm)
Bìa (tối đa 0,25 điểm)
 Các tiêu đề: Trường ĐHCT, Khoa CNTT
 Loại niên luận: Cơ sở ngành KTPM, Tên đề tài
 Giáo viên hướng dẫn: chức danh, họ tên.
 Thông tin về các sinh viên thực hiện: họ tên, mã số, lớp
 Năm thực hiện
Bố cục (tối đa 0.25 điểm)
 Nhận xét của giáo viên hướng dẫn và giáo viên chấm
 Mục lục: cấu trúc chương, mục và tiểu mục
 Phụ lục (nếu có)
 Tài liệu tham khảo
II. NỘI DUNG (Tối đa 3,5 điểm)
Tổng quan (tối đa 0,5 điểm)
 Mô tả bài toán, mục tiêu cần đạt được (0,25 điểm)

 Hướng giải quyết và kế hoạch thực hiện (0,25 điểm)
Lý thuyết (tối đa 0,5 điểm)
 Các khái niệm sử dụng trong đề tài
 Kết quả vận dụng lý thuyết vào đề tài
Ứng dụng (tối đa 2,0 điểm)
 Phân tích yêu cầu bài toán, xây dựng các cấu trúc dữ liệu cần thiết (tối
đa 0,5 điểm)
 Giải thuật (Lưu đồ-Ngôn ngữ giả) (1,0 điểm)
 Giới thiệu chương trình (0,5 điểm)
Kết luận (tối đa 0,5 điểm)
 Nhận xét kết quả đạt được
 Hạn chế
 Hướng phát triển
III. CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm)
Giao diện thân thiện với người dùng (1.0 điểm)
Hướng dẫn sử dụng (0,5 điểm)
Kết quả thực hiện đúng với kết quả của phần ứng dụng (3,5 điểm)
Ghi chú: Điểm trong khung “các sinh viên thực hiện” là điểm kết quả cuối cùng của từng sinh viên trong quá
trình thực hiện niên luận 1.

Nếu sinh viên demo chương trình và trả lời vấn đáp không đạt yêu cầu của giáo viên hướng dẫn thì
sinh viên sẽ nhận điểm F cho học phần này.

Cần Thơ, ngày
tháng
năm 2020
GIÁO VIÊN CHẤM


MỤC LỤC


NIÊN LUẬN CƠ SỞ NGÀNH KTPM
NIÊN LUẬN CƠ SỞ NGÀNH KTPM.................................................................3
CHƯƠNG 1. TỔNG QUAN.................................................................................1
I.MƠ TẢ BÀI TỐN............................................................................................1
II.MỤC TIÊU CẦN ĐẠT ĐƯỢC.........................................................................1
III.HƯỚNG GIẢI QUYẾT...................................................................................1
IV.KẾ HOẠCH THỰC HIỆN...............................................................................2
CHƯƠNG 2. LÝ THUYẾT..................................................................................3
I.CÁC KHÁI NIỆM..............................................................................................3
2.1 Khái niệm sắp xếp và thuật toán sắp xếp.....................................................3
2.2 Khái niệm thuật toán sắp xếp Quick Sort....................................................3
2.3 Khái niệm luồng và song song....................................................................3
II.KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI......................................3
CHƯƠNG 3. KẾT QUẢ ỨNG DỤNG.................................................................5
I.PHÂN TÍCH YÊU CẦU BÀI TOÁN.................................................................5
II.XÂY DỰNG CÁC CẤU TRÚC DỮ LIỆU CẦN THIẾT..................................7
3.2.1Hàm nhập dữ liệu từ tệp tin.......................................................................7
3.2.2Hàm tạo ngẫu nhiên số..............................................................................8
3.2.3Hàm kiểm tra mảng đã sắp xếp đúng thứ tự hay chưa...............................8
3.2.4Thuật toán QuickSort một luồng...............................................................9
3.2.5Hàm khởi tạo sắp xếp QuickSort một luồng và biểu diễn........................10
3.2.6Thuật toán QuickSort song song..............................................................11
3.2.7Hàm khởi tạo sắp xếp QuickSort song song và biểu diễn........................12
3.2.8Hàm biểu diễn đồ họa..............................................................................13
3.2.9Hàm chuyển từ số sang chuỗi (để hiển thị ra form).................................14
3.2.10Hàm đọc và chuyển dữ liệu từ chuỗi sang số.........................................15
3.2.11Hàm hiển thị thông báo lỗi....................................................................15
3.2.12Hàm đổi vị trí giữa hai phần tử và highlight phần tử.............................16



3.2.13Hàm lưu dưới dạng ảnh (Sau khi tạo ra từ vị trí của các phần tử)..........16
3.2.14Hàm làm mới control (Picturebox thay đổi ảnh mỗi lần đổi vị trí của
phần tử).................................................................................................................... 17
3.2.15Hàm kiểm tra ảnh và thay đổi ảnh (tắt và bật highlight của phần tử).....17
III.THIẾT KẾ GIẢI THUẬT (LƯU ĐỒ)............................................................18
3.3.1Lưu đồ.....................................................................................................18
3.3.2Sơ đồ Usecase..........................................................................................19
3.3.3Mơ hình kiến trúc....................................................................................20
IV.GIỚI THIỆU CHƯƠNG TRÌNH....................................................................21
3.4.1Giao diện chính.......................................................................................21
3.4.2Khu vực Menu (Main) gồm:....................................................................21
3.4.3Khu vực hiển thị dữ liệu..........................................................................25
3.4.4Khu vực Footer........................................................................................25
CHƯƠNG 4. KẾT LUẬN – ĐÁNH GIÁ............................................................26
I.KẾT QUẢ ĐẠT ĐƯỢC................................................................................26
4.1.1Về mặt chuyên môn.................................................................................26
4.1.2Về mặt kinh nghiệm................................................................................26
II.HẠN CHẾ VÀ NGUYÊN NHÂN...............................................................26
III.HƯỚNG PHÁT TRIỂN.................................................................................27
PHỤ LỤC............................................................................................................ 28
CHƯƠNG 1. HƯỚNG DẪN SỬ DỤNG PHẦN MỀM......................................28
CHƯƠNG 2: TÀI LIỆU THAM KHẢO.............................................................34


MỤC LỤC HÌNH ẢNH


CHƯƠNG 1. TỔNG QUAN
I.


MƠ TẢ BÀI TỐN

Hiện nay, trong hầu hết các hệ thống lưu trữ, quản lý dữ liệu, thao tác tìm kiếm
thường được thực hiện nhiều nhất để khai thác thơng tin một cách nhanh chóng (ví dụ
như: tra cứu từ điển, tìm sản phẩm trong kho,...). Tuy nhiên, để cho việc tìm kiếm đó
được diễn ra nhanh chóng, chính xác thì dữ liệu cần được sắp xếp sẵn gọn gàng, ngăn
nắp theo một trật tự nhất định. Khi đó, việc tìm kiếm, truy xuất dữ liệu trở nên dễ dàng
hơn. Điều này có ý nghĩa rất lớn trong việc quản lý và lưu trữ dữ liệu.
Tuy biết rằng chỉ cần dữ liệu được sắp xếp ngăn nắp thì sẽ dễ dàng sử dụng,
nhưng trong thực tế, chúng ta cịn gặp phải một rắc rối rất lớn đó là thế giới đã cho ra
đời quá nhiều cách sắp xếp khác nhau, mà mỗi cách sắp xếp lại có ưu, nhược điểm
riêng. Thế thì chọn thuật tốn nào là phù hợp nhất và nhanh nhất với nhu cầu của
người sử dụng?
Thuật toán Quick Sort là một trong những thuật tốn sắp xếp nhanh nhất, do đó
ứng dụng lập trình song song vào thuật toán này sẽ giúp hiệu quả càng cao và cải thiện
tốc độ sắp xếp càng lớn hơn, giúp khai thác dữ liệu nhanh hơn. Vì vậy, đề tài: “Ứng
dụng lập trình song song để cài đặt thuật toán sắp xếp Quick Sort” sẽ là hướng
nghiên cứu tốt để tôi chọn làm đề tài niên luận cơ sở của mình.

II.

III.

MỤC TIÊU CẦN ĐẠT ĐƯỢC
-

Nắm vững kiến thức cấu trúc dữ liệu, phân tích và thiết kế thuật toán và thuật
toán Quick Sort.


-

Ứng dụng song song vào thuật toán Quicksort.

-

Thể hiện được thời gian sau khi sắp xếp xong.

-

Học cách sử dụng Thread, Parallel và cách tạo chuyển động trên form.

-

Biểu diễn thuật toán Quick Sort một luồng và Quick Sort song song.

HƯỚNG GIẢI QUYẾT

Đầu tiên, cần phải tìm hiểu thật kỹ cách hoạt động của thuật tốn Quick Sort đã
được học trong các mơn trước đó. Nắm vững cách hoạt động của thuật toán và đưa giải
pháp để áp dụng lập trình song song vào thuật tốn.
Áp dụng Parallel (song song) của .Net Framework vào thuật toán để chạy song
song thuật toán Quick Sort.
Xây dựng hàm để biễu diễn các con số trong mảng thể hiện vị trí đang sắp xếp, vị
trí thay đổi cho nhau ra hình ảnh.
1


Cho phép người dùng lựa chọn thuật toán Quick Sort một luồng hoặc Quick Sort
song song.

Phần biểu diễn đồ họa cách hoạt động của thuật toán cho phép chọn xem biểu
diễn đồ họa hoặc không, cho phép chọn tốc độ chậm hoặc tốc độ mặc định của thuật
toán.
Nhập dữ liệu gồm hai phần, tự động tạo số ngẫu nhiên bởi phần mềm hoặc người
dùng nhập danh sách số bằng tệp tin text vào phần mềm.
Dữ liệu và kết quả sẽ hiển thị trên form để có thể xem, có nút kiểm tra kết quả có
sắp xếp đúng thứ tự hay khơng.

IV.

KẾ HOẠCH THỰC HIỆN
Tuần

Cơng việc

Tuần 1 – Tuần 2

Tìm hiểu cách hoạt động của thuật toán Quick Sort.

Tuần 3 – Tuần 4

Cài đặt thuật toán và thử nghiệm chạy song song Quick Sort.

Tuần 5 – Tuần 6

Thiết kế giao diện và code các chức năng hỗ trợ nhập dữ liệu.

Tuần 7 – Tuần 8

Code chức năng biểu diễn số khi sắp xếp bằng đồ họa.


Tuần 9 – Tuần 10

Đánh giá và sửa đổi giao diện cho thân thiện với người dùng.

Tuần 11 – Tuần 12

Kiểm thử và tạo tài liệu hướng dẫn sử dụng phần mềm.

Tuần 12 – Tuần 14

Đóng gói phần mềm và báo cáo.

2


CHƯƠNG 2. LÝ THUYẾT
I. CÁC KHÁI NIỆM
2.1 Khái niệm sắp xếp và thuật tốn sắp xếp
Sắp xếp là q trình bố trí lại các phần tử trong một tập hợp theo một trình tự
nào đó nhằm mục đích giúp quản lý và tìm kiếm các phần tử dễ dàng và nhanh chóng
hơn.
Thuật tốn sắp xếp là một thuật tốn sắp xếp các phần tử của một danh sách
(hoặc một mảng) theo thứ tự (tăng hoặc giảm). Và để dễ dàng cho việc nghiên cứu và
học tập thì người ta thường gán các phần tử được sắp xếp là các chữ số.

2.2 Khái niệm thuật toán sắp xếp Quick Sort
Thuật toán sắp xếp Quick Sort là một thuật toán chia để trị (Divide and
Conquer algorithm). Nó chọn một phần tử trong mảng làm điểm đánh dấu (pivot).
Thuật toán sẽ thực hiện chia mảng thành các mảng con dựa vào pivot đã chọn. Việc

lựa chọn pivot ảnh hưởng rất nhiều tới tốc độ sắp xếp. Nhưng máy tính lại khơng thể
biết khi nào thì nên chọn theo cách nào. Dưới đây là một số cách để chọn pivot thường
được sử dụng:
-

Luôn chọn phần tử đầu tiên của mảng. (Được sử dụng trong nghiên cứu này).

-

Luôn chọn phần tử cuối cùng của mảng.

-

Chọn một phần tử ngẫu nhiên.

-

Chọn một phần tử có giá trị nằm giữa mảng.

2.3 Khái niệm luồng và song song
Một luồng (thread) được định nghĩa như là một đường thực thi (execution path)
của một chương trình. Mỗi luồng định nghĩa một dịng điều khiển duy nhất.
Đa luồng (multi-thread) có thể hiểu là một kỹ thuật để cùng một lúc xử lý nhiều
tác vụ.
Song song (Parallel) là cơ chế xử lý song song trong C#, được hỗ trợ nhiều hơn
khi chạy song song, khác với đa luồng (multi-thread) ở việc đồng bộ dữ liệu, quản lí
luồng, các vấn đề về deadlock,… (Trong nghiên cứu này sử dụng Parallel)

II.


KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI

Áp dụng thuật toán sắp xếp Quick Sort kết hợp sử dụng Parallel để có thể sắp xếp
song song, xây dựng hàm để biểu diễn các phần tử khi đang sắp xếp, giúp người dùng

3


xem được sự thay đổi vị trí của các phần tử, xây dựng hàm kiểm tra thứ tự sau khi sắp
xếp để đảm bảo thứ tự sắp xếp đã đúng.

4


CHƯƠNG 3. KẾT QUẢ ỨNG DỤNG
I.

PHÂN TÍCH YÊU CẦU BÀI TỐN

Phần mềm “Ứng dụng lập trình song song vào thuật toán Quick Sort” đặt ra
yêu cầu chủ yếu trọng tâm là ứng dụng song song vào QuickSort và minh họa trực
quan bằng giao diện đồ họa, biển diễn sự thay đổi của các phần tử trong khi sắp xếp.
Dữ liệu đầu vào của phần mềm là một mảng các con số có giá trị ngẫu nhiên, có
thể nhập vào bằng tệp tin .txt hoặc chọn tự động tạo ngẫu nhiên số bởi phần mềm.
Nhập bằng tệp tin .txt: Với cách này người dùng chuẩn bị sẵn một tệp tin .txt
chứa những con số ngẫu nhiên, mỗi dòng một số. Với cách này người dùng sẽ tiết
kiệm được nhiều thao tác chuột hơn, dễ dàng nhập số vào và có thể nhập vào phần
mềm một cách nhanh chóng. Để thực hiện được, ta cần thiết kế hàm
ImportFileData(). Hàm này sẽ đọc dữ liệu từ tệp tin và ghi vào mảng.
Tạo ngẫu nhiên: Ở cách này người dùng chỉ cần nhập vào độ dài của mảng,

phần mềm sẽ ngẫu nhiên số từ 1 cho đến “số đã nhập vào”, như vậy ta có độ dài là số
đã nhập vào và số ngẫu nhiên nằm trong khoảng 1 đến “số đã nhập vào”. Để thực hiện
chức năng này, ta cần thiết kế một hàm có tên AutoGenerateNumber(). Hàm này có
tác dụng tạo ra danh sách số ngẫu nhiên dựa vào số người dùng đã nhập vào.
Phần mềm cho phép người dùng lựa chọn thuật tốn Quick Sort để sắp xếp, có
hai lựa chọn là Quick Sort một luồng và Quick Sort song song. Giữa 2 thuật tốn
này sẽ có tốc độ sắp xếp khác nhau và sắp xếp song song là phần quan trọng nhất trong
chủ đề này.
Người dùng có thể chọn hiển thị biểu diễn đồ họa hoặc khơng, ngồi ra cịn có
thể bật chế độ sắp xếp chậm để xem quá trình thay đổi của các phần tử, do thuật tốn
chạy rất nhanh nên cần có lựa chọn tốc độ chậm để có thể xem được thuật tốn đang
chạy.
Dữ liệu đầu ra sẽ được hiển thị ra một TextBox để cho người dùng xem và có
thể kiểm tra, ngồi ra phần mềm hỗ trợ hàm kiểm tra thứ tự để người dùng có thể kiểm
tra độ chính xác của dãy số sau khi sắp xếp.
Thời gian sắp xếp sẽ hiển thị phía dưới form sau khi sắp xếp hồn thành để
người dùng có thể so sánh tốc độ giữa sắp xếp Quick Sort một luồng và Quick Sort
song song. Đối với dữ liệu nhỏ, tốc độ sắp xếp còn phụ thuộc vào vị trí của pivot (do
chọn mặc định là phần tử cuối của mảng) nên có thể kết quả sẽ hơn thua nhau giữa hai
thuật toán, nhưng về mặt chung khi sắp xếp dữ liệu lên đến vài triệu phần tử thì sự
khác biệt giữa một luồng và song song mới thể hiện rõ rệt.

5


Để sửa đổi thuật toán từ QuickSort một luồng sang song song, chúng ta thay đổi
tại phần gọi đệ quy.

Hình 1. Thuật toán Quicksort trước khi thay đổi.


Tại đoạn code này, chúng ta có thể thấy tại phần gọi đệ quy QuickSort, thuật
toán đang chạy tuần tự, sau khi chạy xong hàm QuickSort đầu tiên tiếp theo mới đến
hàm QuickSort thứ hai.
Chúng ta sẽ sửa đổi để hàm QuickSort để có thể thực hiện cả hai hàm cùng lúc
từ đó chuyển thành QuickSort song song như ảnh bên dưới:

Hình 2. Quicksort sau khi thay đổi (Quicksort song song).

Tại phần gọi hàm chúng ta sử dụng Parallel (song song) có thể hiểu đơn giản
như tạo thêm luồng (multi-thread). Khi chạy hàm Parrallel sẽ gọi hai hàm QuickSort,
lúc này Parallel sẽ tạo ra hai luồng, mỗi luồng sẽ chạy một hàm QuickSort. cả hai hàm
sẽ chạy cùng lúc từ đó hai hàm này sẽ chạy song song với nhau.
Dữ liệu sẽ không bị lỗi trong khi chạy song song do hai hàm QuickSort gọi hai
phần dữ liệu riêng biệt, QuickSort đầu tiên sẽ chạy từ điểm đầu đến điểm phân hoạch –
1, QuickSort thứ hai sẽ chạy từ điểm phân hoạch + 1 cho đến điểm cuối (chiều dài của
mảng).

6


Tiếp theo QuickSort sẽ cứ tiếp tục chạy một đoạn mảng nhỏ hơn đã được gọi
hàm ở trước đó, như vậy dữ liệu hồn tồn khơng gây ảnh hưởng trong quá trình chạy
song song.

II.

XÂY DỰNG CÁC CẤU TRÚC DỮ LIỆU CẦN THIẾT

Để thử hiện được việc sắp xếp của thuật toán quick sort một luồng và song song
cùng các hàm hỗ trợ khác ta cần xây dựng cấu trúc dữ liệu và thuật tốn. Sau đây là

các hàm chính khi chạy sắp xếp:

3.2.1

Hàm nhập dữ liệu từ tệp tin

Hình 3. Nhập dữ liệu từ tệp tin text.

7


3.2.2

Hàm tạo ngẫu nhiên số

Hình 4. Hàm tạo ngẫu nhiên số.

3.2.3

Hàm kiểm tra mảng đã sắp xếp đúng thứ tự hay chưa

Hình 5. Hàm kiểm tra thứ tự của mảng.

8


3.2.4

Thuật tốn QuickSort một luồng


Hình 6. Thuật tốn Quicksort một luồng.

9


3.2.5

Hàm khởi tạo sắp xếp QuickSort một luồng và biểu diễn

Hình 7. Hàm khởi tạo sắp xếp Quicksort một luồng và biểu diễn.

10


3.2.6

Thuật tốn QuickSort song song

Hình 8. Thuật tốn Quicksort song song.

11


3.2.7

Hàm khởi tạo sắp xếp QuickSort song song và biểu diễn

Hình 9. Hàm khởi tạo sắp xếp Quicksort song song và biểu diễn.

12



3.2.8

Hàm biểu diễn đồ họa

Hình 10. Hàm biểu diễn đồ họa.

13


3.2.9

Hàm chuyển từ số sang chuỗi (để hiển thị ra form)

Hình 11. Hàm chuyển từ số sang chuỗi.

14


3.2.10

Hàm đọc và chuyển dữ liệu từ chuỗi sang số

Hình 12. Hàm đọc và chuyển dữ liệu từ chuỗi sang số.

3.2.11

Hàm hiển thị thơng báo lỗi


Hình 13. Hàm hiển thị thông báo lỗi.

15


3.2.12

Hàm đổi vị trí giữa hai phần tử và highlight phần tử

Hình 14. Hàm đổi vị trí giữa hai phần tử và highlight phần tử.

3.2.13

Hàm lưu dưới dạng ảnh (Sau khi tạo ra từ vị trí của các phần tử)

Hình 15. Hàm lưu dưới dạng ảnh (Sau khi tạo ra từ vị trí của các phần tử).

16


3.2.14

Hàm làm mới control (Picturebox thay đổi ảnh mỗi lần đổi vị trí của
phần tử)

Hình 16. Hàm làm mới control (Picturebox thay đổi ảnh mỗi lần đổi vị trí của phần tử).

3.2.15

Hàm kiểm tra ảnh và thay đổi ảnh (tắt và bật highlight của phần tử)


Hình 17. Hàm kiểm tra ảnh và thay đổi ảnh (tắt và bật highlight của phần tử).

17


III.

THIẾT KẾ GIẢI THUẬT (LƯU ĐỒ)

3.3.1 Lưu đồ

Hình 18. Lưu đồ thuật toán Quicksort song song.

18


3.3.2

Sơ đồ Usecase

Hình 19. Sơ đồ usecase của phần mềm Quicksort song song.

19


3.3.3

Mơ hình kiến trúc


Hình 20. Mơ hình kiến trúc.

20


×