1. Trang chủ
  2. » Biểu Mẫu - Văn Bản

Đề cương PTTK & ĐGTT potx

38 189 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Trường Đại Học Hàng Hải Việt Nam Khoa Công Nghệ Thông Tin ĐỀ CƯƠNG ÔN TẬP MÔN HỌC: PHÂN TÍCH THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TOÁN Sinh viên: Đỗ Đức Hùng Lớp: CNT50ĐH1 MSV: 37172 Mail: doduchung2008@gmail.com Web: http://doduchung.c.cc Hải Phòng, 21/06/2011 Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 1 MỤC LỤC I. LÝ THUYẾT 3 1. Thuật toán là gì? Tính chất, cách biểu diễn, độ phức tạp? 3 2. Thế nào là bài toán tìm kiếm? (định nghĩa, đầu vào, đầu ra, mục đích, …) 3 3. Trình bày thuật toán tìm kiếm tuyến tính (các bước, sơ đồ thuật toán, độ phức tạp, …) 4 4. Bài toán sắp xếp là gì? (định nghĩa, đầu vào, đầu ra, mục đích, …) 4 5. Trình bày thuật toán sắp xếp chọn trực tiếp (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 5 6. Trình bày thuật toán sắp xếp chèn (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 6 7. Trình bày thuật toán sắp xếp nổi bọt (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 8 8. Trình bày thuật toán sắp xếp đổi chỗ (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 9 9. Trình bày thuật toán sắp xếp vun đống (heap-sort) (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 10 10. Thế nào là giải thuật đệ quy? Ưu, nhược điểm của đệ quy? Cách khử đệ quy. Ví dụ. 11 11. Thế nào là chiến lược vét cạn? Ưu, nhược điểm của vét cạn? Ví dụ. 12 12. Thế nào là chiến lược quay lui? Ưu, nhược điểm của quay lui? Ví dụ 12 13. Thế nào là chiến lược chia để trị? Ưu, nhược điểm của chia để trị? Ví dụ. 13 14. Trình bày thuật toán sắp xếp nhanh (Quick-Sort)? (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 13 15. Trình bày thuật toán tìm kiếm nhị phân? (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) 15 16. Trình bày chiến lược quy hoạch động? Ưu, nhược điểm? Ví dụ. 15 17. Trình bày bài toán tìm dãy con chung dài nhất. 16 18. Trình bày bài toán nhân ma trận. 17 19. Trình bày chiến lược tham lam. Ưu, nhược điểm? Ví dụ. 18 20. Trình bày bài toán sắp lịch các sự kiện. 18 II. Bài tập: 19 1. Cho cấu trúc sinh viên gồm các trường: tên, tuổi, địa chỉ, … Khai báo cấu trúc trên để có thể lưu được danh sách sinh viên theo mảng. Cài đặt hàm sắp xếp mảng sinh viên tăng dần (hoặc giảm dần) theo tuổi, cùng tuổi theo tên. Áp dụng giải thuật sắp xếp chọn (hoặc chèn, hoặc nổi bọt, hoặc đổi chỗ, …) 19 2. Cho cấu trúc nhân viên gồm các trường: tên, năm sinh, hệ số lương, … Khai báo cấu trúc nhân viên trên ở dạng danh sách liên kết. Cài đặt hàm sắp xếp danh sách nhân viên tăng dần (hoặc giảm dần) theo năm sinh, cùng năm sinh theo tên. Áp dụng giải thuật sắp xếp chọn (hoặc chèn, hoặc nổi bọt, hoặc đổi chỗ, …) 21 Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 2 3. Cho cấu trúc mặt hàng gồm: mã số, loại, tên, Khai báo cấu trúc mặt hàng ở trên (để lưu ở dạng mảng, hoặc dạng danh sách liên kết đơn). Cài đặt hàm tìm kiếm mặt hàng nào đó theo mã (hoặc tên, …). Nêu rõ giải thuật áp dụng. 23 4. Cài đặt và đánh giá độ phức tạp thuật toán in ra hoán vị của n số nguyên từ 1 đến n. Các hoán vị được in ra phải thỏa mãn một tiêu chuẩn nào đó, ví dụ: tổng 2 phần tử liên tiếp của hoán vị là số nguyên tố, hoặc tổng 2 phần tử liên tiếp của hoán vị là số hoàn hảo, … 25 5. Cài đặt và đánh giá độ phức tạp thuật toán in ra tất cả các xâu nhị phân có độ dài k. Xâu được in ra phải thỏa mãn một điều kiện nào đó, ví dụ: biểu diễn thập phân của xâu đó là số hoàn hảo, hoặc số nguyên tố, hoặc xâu đó không có 3 phần tử liên tiếp giống nhau, hoặc xâu đó phải có 2 ký tự liền kề không giống nhau, … 27 6. Cài đặt và đánh giá độ phức tạp thuật toán in ra số nguyên có k chữ số. Số được in ra phải thỏa mãn một điều kiện nào đó, ví dụ: số đó có tổng các chữ số là số nguyên tố, hoặc số hoàn hảo, hoặc các chữ số phải khác nhau, … 28 7. Trình bày thuật toán nhân dãy ma trận A. Tìm số phép nhân ít nhất để nhân các ma trận có kích thước nào đó, ví dụ: 6x5, 5x7, 7x8, 8x3, 3x5 29 8. Trình bày thuật toán tìm xâu con chung dài nhất của hai xâu. Áp dụng tìm xâu con chung dài nhất của hai xâu con sau: “CDADDADC”, “ACDDCCA” 32 III. Cấu trúc đề thi học kỳ: (mỗi câu 2/10 điểm) 36 Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 3 I. LÝ THUYẾT 1. Thuật toán là gì? Tính chất, cách biểu diễn, độ phức tạp? a. Thuật toán là một hệ thống đầy đủ và rõ ràng các quy tắc sao cho sau một số hữu hạn bước thực hiện thì thu được mục tiêu đề ra . b. Tính chất: - Tính đúng đắn: Nếu áp dụng cùng một thuật toán với cùng một dữ liệu đầu vào thì phải cho cùng một kết quả. - Tính dừng: Thuật toán cần phải đảm bảo sẽ dừng sau 1 số bước hữu hạn bước. - Tính xác định: Các bước của thuật toán phải được hiểu rõ ràng, cụ thể, tránh gây nhập nhằng hoặc nhầm lẫn đối với người đọc và hiểu, cài đặt thuật toán. - Tính hiệu quả: thuật toán được xem là hiệu quả nếu như nó có khả năng giải quyết hiệu quả bài toán đặt ra trong thời gian hoặc các điều kiện cho phép trên thực tế đáp ứng được yêu cầu của người dùng - Tính phổ quát: thuật toán có thể giải quyết được 1 lớp các bài toán tương tự nhau. c. Cách biểu diễn: có 2 cách biểu diễn thuật toán: - Mô tả các bước thực hiện của thuật toán. - Sử dụng sơ đồ giải thuật d. Độ phức tạp: Các tiêu chí đánh giá thuật toán: + Thuật toán đơn giản, dễ hiểu, dễ cài đặt. + Dựa vào thời gian thực hiện và tài nguyên mà thuật toán sử dụng để thực hiện trên các bộ dữ liệu. 2. Thế nào là bài toán tìm kiếm? (định nghĩa, đầu vào, đầu ra, mục đích, …) Tìm kiếm là 1 trong những vấn đề thuộc lĩnh vực nghiên cứu của ngành khoa học máy tính và được ứng dụng rộng rãi trên thực tế. Chúng ta quan tâm đến bài toán tìm kiếm trên 1 mảng, hoặc 1 danh sách các phần tử cùng kiểu Kết quả tìm kiếm là vị trí của phần tử thỏa mãn điều kiện tìm kiếm: có trường khóa bằng với 1 giá trị khóa cho trước. Từ vị trí này chúng ta có thể truy cập tới các thông tin khác được chứa trong trường dữ liệu của phần tử tìm thấy. Nếu kết quả là không tìm thấy thì giá trị trả về Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 4 sẽ được gán cho một giá trị đặc biệt nào đó tương đương với việc không tồn tại phần tử nào có vị trí đó: chẳng hạn – 1 với mảng và NULL với danh sách liên kết. Có nhiều thuật toán tìm kiếm như: tìm kiếm vét cạn, tìm kiếm tuần tự, tìm kiếm nhị phân, v.v.v v. 3. Trình bày thuật toán tìm kiếm tuyến tính (các bước, sơ đồ thuật toán, độ phức tạp, …) Các bước: - Duyệt qua các phần tử của mảng - Nếu tìm thấy phần tử có khóa bằng khóa tìm kiếm thì trả về vị trí của phần tử đó. Ngược lại không tìm thấy thì trả về -1 Sơ đồ thuật toán: Độ phức tạp thuật toán trong trường hợp trung bình và tồi nhất: O(n). Trong trường hợp tốt nhất thuật toán có độ phức tạp O(1). 4. Bài toán sắp xếp là gì? (định nghĩa, đầu vào, đầu ra, mục đích, …) Sắp xếp là 1 quá trình xếp đặt các bản ghi của 1 file theo một thứ tự nào đó. Cơ sở của việc xếp đặt này được gọi là khóa sắp xếp (key). Hầu hết các thuật toán sắp xếp được gòi là các thuật toán sắp xếp so sánh: chúng sử dụng 2 thao tác cơ bản là so sánh và đổi chỗ (swap) các phần tử cần sắp xếp. Các bài toán sắp xếp đơn giản được chia thành: sắp xếp trong (dữ liệu cần sắp xếp được lưu đầy đủ trong bộ nhớ trong để thực hiện thuật toán sắp xếp), sắp xếp ngoài (Dữ liệu sắp xếp Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 5 có kích thước quá lớn và không thể lưu vào bộ nhớ trong mà phải lưu ở các bộ nhớ ngoài như đĩa từ, băng từ, trống từ, để sắp xếp, các thao tác truy cập dữ liệu cũng mất nhiều thời gian hơn), sắp xếp gián tiếp (khi kích thước các bản ghi lớn và việc hoán đổi các bản ghi là rất tốn kém) 5. Trình bày thuật toán sắp xếp chọn trực tiếp (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) Mô tả thuật toán: Tìm phần tử lớn nhất (nhỏ nhất), đặt nó vào đúng vị trí và sau đó sắp xếp phần còn lại của mảng. Sơ đồ thuật toán: Cài đặt bằng C: Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 6 void selection_sort(int a[],int n) { int i,j,vtmin; for(i=0;i<n-1;i++) { vtrimin=i; for(j=i+1;j<n;j++) if(a[j]<a[vtmin]) vtmin=j; swap(&ap[vtmin],&a[i]; } } Độ phức tạp thuật toán: O(n 2 ) Ví dụ: 6. Trình bày thuật toán sắp xếp chèn (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) Thuật toán dựa vào thao tác chính là chèn mỗi khóa vào một dãy con đã được sắp xếp của dãy cần sắp xếp. Phương pháp này thường được sử dụng trong việc sắp xếp các cây bài trong quá trình chơi bài. Sơ đồ thuật toán: Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 7 Cài đặt thuật toán bằng C: void insertion_sort(int a[],int n) { int i,j,temp; for(i=1;i<n;i++) { j=i; temp=a[i]; while(j>0&&temp<a[j-1]) { a[j]=a[j-1]; j=j-1; } a[j]=temp; } } Ví dụ: Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 8 Độ phức tạp: O(n 2 ) 7. Trình bày thuật toán sắp xếp nổi bọt (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) Thuật toán dựa trên việc so sánh và đổi chỗ 2 phần tử ở kề nhau: - Duyệt qua danh sách các bản ghi cần sắp xếp theo thứ tự, đổi chỗ 2 phần tử kề nhau nếu chúng không đúng thứ tự. - Lặp lại điều này cho tới khi không có 2 bản ghi nào sai thứ tự. Sơ đồ thuật toán: Độ phức tạp: O(n 2 ) Ví dụ: Đ Ề CƯƠNG PT TK && ĐGTT  Tác giả: Đỗ Đức Hùng. Web: http://doduchung.co.cc Mail: doduchung2008@gmail.com |Trang 9 Cài đặt bằng C: void bubble_sort(int a[],int n) { int i,j; for(i=n-1;i>=0;i ) for(j=1;j<=i;j++) if(a[j-1]>a[j]) swap(&a[j-1],a[j]); } void bubble_sort2(int a[],int n) { int i,j; for(i=0;i<n;i++) for(j=n-1;j>i;j ) if(a[j-1]>a[j]) swap(&a[j-1],a[j]); } 8. Trình bày thuật toán sắp xếp đổi chỗ (mô tả thuật toán, cài đặt, độ phức tạp, ví dụ) Mô tả thuật toán: Bắt đầu xét phần tử đầu tiên a[i] với i=0, ta xét tất cả các phần tử đứng sau a[i] gọi là a[j] với j nằm trong đoạn [i+1; n-1]. Với mỗi cặp a[i], a[j] đó, nếu có sự sai khác về vị trí giữa a[i] và a[j] thì đổi chỗ a[i] và a[j] Cài đặt thuật toán: void exchange_sort(int a[],int n) { int i,j,tam; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[j]<a[i]) { tam=a[j]; a[j]=a[i]; a[i]=tam; } } [...]... r, int pivotindex) { int v=a[pivotindex],i,j; hoandoi(&a[pivotindex],&a[r]); i=l; for(j=l;j . i,j,temp; for(i=1;i<n;i++) { j=i; temp=a[i]; while(j>0&&temp<a[j-1]) { a[j]=a[j-1]; j=j-1; } a[j]=temp; } } Ví dụ: Đ Ề CƯƠNG PT TK && ĐGTT  . sau: for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) for(d=0;d<=9;d++) if(ngto(a*1000+b*100+c*10+d) && (10*a+b==10*c+d) printf("%d%d%d%d",a,b,c,d);. v=a[pivotindex],i,j; hoandoi(&a[pivotindex],&a[r]); i=l; for(j=l;j<r;j++) if(a[j]<=v) { hoandoi(&a[j],&a[i]); i++; } hoandoi(&a[i],&a[r]); return i;

Ngày đăng: 27/07/2014, 23:22

Xem thêm: Đề cương PTTK & ĐGTT potx

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w