3. 3.Tính xác định: Các bước của thuật toán phải được xác định một cách chính xác. 4 . Tính chính xác : Thuật toán phải tạo những giá trị đầu ra chính Xác ứng với mỗi tập giá trị đầu vào. 5. Tính hữu hạn: Thuật toán phải tạo các giá trị đầu ra mong muốn theo một số hữu hạn bước ứng với mỗi tập giá trị đầu vào. 6 . Tính hiệu quả: Mỗi bước của thuật toán phải được thực hiện một cách chính xác, và trong một khoảng thời gian hữu hạn. 7. Tính tổng quát: Thủ tục phải áp dụng được cho tất cả các bài toán có dạng như yêu cầu chứ không chỉ cho một tập đặc biệt các giá trị đầu vào. Ví dụ: Các hàm sau có và thiếu những đặc tính nào của Thuật toán Int gapdoi(int n) void chia(int n) void tong(int n) { while n>0 { while n>=0 { int sum=0; n=2n; {int m=1/n; while (int i<10) return(n); n=n-1; {sum+=i;} }; } } }
4.
5. b. Thuật toán tìm kiếm nhị phân: thuật toán này được dùng khi mảng(dãy) đã được sắp xếp(tăng dần). int timkiemnhiphan(int x; billy[100]; int n) { int i= 0 ;//i là điểm mút trái của khoảng tìm kiếm int j= n-1 ;//j là điểm mút phải của khoảng tìm kiếm while i<j { int m= (i+j)/2; if x>billy[m] i=m+1; else j=m; } if x=billy[i] cout<<“ vị trí của ”<<x<<“ là: “<< i; else cout<<“ không tìm thấy “<<x<<” trong mảng”; }
6.
7. b) Sắp xếp kiểu chèn(insertion sort) Void insertion sort(int a[100]; int n) { for(int j=1; j<=n-1; j++) { int i=0; while(a[j] > a[i]) //so sánh a[j] với các phần tử { // trước nó trong dãy i++; } int m=a[i]; for(int k=0; k<=j-i-1; k++) { a[j-k]=a[j-k-1]; // chèn phần tử a[j] vào } // vị trí i a[i]=m; } }
8. *Thuật toán tham lam đổi tiền Bài toán đổi tiền đặt ra vấn đề đổi một số lượng tiền m thành các loại tiền xu sao cho số lượng các đồng xu là ít nhất. int change(int a[100]; int n; int m)// mãng sắp sếp theo thứ tự giảm dần { // n là số các loại tiền(quarter, penny, nikel… int k=0; // m là số tiền cần đổi for(int i=0; i<=n-1; i++) // a[i] là mệnh giá đồng tiền thứ i { while(a[i]<=m) { k++; m=m-a[i]; } } return(k); }
9.
10. D. Các Thuật Toán Đệ Quy Định nghĩa: Một thuật toán được gọi là đệ quy nếu nó giải bài toán bằng cách rút gọn liên tiếp bài toán gốc thành bài toán cũng như vậy nhưng có đầu vào nhỏ hơn. Ví dụ 1: Thuật toán đệ quy tính a n float luythua(float a; int n) { if (n==0) return(0); else return(a* luythua(a,n-1) ); } hoặc float luythua(float a; int n) { if (n==0) float ketqua=0; else ketqua=a* luythua(a,n-1) ; return(ketqua); }
11. Ví dụ 2: Thuật toán đệ quy tính n! long giaithua(int n) { if (n==0) return (1); return( n* giaithua(n-1) ); } D. Độ phức tạp của thuật toán Độ phức tạp tính toán của thuật toán Độ phức tạp thời gian của thuật toán Độ phức tạp về không gian của thuật toán(bộ nhớ cần thiết)