1. Trang chủ
  2. » Công Nghệ Thông Tin

chuong 7. giai thuat

7 843 3

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 86,5 KB

Nội dung

Chương 7 - Giải thuật xử lý thông tin CHƯƠNG 7. GIẢI THUẬT 7.1. KHÁI NIỆM BÀI TOÁN VÀ GIẢI THUẬT Trước khi xem xét đặc trưng của “bài toán” ta xét một số ví dụ. Ví dụ 1. Bài toán kiểm tra tính nguyên tố. Cho: Số nguyên dương N; Cần biết: N có là số nguyên tố hay không? Ví dụ 2. Bài toán quản lý hồ sơ cán bộ. Cho: Hồ sơ gốc của các cán bộ trong cơ quan Cần biết: Bảng thống kê, phân loại cán bộ theo trình độ văn hoá Qua các ví dụ trên, ta thấy các bài toán được cấu tạo bởi hai thành phần cơ bản:  Thông tin vào (input): cái cho trước  Thông tin ra (output): cái cần tìm Như vậy, việc cho một bài toán có nghĩa là mô tả rõ input và output của nó. Cho bài toán nghĩa là làm rõ câu hỏi "Có các dữ kiện gì và phải làm gì?" nhưng không cho biết "Phải làm thế nào". Việc giải bài toán có nghĩa là xuất phát từ input dùng một số hữu hạn số lần thực hiện các thao tác thích hợp để tìm được output theo yêu cầu của bài toán đã đề ra. Lưu ý rằng trong toán học có một xu hướng nghiên cứu định tính các bài toán. Theo xu hướng này, khi xem xét các bài toán, người ta chỉ cần chứng tỏ sự tồn tại của output khi cho input và nếu có thể, xét xem có bao nhiêu "lời giải" và nghiên cứu tính chất của chúng. Trong các nghiên cứu như vậy, nhiều khi ta không cần tìm ra lời giải một cách tường minh nhưng bằng cách dùng các công cụ toán học khác nhau một cách thích hợp ta vẫn có thể chứng minh chặt chẽ các điều khẳng định liên quan đến lời giải. Chẳng hạn, định lý của giải tích khẳng định rằng nếu hàm f(x) liên tục trên đoạn [a, b] và f(a). f(b)<0 thì tồn tại điểm c nằm giữa a và b sao cho f’(c) = 0. Sự tồn tại lời giải theo nghĩa này không luôn cho ta cách thức khả thi để tìm ra lời giải. Ở đây, ta sẽ quan niệm việc giải bài toán là việc xác định tường minh output theo input bằng một quá trình có thể thực hiện một cách hiệu quả. Đó chính là nội dung cơ bản của lý thuyết tính toán. Theo lý thuyết tính toán, một quá trình gồm một dãy hữu hạn các thao tác có thể thực hiện được sắp xếp theo một trình tự xác định dùng để giải một bài toán được gọi là một giải thuật (algorithm). Như vậy, khác với quan niệm về việc giải một bài toán theo toán học truyền thống, việc giải bài toán theo quan niệm của tin học có nghĩa là chỉ ra một giải thuật tường minh mà về nguyên tắc, các thao tác này có thể "giao cho máy tính làm được". Quan niệm như vậy về việc giải bài toán là cốt lõi để ta có thể chuyển giao công việc đó cho máy tính. Bản thân máy tính là một thiết bị vật lý vô tri vô giác, do đó với thể hiện vật lý cụ thể, máy tính chỉ có thể thực hiện được các thao tác rất đơn giản (tất nhiên với tốc độ rất nhanh). Ví dụ, cho hai số nguyên dương a, b. Cần xây dựng giải thuật để tìm ước số chung lớn nhất (UCLN) của a và b. Dưới đây là giải thuật Euclid đề xuất cho bài toán nêu trên dựa trên một tính chất hiển nhiên là : Nếu a = b thì chính b là USCLN của a và b. Ngược lại thì USCLN(a,b) = USCLN(b-a, a) nếu a < b và USCLN(a,b) = USCLN(b, a-b) nếu a>b. 52 Chương 7 - Giải thuật xử lý thông tin Bài toán  input : a, b nguyên dương  output: UCLN của a và b Giải thuật Euclid Bước 1: Nhập a và b Bước 2: Nếu a = b thì lấy giá trị chung này làm USCLN rồi kết thúc. Bước 3: Nếu a> b thì bớt a đi một lượng là b rồi chuyển bước 5. Bước 4: Bớt b đi một lượng là a rồi quay trở lại bước 2. Bước 5: Kết thúc. Các thao tác bao gồm:  Phép gán trị: xây dựng các giá trị của đối tượng (ví dụ bớt a đi một lượng là b hay cho USCLN là a).  Phép dừng, kết thúc quá trình xử lý.  Phép chuyển có hoặc không có điều kiện cho phép thực hiện tiếp từ một bước nào đó ví dụ sau bước 2 quay trở lại bước 1. Ở cuối bước 3 của giải thuật trên ta gặp thao tác "trở lại bước 2". Trong trường hợp này bộ xử lý sẽ chuyển sang thực hiện bước 2 của giải thuật. Khi diễn đạt giải thuật ta ngầm qui định rằng nếu không gặp phép chuyển điều khiển thì bộ xử lý sẽ thực hiện tuần tự: sau bước thứ i sẽ chuyển sang bước thứ i + 1. Như vậy bước 3 nếu không quay về bước 2 thì sẽ thực hiện tiếp bước 4. 7.2. MỘT SỐ ĐẶC TRƯNG CỦA GIẢI THUẬT Người ta thường liệt kê các đặc trưng sau đây của giải thuật: 7.2.1. Tính kết thúc (tính dừng) Giải thuật phải đưa ra được output sau một số hữu hạn bước thực hiện. Giải thuật Euclid tìm UCLN thoả mãn tính dừng vì sau mỗi bước ta thấy tổng a+b giảm thực sự nhưng không được hơn 2. Vì vậy quá trình trên nhất định phải dừng sau một số hữu hạn bước. Lưu ý rằng số bước của một quy tắc thao tác có thể là hữu hạn nhưng quy tắc đó không có tính dừng. Ví dụ, Xét quy tắc sau: Bước 1: Xoá bảng Bước 2: Vẽ hình tròn Bước 3: Quay lại bước 1 Quy tắc đó có 3 bước nhưng không có tính dừng 7.2.2. Tính xác định Tính xác định của giải thuật đòi hỏi ở mỗi bước các thao tác phải hoàn toàn xác định, đơn trị không có sự nhập nhằng, lẫn lộn, tuỳ tiện. Nói cách khác, trong cùng một điều kiện, các chủ thể xử lý dù là người hay máy thực hiện cùng một bước của giải thuật thì phải cho cùng một kết quả. Nhờ tính chất này mà việc thực hiện thuật toán thuần tuý mang tính cơ học, không cần bất kỳ một sự chỉ dẫn nào về cách giải bài toán cả. 53 Chương 7 - Giải thuật xử lý thông tin 7.2.3. Tính phổ dụng Tính phổ dụng có nghĩa là một giải thuật có thể được áp dụng với một lớp các bài toán với input thay đổi chứ không chỉ áp dụng cho một trường hợp cụ thể. Giải thuật Euclid nói trên có thể áp dụng cho bất kỳ cặp hai số tự nhiên Cần lưu ý là trong khi tính dừng và tính xác định là điều kiện cần để một quá trình là một giải thuật thì tính phổ dụng chỉ là một tính chất thường thấy vì có nhiều bài toán có input hoàn toàn xác định, không tồn tại một lớp các bài toán tương tự. 7.2.4. Đại lượng vào Mỗi giải thuật có một hoặc nhiều đại lượng vào. Ví dụ, Giải thuật Euclid ở trên có đại lượng vào là a và b. 7.2.5. Đại lượng ra Sau khi giải thuật đã được thực hiện xong nó phải cho ra kết quả: Ví dụ, Giải thuật Euclid cho UCLN của 2 số a và b 7.3. CÁC PHƯƠNG PHÁP DIỄN TẢ GIẢI THUẬT Người ta thường diễn tả giải thuật bằng một trong ba cách thức sau đây: 7.3.1. Liệt kê từng bước Liệt kê ra các thao tác, các chỉ thị thực hiện bằng ngôn ngữ tự nhiên. Ví dụ, có N que diêm. Hai người chơi luân phiên bốc diêm. Mỗi lượt, mỗi người bốc từ 1 đến 3 que diêm. Người nào bốc cuối cùng sẽ thắng cuộc. Giải thuật để người đi trước luôn thắng cuộc được diễn tả bằng cách liệt kê từng bước như sau: Bước 1: Nhập N. Bước 2: Bốc 3 que rồi đợi đối phương đi. Bước 3: Đối phương bốc (giả sử x que, 0<x<4). Bước 4: Đến lượt người đi trước bốc a = (4-x) que. Nếu còn diêm thì quay lại bước 3. Bước 5: Tuyên bố thắng cuộc - kết thúc. 7.3.2. Lưu đồ (flow chart) hay còn gọi là sơ đồ khối Lưu đồ là một phương tiện hình học giúp ta diễn tả giải thuật một cách trực quan. Lưu đồ được tạo bởi các kiểu khối cơ bản nối với nhau bằng các đường có hướng. Sau đây là một số khối được dùng để diễn đạt giải thuật. Hình 7.1. Các loại biểu diễn hình học trong sơ đồ khối Khối tính toán được biểu diễn bằng hình chữ nhật. Trong khối này ta viết một hoặc một dãy các thao tác như tạo giá trị, hoặc là một nhóm công việc. Nếu để thể hiện việc tính giá 54 Khối điều kiện Khối chỉ điểm bắt đầu Khối chỉ điêm kết thúc Hướng xử lý Khối input Khối output Khối thao tác tuần tự Chương 7 - Giải thuật xử lý thông tin trị ta sẽ dùng dấu gán := với ý nghĩa đại lượng đứng bên trái dấu gán được gán giá trị cho biểu thức phía phải dấu gán. Khối tính toán có nhiều đường đi đến và 1 đường đi ra. Khối điều kiện được biểu diễn bằng hình thoi. Trong khối này ta viết một điều kiện. Tuỳ theo điều kiện này thoả mãn hay không mà việc thực hiện tiếp theo sẽ được chỉ dẫn bởi một trong hai đường đi ra mang dẫu + (cho trường hợp đúng) hoặc dấu - (cho trường hợp sai). Như vậy khối điều kiện có một đường đi đến và hai đường đi ra. Hai khối đặc biệt là khối bắt đầu và khối kết thúc được biểu diễn bằng hình tròn chỉ rõ điểm bắt đầu và điểm kết thúc của giải thuật. Khối bắt đầu không có đường đi đến và có 1 đường đi ra. Khối kết thúc không có đường đi ra, có thể có một hoặc nhiều đường đi tới. Trong khối input ghi rõ các đại lượng vào, và ở khối output ghi các đại lượng ra. Khối input có thể đặt kế tiếp khối bắt đầu, còn khối output có thể đặt liền trước khối kết thúc. Chúng ta dùng lưu đồ ở Hình 7.2 diễn tả lại giải thuật Euclid tìm UCLN của hai số nguyên dương. Hình 7.2. Lưu đồ cho giải thuật Euclid 55 đúng Nhập a, b d := a In d a:= a - b b := b-a a=b ? a>b ? sai đúng sai Chương 7 - Giải thuật xử lý thông tin Hình 7.3 là lưu đồ cho bài toán bốc diêm. Trong các ô thao tác không chỉ là phép gán mà có thể là mô tả một hành động nào đó. Hình 7.3. Lưu đồ giải thuật trò chơi bốc diêm 7.3.3.Ngôn ngữ thuật toán Cách thức này dựa trên hệ thống dùng các ký hiệu và quy tắc để mô tả, giải thuật một cách nhất quán, tựa một ngôn ngữ tự nhiên nào đó bằng một số cách nói như “trong khi một điều kiện thoả mãn thì lặp lại một nhóm thao tác“ hay “nếu một điều kiện thoả mãn thì thực hiện nhóm thao tác này ngược lại thực hiện nhóm thao tác kia” hay “sau thao tác này thì thực hiện thao tác kia”. Như vậy, các diễn đạt đó chỉ rõ cách thiết lập thứ tự các thao tác và được gọi là cấu trúc điều khiển. Cấu trúc điều khiển chính là cách thể hiện giải thuật của các ngôn ngữ lập trình bậc cao mà ta sẽ thảo luận kỹ hơn trong phần ngôn ngữ lập trình. Ví dụ, thuật giải Euclid có thể thể hiện như sau: Trong khi a ≠ b thì lặp lại khối sau Nếu a > b thì Bớt a đi một lượng là b Nếu không thì Bớt b đi một lượng là a Cho tới khi a= b thì tuyên bố USCLN chính là giá trị chung của a và b Hình 7.4. Thể hiện thuật toán Euclid bằng các cấu trúc điều khiển 56 Người đầu Người đầu Lấy 3 que Ta lấy 4-x que Đối phương lấy x que diêm Số diêm còn >0 ? Tuyên bố thắng cuộc đúng sai Chương 7 - Giải thuật xử lý thông tin 7.4. SƠ LƯỢC VỀ ĐÁNH GIÁ GIẢI THUẬT Đối với một bài toán, có thể có nhiều giải thuật nhưng chúng phải cho cùng một output đối với một input. Tuy nhiên chúng có thể khác nhau về hiệu quả:  Hiệu quả thời gian: Tốc độ xử lý là nhanh hay chậm. Ta có thể đánh giá căn cứ vào số bước thực hiện.  Hiệu quả không gian: Có thể đánh giá không gian lưu trữ theo số các đối tượng dùng để ghi nhớ các kết quả (kể cả kết quả trung gian). Ví dụ: Để tìm USCLN có thể có nhiều giải thuật như: Giải thuật 2: Bước 1: Nhập a và b. Bước 2: Phân tích các số a và b thành tích của các thừa số nguyên tố. Bước 3: Lấy tích của các thừa số chung với số mũ nhỏ nhất làm USCLN. Bước 4: Kết thúc xử lý. Giải thuật 3 : Giải thuật Euclid cải tiến Bước 1: Nhập a và b. Bước 2: Chia a cho b tìm số dư r. Bước 3: Nếu r = 0 thì thông báo kết quả: UCLN là b rồi chuyển bước 5. Bước 4: Gán giá trị b cho a, gán giá trị r cho b rồi quay trở lại thực hiện bước 2. Bước 5: Kết thúc. Ta thấy xét về hiệu quả cả về không gian và thời gian thì giải thuật 2 kém hiệu quả hơn giải thuật Euclid đã trình bày ở trên. Giải thuật 3 thực sự là một cải tiến so với giải thuật Euclid mà ta đã trình bày trước đây vì phép chia lấy phần dư thực tế đã thay cho hàng loạt phép trừ nói trong giải thuật Euclid. Vì vậy trong trường hợp chung nó tìm được USCLN với số bước xử lý ít hơn nhiều. Trong Tin học có cả một ngành chuyên đánh giá độ phức tạp của giải thuật, chủ yếu là đánh giá về hiệu quả thời gian. Thực tế sử dụng cho thấy thách thức về không gian lưu trữ có thể giải quyết dễ hơn thách thức về thời gian thực hiện. Bài tập 1. Giải thuật là gì? Cho ví dụ? 2. Hãy viết giải thuật vẽ đồ thị của hàm số y = a/x (với a khác 0) thông qua đồ thị của hàm số y = ax? 3. Cho tam giác ABC có góc vuông A và cho biết cạnh a và góc B. Hãy viết giải thuật để tính góc C, cạnh b và cạnh c? 4. Trình bày tính chất xác định của giải thuật và nêu rõ nghĩa của tính chất này? 5*. Hãy phát biểu giải thuật để giải bài toán sau: "Có một số quả táo. Dùng cân hai đĩa (không có quả cân) để xác định quả táo nặng nhất"? 6. Quy tắc chơi sau đây có phải là một giải thuật hay không? Giả sử cho trước một cuốn sách tiếng Việt. a) Hãy mở một trang có chữ số tận cùng bằng 5. 57 Chương 7 - Giải thuật xử lý thông tin b) Hãy lấy từ đầu tiên của trang đó. c) Hãy xem chữ cái đầu tiên của từ đó nếu chữ cái đó là một chữ từ A đến H thì bạn thắng, ngoài ra thì bạn thua. 7. Hãy xác định input và output cho các bài toán sau đây: a) Rút gọn một phân số. b) Kiểm tra xem ba số cho trước a, b và c có thể là độ dài ba cạnh của một tam giác hay không? c) Tính trung bình cộng của hai số. d) Dùng một cốc phụ để tráo nước ở hai cốc cho trước. e) Tìm chu vi và diện tích của hình tròn có bán kính cho trước. 58 . Chương 7 - Giải thuật xử lý thông tin CHƯƠNG 7. GIẢI THUẬT 7. 1. KHÁI NIỆM BÀI TOÁN VÀ GIẢI THUẬT Trước khi xem. sẽ thực hiện tiếp bước 4. 7. 2. MỘT SỐ ĐẶC TRƯNG CỦA GIẢI THUẬT Người ta thường liệt kê các đặc trưng sau đây của giải thuật: 7. 2.1. Tính kết thúc (tính

Ngày đăng: 12/03/2014, 22:54

HÌNH ẢNH LIÊN QUAN

Lưu đồ là một phương tiện hình học giúp ta diễn tả giải thuật một cách trực quan. Lưu đồ được tạo bởi các kiểu khối cơ bản nối với nhau bằng các đường có hướng - chuong 7. giai thuat
u đồ là một phương tiện hình học giúp ta diễn tả giải thuật một cách trực quan. Lưu đồ được tạo bởi các kiểu khối cơ bản nối với nhau bằng các đường có hướng (Trang 3)
Khối điều kiện được biểu diễn bằng hình thoi. Trong khối này ta viết một điều kiện. Tuỳ theo điều kiện này thoả mãn hay không mà việc thực hiện tiếp theo sẽ được chỉ dẫn bởi một trong hai đường đi ra mang dẫu + (cho trường hợp đúng) hoặc dấu - (cho trường - chuong 7. giai thuat
h ối điều kiện được biểu diễn bằng hình thoi. Trong khối này ta viết một điều kiện. Tuỳ theo điều kiện này thoả mãn hay không mà việc thực hiện tiếp theo sẽ được chỉ dẫn bởi một trong hai đường đi ra mang dẫu + (cho trường hợp đúng) hoặc dấu - (cho trường (Trang 4)
Hình 7.3 là lưu đồ cho bài tốn bốc diêm. Trong các ô thao tác không chỉ là phép gán mà có thể là mơ tả một hành động nào đó. - chuong 7. giai thuat
Hình 7.3 là lưu đồ cho bài tốn bốc diêm. Trong các ô thao tác không chỉ là phép gán mà có thể là mơ tả một hành động nào đó (Trang 5)
Hình 7.3. Lưu đồ giải thuật trị chơi bốc diêm - chuong 7. giai thuat
Hình 7.3. Lưu đồ giải thuật trị chơi bốc diêm (Trang 5)

TỪ KHÓA LIÊN QUAN

w