Nguyễn Tiến Công.A2 Nội dung báo cáo: I.. Báo cáo quá trình thực hiện: Sinh viên 1 12-18/03 Tìm kiếm thông tin về thuật toán Quick sort trên mạng và thu thập dữ liệu.. Cả hai có hiểu biế
Trang 1Lớp IT003.I22.KHCL – học kỳ II năm học 2017-2018
BÁO CÁO KẾT QUẢ THỬ NGHIỆM Thuật toán QUICKSORT
Thời gian thực hiện: 10/03 – 11/04/2018
Sinh viên thực hiện:
1 Dương Phúc Huân.(A1)
2 Nguyễn Tiến Công.(A2)
Nội dung báo cáo:
I Tóm tắt về thuật toán A
1 Ý tưởng:
Giải thuật QuickSort sắp xếp dãy a 1 , a 2 ., a N dựa trên việc phân hoạch dãy ban đầu thành 3 phần :
• Phần 1: Gồm các phần tử có giá trị bé hơn x
• Phần 2: Gồm các phần tử có giá trị bằng x
• Phần 3: Gồm các phần tử có giá trị lớn hơn x
với x là giá trị của một phần tử tùy ý trong dãy ban đầu
Sau khi thực hiện phân hoạch, dãy ban đầu được phân thành 3 đoạn:
• 1 ak ≤ x , với k = 1 j
• 2 ak = x , với k = j+1 i-1
• 3 ak x , với k = i N
Đoạn thứ 2 đã có thứ tự
Nếu các đoạn 1 và 3 chỉ có 1 phần tử : đã có thứ tự
khi đó dãy con ban đầu đã được sắp
Đoạn thứ 2 đã có thứ tự
Nếu các đoạn 1 và 3 có nhiều hơn 1 phần tử thì dãy ban đầu chỉ có thứ tự khi các đoạn 1, 3 được sắp
Để sắp xếp các đoạn 1 và 3, ta lần lượt tiến hành việc phân hoạch từng dãy con theo cùng phương pháp phân hoạch dãy ban đầu vừa trình bày …
2 Thuật toán:
Bước 1 : Chọn tùy ý một phần tử a[k] trong dãy là giá trị mốc ( left≤ k ≤ right):
Trang 2x = a[k]; i = left; j = right
Bước 2 : Phát hiện và hiệu chỉnh cặp phần tử
a[i], a[j] nằm sai chỗ :
Bước 2a : Trong khi (a[i]<x) i++;
Bước 2b : Trong khi (a[j]>x) j ;
Bước 2c : Nếu i< j Swap(a[i],a[j]);
Bước 3 : Nếu i < j: Lặp lại Bước 2 Ngược lại: Dừng
3 Minh họa với ví dụ cụ thể:
4 Cài đặt bằng NNLT cụ thể:
void QuickSort(long *&a, long left, long right)
{ long i, j, x;
x = a[(left+right)/2];
i = left; j = right;
{
while(a[i] < x) i++;
while(a[j] > x) j ;
if(i <= j)
{
swap(a[i],a[j]);
i++ ; j ;
} } while(i <= j);
if(left<j)
QuickSort(a, left, j);
if(i<right)
QuickSort(a, i, right);
}
Trang 3II Báo cáo quá trình thực hiện:
Sinh viên
1 12-18/03 Tìm kiếm thông tin về thuật toán Quick
sort trên mạng và thu thập dữ liệu
Cả hai có hiểu biết sơ bộ về thuật đề tài của nhóm
2 19-25/03 -Tìm kiếm và tạo ra 10 bộ dữ liệu để thực
nghiệm
-Tìm lệnh để đọc dữ liệu thực nghiệm vào thuật toán và lệnh đo tốc độ
Hoàn thành Cả 2 gặp với cùng
làm
3
26/03-01/04
-Hoàn thành 2 chương trình quicksort (c+
+), quicksort(c) -Sau đó tiến hành thực nghiệm qua 10 bộ
dữ liệu đòng thời tìm bộ nhớ cần thêm.Cuối cùng trình bày kết quả và đưa
ra kết luận
Còn 1 thuật toán chưa hoàn thành
-A1 viết chương trình -A2 thử nghiệm qua
10 bộ dữ liệu
4 02-08/04 Hoàn thành tiếp thuật toán và thực nghiệm
với sort(x)
Đưa toàn toàn bộ yêu những nội dung đã làm được vào mẫu báo cáo, và chỉnh sửa
Hoàn thành tiểu luận
- A1 trình bày vào mẫu
-A2 kiểm tra chỉnh sửa
III Kết quả thử nghiệm
Bộ dữ liệu
Kích
cỡ
Quicksort(C+
+) Qsort (C) Sort Quicksort(C+ +) Qsort (C) sort
triệu 1.072s 0.982s 0.991s 0.7MB 0.7MB 0.7MB
triệu 1.002s 1.037 0.992s 0.7MB 0.7MB 0.7MB
triệu
1.041s 1.282s 1.013s 0.7MB 0.7MB 0.7MB
triệu 1.193s 1.36s 1.012s 0.7MB 0.7MB 0.7MB
triệu
1.037s 1.01s 1.421s 0.7MB 0.7MB 0.7MB
triệu 1.125s 1.11s 1.359s 0.7MB 0.7MB 0.7MB
triệu 1.283s 1.291s 1.115s 0.7MB 0.7MB 0.7MB
triệu
1.346s 1.236s 1.11s 0.7MB 0.7MB 0.7MB
triệu 1.289s 0.979s 1.131s 0.7MB 0.7MB 0.7MB
triệu
1.092s 1.317s 1.514s 0.7MB 0.7MB 0.7MB
Trang 4IV Kết luận;
-Với 1 triệu phần tử nguyên dương trong 1 lần test thì thời gian cũng như bộ nhớ cần thêm đa số không có sự chênh lệch quá lớn
-Một số bộ dữ liệu thử nghiêm qsort(C) và sort(c++) tốn ít thời gian hơn nhưng lại không đáng kể Còn lại phần lớn bộ dữ liệu thì đều cho ta thấy độ chênh lệch thời gian chạy của quicksort(c++) lớn hơn nhiều khi mà quicksort(c++) chậm hơn Điều đó cho thấy rằng quicksort(c++) có khả năng sắp xếp rất tốt, nhanh.
V Phụ lục:
1 Link download phần minh họa:
https://drive.google.com/file/d/0B2AOEKrrvKNPdHpTRWxrRWpzTWdrb1d6djh LcE9iSWRGajJV/view?usp=sharing
2 Link download mã
nguồn:https://drive.google.com/file/d/0B2AOEKrrvKNPU3pQX1FKcHlfR3hIdEF 6UE51bnU2UDJ0UTk0/view?usp=sharing
3 Link download dữ liệu thử nghiệm:
https://drive.google.com/file/d/185pRFY4baFLY0Ggprp3jE-wITy0jOV8d/view?
usp=sharing