Thơ tình của PusKin
-
Upload
wade-barton -
Category
Documents
-
view
113 -
download
1
description
Transcript of Thơ tình của PusKin
Thơ tình của PusKinThơ tình của PusKinTôi yêu em đến nay chừng có thểTôi yêu em đến nay chừng có thể
Ngọn lửa tình chưa hẳn đã tàn phaiNgọn lửa tình chưa hẳn đã tàn phaiNhưng không để em bận lòng thêm Nhưng không để em bận lòng thêm
nửa nửa Hay lòng em phải gợi bóng u hoàiHay lòng em phải gợi bóng u hoài
Tôi yêu em yêu âm thầm, không huy Tôi yêu em yêu âm thầm, không huy vọngvọng
Lúc rụt rè ,khi hậm hực lòng ghenLúc rụt rè ,khi hậm hực lòng ghenTôi yêu em yêu chân thành đằm Tôi yêu em yêu chân thành đằm
thắm thắm
Thơ tìnhThơ tình
Cầu Cầu được ngườiđược người tình như tôi đã yêu em tình như tôi đã yêu em
Thuật toán sắp xếp nhanh(tiếp Thuật toán sắp xếp nhanh(tiếp theo)theo)
• Trong lần trước chúng ta đã trình bày thuật toán sắp xếp nhanh với ý tưởng chọn phần tử đầu tiên làm mốc.Hôm nay chúng ta sẽ trình bày cách chọn mốc thứ hai. Đó là chọn phần tử giửa mảng làm mốc
Ý tưởngÝ tưởng
• Chọn phần tử ở giửa mảng làm mốc• Đổi chỗ các phần tử ở trước và sau phần
tử mốc• Sao cho đến một lúc nào đó các phần tử ở
trước mốc thì bé hơn hoặc bằng mốc và các phần tử ở sau mốc lớn hơn mốc
• Lúc này ta phân dãy thành hai dãy con• Hai dãy con được sắp xếp một cách đệ
quy
Ví dụVí dụ
• Sắp xếp dãy sau theo thứ tự tăng dần
• 10 7 8 4 5 6
• Theo bạn kết quả sẽ là bao nhiêu?
10 7 8 4 5 6
L=0 R=5
6 7 8 4 5 10
L=0 R=5
6 7 5 4 8 10
L=0 R=5
• Ta được hai dãy con
6 7 5 4 8 10
L=0 R=3
• Ta đươc hai dãy con
6 7 5 4 8 10
L=0 R=3
• Ta đươc hai dãy con
6 4 5 7 8 10
L=0 R=2
• Ta được hai dãy con
6 5 7 8 10
L=0 R=1
4
• Dãy được sắp xếp xong
5 6 7 8 104
Ví dụ 2Ví dụ 2
• Sắp xếp dãy sau theo thứ tự giảm dần
• 6 8 7 8 9 10 8 11
• Bạn sẽ giải quyết bài này như thế nào?
Phân tíchPhân tích
• Ở đây đề bài yêu cầu chúng ta sắp xếp giảm dần nên thuật toán chúng ta phải có sự thay đổi một chút
Cụ thể: +)đi từ đầu dãy nếu gặp được phần tử nhỏ hơn mốc thì dừng
+)sau đó đi từ cuối dãy nếu gặp phần tử lớn hơn mốc thì dừng
+)nếu chỉ số của phần tử nhỏ hơn mốc nhỏ hơn phần tử lớn hơn mốc thì đổi chổ chúng
+)tiếp tục làm giống thuật toán ban đầu
Lời giảiLời giải
6 8 7 8 9 10 8 11
L=0 R=7
Lời giảiLời giải
11 8 7 8 9 10 8 6
L=0 R=7
Lời giảiLời giải
11 8 7 8 9 10 8 6
L=0 R=7
Lời giảiLời giải
11 8 10 8 9 7 8 6
L=0 R=7
Lời giảiLời giải
11 8 10 9 8 7 8 6
L=0 R=2R=3 L=0
Lời giảiLời giải
• Ta được hai dãy con
11 8 10 9 8 7 8 6
L=0 R=2R=3 L=0
Lời giảiLời giải
• Ta được hai dãy con
11 9 10 8 8 8 7 6
L=0 R=2R=3 L=0
Lời giảiLời giải
• Ta được hai dãy con
11 9 10 8 8 8 7 6
L=0 R=2
Lời giảiLời giải
• Dãy đươc sắp xếp xong
11 10 9 8 8 8 7 6
• Bước 1:\\ chọn phần tử giửa làm mốc• x=a[(l+r)/2];i=l;j=r;• Bước 2:\\ phát hiện và hiệu chỉnh cặp phần tử
sai vị trí• Bước 2a) Trong khi (a[i]<x) i++;• Bước 2b) Trong khi (a[j]>x) j--;• Nếu i<j \\a[i]>=x>=a[j] mà a[j] đứng sau
a[i];• hoán vị(a[i],a[j]);
Giải thuật phân hoạch(cho mãng Giải thuật phân hoạch(cho mãng a[l]..a[r])a[l]..a[r])
• Bước 3: nếu i<j :lặp lại bước 2 \\ chưa xét hết mãng;
• ngược lại thì dừng
Giải thuật sắp xếp Giải thuật sắp xếp nhanh(Quicksortnhanh(Quicksort))
• Bước 1: phân hoạch dãy a[l]..a[r] thành hai dãy con
• +)dãy con 1:a[l]..a[i-1]<=x• +)dãy con 2:a[i]=x• +)dãy con 3:a[i+1]..a[r]>x• Bước 2: nếu (l<i-1) \\ nghĩa là dãy con 1 có
nhiều hơn một phần tử• Phân hoạch dãy a[l]..a[i-1]• nếu (i+1<r) thì phân hoạch dãya[i+1]..a[r]
Cài đặt theo ngôn ngữ PascalCài đặt theo ngôn ngữ Pascal
• Procedure Quick_sort(l,r: integer,var a:mảng);
• Var i,j,x:integer;• Begin• x:=a[(l+r) div 2];i:=l;j:=r;• while(i<j) do• begin• while(a[i]<x) do i:=i+1;
• while(a[j]>x) do j:=j-1;• if(i<=j) then• begin• hoanvi(a[i],a[j]);• i:=i+1;j:=j-1;• end;• if(l<j) then Quick_sort(l,j,a);• if(i<r) then Quick_sort(i,r,a);end;
Cài đặt(theo ngôn ngữ C++)Cài đặt(theo ngôn ngữ C++)
• void Quick_sort( int a[],int l,int r);• {int i,j;• int x;• x=a[(l+r)/2]; \\chọn phần tử ở giửa làm mốc• i=l;j=r;• do {• while (a[i]<x) i++;• while (a[j]>x) j--;
• if(i<=j)
• { hoanvi(a[i],a[j]);
• i++;j--;
• }
• }while(i<j);
• if (l<j) Quick_sort(a,l,j);
• if (i<r) Quick_sort(a,i,r); }
Chú ýChú ý
• Trong C++ có lệnh :• do• câu lệnh;• while (điều kiện);• Câu lệnh này về cơ bản giống với lệnh
Repeat ….. Until trong pascal nhưng lệnh này khác với repeat …until là nếu điều kiện đúng thì làm tiếp làm cho đến khi sai thì thoát
Bài tậpBài tập
• Sắp xếp dãy sau theo thứ tự tăng dần
• 12 11 9 10 8 7
Giải bài tậpGiải bài tập
11 9 10 8 712
L=0 R=5
Giải bài tậpGiải bài tập
11 9 10 8 127
L=0 R=5
Giải bài tậpGiải bài tập
8 9 10 11 127
L=0 R=5
Giải bài tậpGiải bài tập
• Ta có hai dãy con
8 9 10 11 127
L=0 R=3R=1 L=0
Giải bài tậpGiải bài tập
• Dãy được sắp xếp xong
8 9 10 11 127
Bài tập về nhàBài tập về nhà
• Bài 1: sắp xếp dãy sau theo thứ tự tăng dần
12 2 8 5 1 6 4 15
Bài 2: hãy làm lại bài tập trên khi thay cụm từ “tăng dần” bằng” giảm dần “
Đặt vấn đềĐặt vấn đề
• Theo bạn độ phức tạp của thuật toán phụ thuộc vào điều gì?
• Bạn hãy thử cho biết trường hợp xấu nhất và tốt nhất của thuật toán?và hãy cố gắng giải thích?
Đánh giá thuật toánĐánh giá thuật toán
• Độ phức tạp của thuật toán phụ thuộc vào việc chọn mốc
• Trường hợp tốt nhất của thuật toán là chọn được phần tử median(phần tử lớn hơn nửa số phần tử của mảng và nhỏ hơn hoặc bằng nửa số phần tử còn lại)
• Trường hợp xấu nhất là chọn trúng phần tử cực đại hoặc cực tiểu của mảng
Độ phức tạp của thuật toánĐộ phức tạp của thuật toán
Trường hợp Độ phức tạp
Tốt nhất n*log(n)
Trung bình n*log(n)
Xấu nhất n bình phương
Lời kếtLời kết
• Thuật toán sắp xếp nhanh rõ ràng đã giúp cho việc sắp xếp của chúng ta nhanh hơn nhưng nó vẫn còn nhược điểm
• Do vậy chúng ta sẽ tiếp tục nghiên cứu những thuật toán tiếp theo để tìm ra thuật toán tối ưu hơn
• Bài báo cáo đến đây là hết, chúc các bạn có một ngày cuối tuần vui vẻ