Bài giảng Cấu trúc dữ liệu và thuật toán - Phần 1: Giới thiệu về thuật toán - Chương 1, Phần 1: Khái niệm cơ bản - Nguyễn Duy Hiệp

1/10/2011  
Phần I – Giới thiệu về  
Thuật toán  
Chương 1.1  
KHÁI NIỆM CƠ BẢN  
Nội dung  
1.1 Thuật toán là gì ?  
• Thuật toán:  
• thủ tục để thực hiện một nhiệm vụ cụ thể  
• 1.1. Thuật toán là gì?  
• ý tưởng nằm sau các chương trình máy tính.  
• Thuật toán phải giải quyết bài toán tổng quát, và được định  
nghĩa rõ ràng.  
• 1.2 Tính chất của thuật toán  
• 1.2 .1 Tính chính xác  
• 1.2.2 Tính hiệu quả  
• Một thuật toán giải bài toán đặt ra là một thủ tục xác định bao  
gồm một dãy hữu hạn các bước cần thực hiện để thu được  
đầu ra cho một đầu vào cho trước của bài toán.  
• 1.3 Chứng minh thuật toán đúng  
• 1.4 Biểu diễn thuật toán  
Đầu ra  
Đầu vào  
Các bước  
thực hiện  
1
1/10/2011  
1.1 Thuật toán là gì ?  
1.2.1 Tính chính xác  
Bài toán: sắp xếp  
• Đầu vào: một dãy gồm n khóa  
• Đầu ra: một hoán vị có thứ tự của các khóa đầu vào trong đó  
• Thuật toán phải cho đầu ra mong muốn ứng với bất cứ đầu  
vào hợp lệ nào của bài toán.  
• Tính chính xác không phải lúc nào cũng dễ thấy!  
a1,a2 ,..,an  
a'1 a'2 .. a'n  
VD. Bài toán chọn lịch xem phim  
• Đầu vào: Một tập L gồm thời gian chiếu trong ngày của n bộ  
Trường hợp cụ thể của bài toán  
• {14, 45, 68, 24, 54, 34}  
• {Mike, Bob, Sally, Jill, Jan}  
phim  
• Đầu ra: Tập con của L chứa số bộ phim lớn nhất có thể xem  
(không được chồng nhau về thời gian)  
Up in the air  
Sherlock holmes  
One  
P1  
• Chúng ta chỉ quan tâm đến các thuật toán chính xác và hiệu  
quả, và dễ cài đặt  
Avatar  
Angel and demon  
Up  
Madagasca 2  
P2  
P3  
Alice in the wonderland  
1.2.1 Tính chính xác  
1.2.1 Tính chính xác  
• Thuật toán 1. Chọn bộ phim sớm nhất trong L mà không trùng  
với các bộ phim đã chọn trước đó. Lặp lại cho đến khi không  
thể chọn thêm.  
• Thuật toán 3. Duyệt toàn bộ: duyệt 2n tập con của n bộ phim  
trong L. Chọn ra tập con nào có số lượng phần tử lớn nhất.  
Đảm bảo thu được kết quả tối ưu  
Thuật toán chạy rất chậm, vd n =20 thì số tập con là 220  
• Thuật toán 4. Thuật toán tối ưu: sắp xếp các lịch chiếu phim  
theo thứ tự không giảm thời gian kết thúc. Lần lượt xem xét  
các phim trong danh sách đã sắp xếp, bổ sung vào danh sách  
xem bộ phim đang xét nếu nó không chồng lên các bộ phim đã  
có trong danh sách xem.  
• Thuật toán 2. Chọn bộ phim có thời gian chiếu ngắn nhất  
trong L mà không trùng với các bộ phim đã chọn trước. Lặp lại  
cho đến khi không chọn thêm được.  
• Có những bài toán mà không tồn tại thuật toán chính xác để  
giải!  
2
1/10/2011  
1.2.1 Tính chính xác  
1.2.2 Tính hiệu quả  
• Phân biệt giữa thuật toán chính xác và không chính xác: đưa  
ra một ví dụ thuật toán mà thuật toán cho kết quả sai (phản ví  
dụ).  
“Tại sao không chỉ sử dụng mỗi siêu máy tính? ”  
• Siêu máy tính chỉ cho người giàu và những người quá  
ngốc để có thể thiết kế một thuật toán hiệu quả!  
• Chứng minh tính đúng đắn của thuật toán: khó khăn hơn  
nhiều.  
• Thuật toán nhanh hơn chạy trên các máy tính chậm  
hơn sẽ thắng trong trường hợp dữ liệu đầu vào đủ lớn.  
• Bài tập. Tìm các phản ví dụ cho các thuật toán giải bài toán  
hành trình du lịch tối ưu.  
Bài toán cái túi  
Chọn đồ vật có giá trị cao trước  
• Đầu vào: n đồ vật, mỗi đồ vật i có một trọng lượng wi và một  
giá trị ci. Một cái túi có thể chứa các đồ vật với trọng lượng tối  
đa là b  
• Sắp xếp các đồ vật theo thứ tự giảm về giá trị.  
• Lần lượt xét các đồ theo thứ tự này, cho đồ vật đang xét vào  
túi nếu nó còn có thể ch
• Đầu ra: Cách chất các đồ vật vào túi sao cho trọng lượng tối đa  
không vượt quá b, và tổng giá trị các đồ vật trong túi là lớn  
nhất.  
ꢄ
ꢄ
∑
ꢀ ꢁ ꢅꢆꢇ ꢂꢃ ꢈ ꢉ  
ꢊ ꢁ ꢋ ꢌꢃ → ꢍꢎꢏ  
ꢅꢆꢇ  
• Xây dựng thuật toán chất các đồ vào túi ?  
3
1/10/2011  
Chọn đồ vật trọng lượng nhỏ trước  
Chọn đồ vật theo tỉ lệ ci/wi  
• Sắp xếp các đồ vật theo thứ tự tăng trọng lượng  
• Lần lượt xét các đồ vật theo thứ tự này, chọn đồ vật đang xét  
vào túi nếu nó vẫn có thể chứa thêm  
• Sắp xếp các đồ vật theo thứ tự giảm của tỉ lệ giá trị/ trọng  
lượng  
ꢐꢇ  
ꢐꢓ  
ꢐꢔ  
ꢐꢕ  
ꢒ
ꢒ
… ꢒ  
ꢑꢇ  
ꢑꢓ  
ꢑꢔ  
ꢑꢕ  
• Lần lượt xét các đồ vật theo  
thứ tự này, chọn đồ vật đang  
xét vào túi nếu nó vẫn có  
thể chứa thêm  
Tìm phản ví dụ ?  
1.3 Chứng minh tính đúng đắn  
Chứng minh thuật toán sai bằng  
cách chỉ ra một phản ví dụ  
• Thuật toán được định nghĩa đệ quy: Thuật toán được định  
nghĩa lại bằng chính nó (với kích thước bài toán nhỏ hơn)  
• Tìm trong các trường hợp dữ liệu  
nhỏ  
1
ꢖếꢘ ꢖ ꢁ 0  
ꢖ! ꢁ ꢗ  
ꢖ ꢙ ꢖ ꢚ 1 ! ꢖếꢘ ꢖ ꢛ 0  
• Các ví dụ mà sát với các tiêu chuẩn  
lựa chọn của thuật toán  
• Chứng minh tính đúng đắn của thuật toán  
đệ quy bằng phương pháp quy nạp  
• Các ví dụ của các trường  
hợp cực trị (lớn nhất, nhỏ nhất …)  
ꢕ
ꢖꢜꢖ ꢝ 1ꢞ  
ꢋ ꢃ ꢁ  
2
Không tìm được phản ví dụ không có nghĩa thuật toán là đúng!  
ꢅꢆꢇ  
4
1/10/2011  
1.4 Biểu diễn thuật toán  
• Cần biểu diễn các bước thực hiện tuần tự của thuật toán một  
cách cụ thể.  
• Biểu diễn bằng:  
• Ngôn ngữ tự nhiên  
• Giả ngôn ngữ (pseudocode)  
• Lưu đồ  
• Ngôn ngữ lập trình cụ thể (C/C++, java,…)  
5
pdf 5 trang Thùy Anh 19720 Free
Bạn đang xem tài liệu "Bài giảng Cấu trúc dữ liệu và thuật toán - Phần 1: Giới thiệu về thuật toán - Chương 1, Phần 1: Khái niệm cơ bản - Nguyễn Duy Hiệp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_cau_truc_du_lieu_va_thuat_toan_phan_1_gioi_thieu_v.pdf