1. Trang chủ
  2. » Giáo Dục - Đào Tạo

đề cương ôn tập môn phân tích, thiết kế và đánh giá thuật toán

28 3K 14

Đ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

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 1,76 MB

Nội dung

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à cách thức, quy trình để hoàn thành 1 công việc cụ thể xác định nào đó b. Tính chất: - Tính đúng đắn: Thuật toán cần phải đảm bảo cho một kết quả đúng sau khi thực hiện đối với các bộ dữ liệu đầu vào. - 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 quyets 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ự 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ề 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: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán1 Độ 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 đó. Việc xếp đặt đựợc thực hiện dựa trên một hay nhiều trường nào đó, và các thông tin 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ó kích thước quá lớn và không thể lưu vào bộ nhớ trong để 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: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán2 Cài đặt bằng C: Độ phức tạp thuật toán:O(n 2 ) Ví dụ: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com 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(&a[vtmin],&a[i]; } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán3 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: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán4 Cài đặt thuật toán bằng C: Ví dụ: Độ 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 có 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: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com 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; } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán5 Độ phức tạp:O(n 2 ) Ví dụ: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán6 Cài đặt bằng C: 8. Trình bày thuật toán sắp xếp đổi chỗ (mô tả thuật toán, cài đặt, độ 9. ttphứ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 giữa a[i] và a[j] thì đổi chỗ a[i] và a[j] Cài đặt thuật toán: Sơ đồ thuật toán: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com 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]); } 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; } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán7 Ví dụ: Giả sử mảng ban đầu là int a[]={2, 6, 1, 19, 3, 12} thì thuật toán sẽ thực hiện như sau: i=0, j=2: 1, 6, 2, 19, 3, 12 i=1, j=2: 1, 2, 6, 19, 3, 12 i=2, j=4: 1, 2, 3, 19, 6, 12 i=3, j=5: 1, 2, 3, 6, 12, 19 Kết quả cuối cùng: 1, 2, 3, 6, 12, 19. 10. 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ụ) Mô tả thuật toán: - Thực hiện thủ tục buildheap để biến mảng A thành 1 heap - Vì A là 1 heap nên phần tử lớn nhất sẽ là A[1]. - Đổi chỗ A[0] và A[n-1], A[n-1] đã nằm đúng vị trí của nó và vì thế chúng ta có thể bỏ qua nó và coi như mảng bây giờ có kích thước là n-1 và quay trở lại xem xét phần đầu của mảng đã không là 1 heap nữa. - Vì A[0] có thể lỗi vị trí nên ta sẽ gọi thủ tục heaprify đối với nó để chỉnh lại mảng trở thành 1 heap. - Lặp lại các thao tác trên cho tới khi chỉ còn 1 phần tử trong heap khi đó mảng đã được sắp xếp. Độ phức tạp: O(n*log(n)) Cài đặt bằng C: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán8 11. Thế nào là giải thuật đệ quy? Ưu, nhược điểm của đệ quy? Cách khử đệ quy. Ví dụ. - Đệ quy là cách định nghĩa một đối tượng dựa trên chính nó, hay cụ thể hơn là trên các thể hiện cụ thể, đơn giản của nó. 1 hàm đệ quy là 1 hàm mà trong thân hàm có lời gọi tới chính nó (số lượng và vị trí không hạn chế). Ưu điểm của đệ quy: Chương trình ngắn gọn và đẹp hơn. Nhược điểm của đệ quy: Tốn vùng nhớ, thời gian truyền đối mục, thiết lập vùng nhớ trung gian và trả về kết quả. Cách khử đệ quy: - Khử đệ quy bằng vòng lặp - Khử đệ quy bằng đệ quy arsac Ví dụ: Hàm tính số fibonaci thứ n 12. 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ụ. Chiến lược vét cạn là thử tất cả các khả năng xem khả năng nào là nghiệm đúng của bài toán cần giải quyết. Ví dụ giải bài toán in ra tất cả các số nguyên tố 4 chữ số abcd sao cho ab=cd được thực hiện bằng thuật toán vét cạn như sau: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com void heapsort(int *A, int n) { int i; buildheap(A, n); for(i=n-1;i>0;i ) { swap(A[0],A[i]); heaprify(A,0,i-1); } } int fb(int n) { if(n==1||n=2) return 1; else return fb(n-1)+fb(n-2); } 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); Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán9 Ưu điểm: Tìm ra nghiệm 1 cách chắc chắn đầy đủ, có thể áp dụng cho mọi loại bài toán. Nhược điểm: Số bước tính toán lớn và do vậy sẽ tốn thời gian để tìm nghiệm bài toán. 13. Thế nào là chiến lược quay lui? Ưu, nhược điểm của quay lui? Ví dụ. Chiến thuật quay lui tương tự như chiến lược vét cạn song có 1 điểm khác: nó lưu lại các trạng thái trên con đường đi tìm nghiệm của bài toán, nếu tới 1 bước nào đó không thể tiến hành tiếp, thuật toán sẽ quay lui về trạng thái trước đó và lựa chọn các khả năng khác. Ưu điểm: Thuật toán tìm ra được tất cả các nghiệm của bài toán 1 cách dễ dàng, có thể áp dụng cho các bài toán với kích thước input nhỏ. Nhược điểm: Tốn nhiều thời gian cho phép thử nghiệm. Ví dụ: Sinh các dãy nhị phân độ dài N (N<=20) 14. Thế nào là chiến lược chia để trị? Ưu, nhược điểm của chia để trị? Ví dụ. Thuật toán chia để trị thực hiện chia bài toán thành các bài toán nhỏ hơn, giải các bài toán nhỏ hơn đó, sau đó kết hợp nghiệm của các bài toán nhỏ hơn đó lại thành nghiệm của bài toán ban đầu. Ưu điểm: Số lượng công việc để tìm nghiệm bài toán sẽ giảm đi nên tốc độ thực hiện thuật toán nhanh. Nhược điểm: Khó tách hợp lý bài toán thành các bài toán con và việc kết hợp lời giải của các bài toán con sẽ khó thực hiện. Ví dụ: Thuật toán tính a n : 15. 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ụ) Mô tả thuật toán: thuật toán được thực hiện qua 3 bước: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com void try(int k) { int j; if(k==n) in_nghiem(); else for(j=0;j<=1;j++) { x[k]=j; try(k+1); } } int power(int a,int n) { if(n==0) return 1; else { int t=power(a,n/2); if(n%2==0) return t*t; else return a*t*t; } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán10 [...]... http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 28 Câu 3: Xây dựng, cài đặt và đánh giá thuật toán in ra tất cả các số nguyên dương có k chữ số mà tổng các chữ số của nó không là số hoàn hảo Số a là số hoàn hảo nếu tổng các ước dương (không kể a) bằng chính a Ví dụ a=6=1+2+3 Câu 4: Trình bày thuật toán nhân dãy ma trận Áp dụng tìm số phép nhân... doduchung2008@gmail.com Tác giả: } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 13 Độ phức tạp:O(log(n)) 17 Trình bày chiến lược quy hoạch động?Ưu, nhược điểm? Ví dụ Quy hoạch động là 1 phương pháp giải bài toán bằng cách kết hợp các lời giải cho các bài toán con của nó giống như phương pháp chia để trị Quy hoạc động được áp dụng khi các bài toán con của bài toán ban đầu không độc lập với nhau,... http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 15 Nếu có n ma trận thì sẽ có n+1 số nguyên là kích thước của chúng và sẽ có tổ hợp chập 2 của n phần tử các xâu con (mỗi xâu tương ứng với mỗi thứ tự của các dấu ngoặc) giữa 1 và n nên chỉ cần dùng O(n2) không gian nhớ để lưu kết quả các bài toán con 20 Trình bày chiến lược tham lam.Ưu, nhược... doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 22 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 Với ma trận A có kích thước p x q và B có kích thước q x r Người ta có phép nhân 2 ma trận đó để được ma trận C có kích thước p x r Mỗi phần tử của ma trận C được tính theo công thức: q... Đức Hùng Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 25 printf("\n"); printf("So phep nhan can thuc hien it nhat: %d\n",f[0][n-1]); printf("Cac buoc thuc hien: "); trace(0,n-1,t); getch(); } Với ma trận như đề bài, ta được kết quả: 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... bài toán chính là C[n][m] C[i − 1][ j − 1] + 1(1) C[i ][ j ] =  max(C[i − 1][ j ], C[i ][ j − 1])(2) Công thức truy hồi Trường hợp 1 là khi X[i] = Y[j], ngược lại là trường hợp 2 Bước 3: Xây dựng thuật toán tìm dãy con chung dài nhất của 2 dãy X[1 n] và Y[1 m] Tác giả: Đỗ Đức Hùng Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật. .. cho các bài toán tối ưu, trong các bài toán đó thường có nhiều nghiệm, mỗi nghiệm có 1 giá trị được lượng giá bằng cách sử dụng 1 hàm đánh giá tùy thuộc vào các bài toán cụ thể và yêu cầu của bài toán là tìm ra 1 nghiệm có giá trị của hàm đánh giá là tối ưu Ưu điểm: Dễ cài đặt, tốc độ thực hiện bài toán nhanh Nhược điểm: Tốn bộ nhớ do cần lưu lại kết quả của bài toán con 18 Trình bày bài toán tìm dãy.. .Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 11 - Selection: Chọn 1 phần tử gọi là phần tử quay (pivot) - Partition (phân hoạch): đặt tất cả các phần tử của mảng < phần tử quay sang bên trái và ngược lại là sang bên phải phần tử quay Phần tử quay trở thành phần tử có vị trí đúng trong mảng... doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán 27 a[d+1]='\0'; } void main() { char a[100],b[100],kq[100]; int c[100][100]; printf("Nhap xau thu nhat: "); scanf("%s",&a); chuanhoa(a); printf("Nhap xau thu 2: "); scanf("%s",&b); chuanhoa(b); printf("Do dai xau con chung lon nhat: %d\n",dodai(a,b,c)); kqua(kq,a,b,c); printf("Xau con chung dai nhat: %s\n",kq); getch(); } Cấu trúc đề. .. for(i=0;i . swap(&a[vtmin],&a[i]; } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán3 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. doduchung2008@gmail.com Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán4 Cài đặt thuật toán bằng C: Ví dụ: Độ 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. } } Đề cương ôn tập môn Phân tích, thiết kế và đánh giá thuật toán5 Độ phức tạp:O(n 2 ) Ví dụ: Tác giả: Đỗ Đức Hùng. Website: http://doduchung.co.cc/ Mail: doduchung2008@gmail.com Đề cương ôn tập

Ngày đăng: 03/02/2015, 15:43

TỪ KHÓA LIÊN QUAN

w