Phân tích và thiết kế bài toán

15 273 0
Phân tích và thiết kế bài toán

Đ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

Phân tích thiết kế toán Phân tích thiết kế toán Bởi: Khoa CNTT ĐHSP KT Hưng Yên CÁC BƯỚC CƠ BẢN ĐỂ GIẢI QUYẾT BÀI TOÁN Xác định toán Input → Process → Output (Dữ liệu vào → Xử lý → Kết ra) Việc xác định toán tức phải xác định xem ta phải giải vấn đề gì?, với giả thiết cho lời giải cần phải đạt yêu cầu Khác với toán tuý toán học cần xác định rõ giả thiết kết luận không cần xác định yêu cầu lời giải, toán tin học ứng dụng thực tế cần tìm lời giải tốt tới mức đó, chí tồi mức chấp nhận Bởi lời giải tốt đòi hỏi nhiều thời gian chi phí Ví dụ 2.1: Khi cài đặt hàm số phức tạp máy tính Nếu tính cách khai triển chuỗi vô hạn độ xác cao thời gian chậm hàng tỉ lần so với phương pháp xấp xỉ Trên thực tế việc tính toán luôn cho phép chấp nhận sai số nên hàm số máy tính tính phương pháp xấp xỉ giải tích số Xác định yêu cầu toán quan trọng ảnh hưởng tới cách thức giải chất lượng lời giải Một toán thực tế thường cho thông tin mơ hồ hình thức, ta phải phát biểu lại cách xác chặt chẽ để hiểu toán Ví dụ 2.2: Bài toán: Một dự án có n người tham gia thảo luận, họ muốn chia thành nhóm nhóm thảo luận riêng phần dự án Nhóm có người trình lên nhiêu ý kiến Nếu lấy nhóm ý kiến đem ghép lại ý kiến triển khai dự án Hãy tìm cách chia để số ý kiến cuối thu lớn 1/15 Phân tích thiết kế toán Phát biểu lại: Cho số nguyên dương n, tìm phân tích n thành tổng số nguyên dương cho tích số lớn Trên thực tế, ta nên xét vài trường hợp cụ thể để thông qua hiểu toán rõ thấy thao tác cần phải tiến hành Đối với toán đơn giản, cần qua ví dụ ta đưa toán quen thuộc để giải Tìm cấu trúc liệu biểu diễn toán Khi giải toán, ta cần phải định nghĩa tập hợp liệu để biểu diễn tình trạng cụ thể Việc lựa chọn tuỳ thuộc vào vấn đề cần giải thao tác tiến hành liệu vào Có thuật toán thích ứng với cách tổ chức liệu định, cách tổ chức liệu khác hiệu thực Chính nên bước xây dựng cấu trúc liệu tách rời bước tìm kiếm thuật toán giải vấn đề Các tiêu chuẩn lựa chọn cấu trúc liệu • Cấu trúc liệu trước hết phải biểu diễn đầy đủ thông tin nhập xuất toán • Cấu trúc liệu phải phù hợp với thao tác thuật toán mà ta lựa chọn để giải toán • Cấu trúc liệu phải cài đặt máy tính với ngôn ngữ lập trình sử dụng Đối với số toán, trước tổ chức liệu ta phải viết đoạn chương trình nhỏ để khảo sát xem liệu cần lưu trữ lớn tới mức độ Xác định thuật toán Thuật toán hệ thống chặt chẽ rõ ràng quy tắc nhằm xác định dãy thao tác cấu trúc liệu cho: Với liệu vào, sau số hữu hạn bước thực thao tác ra, ta đạt mục tiêu định Các đặc trưng thuật toán • Tính đơn nghĩa Ở bước thuật toán, thao tác phải rõ ràng, không gây nên nhập nhằng, lộn xộn, tuỳ tiện, đa nghĩa Không nên lẫn lộn tính đơn nghĩa tính đơn định: Người ta phân loại thuật toán làm hai loại: Đơn định (Deterministic) Ngẫu nhiên (Randomized) Với hai liệu giống cho trước làm input, thuật toán đơn định thi hành mã lệnh giống 2/15 Phân tích thiết kế toán cho kết giống nhau, thuật toán ngẫu nhiên thực theo mã lệnh khác cho kết khác Ví dụ yêu cầu chọn số tự nhiên x: a ≤ x ≤ b, ta viết x = a hay x = b hay x = (a + b) div 2, thuật toán cho giá trị với liệu vào hai số tự nhiên a b Nhưng ta viết x = a + Random(b - a + 1) thu kết khác lần thực với input a b tuỳ theo máy tính tạo số ngẫu nhiên • Tính dừng Thuật toán không rơi vào trình vô hạn, phải dừng lại cho kết sau số hữu hạn bước • Tính Sau thực tất bước thuật toán theo trình định, ta phải kết mong muốn với liệu đầu vào Kết kiểm chứng yêu cầu toán • Tính phổ dụng Thuật toán phải dễ sửa đổi để thích ứng với toán lớp toán làm việc liệu khác Tính khả thi • Kích thước phải đủ nhỏ: Ví dụ: Một thuật toán có tính hiệu lượng nhớ mà yêu cầu vượt khả lưu trữ hệ thống máy tính • Thuật toán phải chuyển thành chương trình: Ví dụ thuật toán yêu cầu phải biểu diễn số vô tỉ với độ xác tuyệt đối không thực với hệ thống máy tính • Thuật toán phải máy tính thực thời gian cho phép, điều khác với lời giải toán (Chỉ cần chứng minh kết thúc sau hữu hạn bước) Ví dụ xếp thời khoá biểu cho học kỳ cho máy tính chạy tới học kỳ sau Ví dụ 2.3: Input: số nguyên tự nhiên a b không đồng thời Output: Ước số chung lớn a b Thuật toán tiến hành mô tả sau: (Thuật toán Euclide) Bước (Input): Nhập a b: Số tự nhiên 3/15 Phân tích thiết kế toán Bước 2: Nếu b ≠ chuyển sang bước 3, không bỏ qua bước 3, làm bước Bước 3: Đặt r = a mod b; Đặt a = b; Đặt b = r; Quay trở lại bước Bước (Output): Kết luận ước số chung lớn phải tìm giá trị a Kết thúc thuật toán Khi mô tả thuật toán ngôn ngữ tự nhiên, ta không cần phải chi tiết bước tiến trình thực mà cần mô tả cách hình thức đủ để chuyển thành ngôn ngữ lập trình Viết sơ đồ thuật toán đệ quy ví dụ Đối với thuật toán phức tạp nặng tính toán, bước công thức nên mô tả cách tường minh thích rõ ràng để lập trình ta nhanh chóng tra cứu Đối với thuật toán kinh điển phải thuộc Khi giải toán lớn thời gian giới hạn, ta phải thiết kế tổng thể chỗ thuộc việc lắp ráp vào Tính đắn mô-đun thuộc ta không cần phải quan tâm mà tập trung giải phần khác Lập trình Sau có thuật toán, ta phải tiến hành lập trình thể thuật toán Muốn lập trình đạt hiệu cao, cần phải có kỹ thuật lập trình tốt Kỹ thuật lập trình tốt thể kỹ viết chương trình, khả gỡ rối thao tác nhanh Lập trình tốt cần nắm vững ngôn ngữ lập trình đủ, phải biết cách viết chương trình uyển chuyển phát triển để chuyển ý tưởng thành chương trình hoàn chỉnh Kinh nghiệm cho thấy thuật toán hay cài đặt vụng nên chạy lại cho kết sai tốc độ chậm Thông thường, ta không nên cụ thể hoá toàn chương trình mà nên tiến hành theo phương pháp tinh chế bước (Stepwise refinement): • Ban đầu, chương trình thể ngôn ngữ tự nhiên, thể thuật toán với bước tổng thể, bước nêu lên công việc phải thực • Một công việc đơn giản đoạn chương trình học thuộc ta tiến hành viết mã lệnh ngôn ngữ lập trình • Một công việc phức tạp ta lại chia thành công việc nhỏ để lại tiếp tục với công việc nhỏ 4/15 Phân tích thiết kế toán Trong trình tinh chế bước, ta phải đưa biểu diễn liệu Như với tinh chế công việc, liệu tinh chế dần, có cấu trúc hơn, thể rõ mối liên hệ liệu Phương pháp tinh chế bước thể tư giải vấn đề từ xuống, giúp cho người lập trình có định hướng thể phong cách viết chương trình Tránh việc mò mẫm, xoá viết lại nhiều lần, biến chương trình thành tờ giấy nháp Kiểm thử Chạy thử tìm lỗi Chương trình người viết ra, mà người nhầm lẫn Một chương trình viết xong chưa chạy máy tính kết mong muốn Kỹ tìm lỗi, sửa lỗi, điều chỉnh lại chương trình kỹ quan trọng người lập trình Kỹ có kinh nghiệm tìm sửa chữa lỗi Có ba loại lỗi: • Lỗi cú pháp: Lỗi hay gặp lại dễ sửa nhất, cần nắm vững ngôn ngữ lập trình đủ Một người coi lập trình sửa lỗi cú pháp • Lỗi cài đặt: Việc cài đặt thể không thuật toán định, lỗi phải xem lại tổng thể chương trình, kết hợp với chức gỡ rối để sửa lại cho • Lỗi thuật toán: Lỗi gặp nguy hiểm nhất, nhẹ phải điều chỉnh lại thuật toán, nặng có phải loại bỏ hoàn toàn thuật toán sai làm lại từ đầu Xây dựng test Có nhiều chương trình khó kiểm tra tính đắn Nhất ta kết nào? Vì chương trình chạy kết (không biết sai nào) việc tìm lỗi khó khăn Khi ta nên làm test để thử chương trình Các test nên đặt file văn bản, việc tạo file văn nhanh lần chạy thử cần thay tên file liệu vào xong, không cần gõ lại test từ bàn phím Kinh nghiệm làm test là: Bắt đầu với test nhỏ, đơn giản, làm tay có đáp số để so sánh với kết chương trình chạy 5/15 Phân tích thiết kế toán Tiếp theo test nhỏ, chứa giá trị đặc biệt tầm thường Kinh nghiệm cho thấy test dễ sai Các test phải đa dạng, tránh lặp lặp lại test tương tự Có vài test lớn để kiểm tra tính chịu đựng chương trình mà Kết có hay không đa số trường hợp, ta kiểm chứng với test Lưu ý chương trình chạy qua hết test nghĩa chương trình Bởi ta chưa xây dựng test làm cho chương trình chạy sai Vì có thể, ta nên tìm cách chứng minh tính đắn thuật toán chương trình, điều thường khó Tối ưu chương trình Một chương trình chạy nghĩa việc lập trình xong, ta phải sửa đổi lại vài chi tiết để chương trình chạy nhanh hơn, hiệu Thông thường, trước kiểm thử ta nên đặt mục tiêu viết chương trình cho đơn giản, chạy kết được, sau tối ưu chương trình, ta xem lại chỗ viết chưa tốt tối ưu lại mã lệnh để chương trình ngắn hơn, chạy nhanh Không nên viết tới đâu tối ưu mã đến đó, chương trình có mã lệnh tối ưu thường phức tạp khó kiểm soát Việc tối ưu chương trình nên dựa tiêu chuẩn sau: • Tính tin cậy Chương trình phải chạy dự định, mô tả giải thuật Thông thường viết chương trình, ta có thói quen kiểm tra tính đắn bước • Tính uyển chuyển Chương trình phải dễ sửa đổi Bởi có chương trình viết hoàn hảo mà cần phải sửa đổi lại Chương trình viết dễ sửa đổi làm giảm bớt công sức lập trình viên phát triển chương trình • Tính sáng Chương trình viết phải dễ đọc dễ hiểu, để sau thời gian dài, đọc lại hiểu làm gì? Để có điều kiện sửa sai (nếu phát lỗi mới), cải tiến hay biến đổi để chương trình giải toán khác Tính sáng chương trình phụ thuộc nhiều vào công cụ lập trình phong cách lập trình 6/15 Phân tích thiết kế toán • Tính hữu hiệu Chương trình phải chạy nhanh tốn nhớ, tức tiết kiệm không gian thời gian Để có chương trình hữu hiệu, cần phải có giải thuật tốt tiểu xảo lập trình Tuy nhiên, việc áp dụng nhiều tiểu xảo khiến chương trình trở nên rối rắm, khó hiểu sửa đổi Tiêu chuẩn hữu hiệu nên dừng lại mức chấp nhận được, không quan trọng ba tiêu chuẩn Bởi phần cứng phát triển nhanh, yêu cầu hữu hiệu không cần phải đặt nặng Từ phân tích trên, nhận thấy việc làm chương trình đòi hỏi nhiều công đoạn tiêu tốn nhiều công sức Chỉ công đoạn không hợp lý làm tăng chi phí viết chương trình Nghĩ cách giải vấn đề khó, biến ý tưởng thành thực không dễ chút Những cấu trúc liệu giải thuật đề cập tới chuyên đề kiến thức phổ thông, người học lập trình không sớm muộn phải biết tới Chỉ hy vọng học xong chuyên đề này, qua cấu trúc liệu giải thuật mẫu mực, rút học kinh nghiệm: Đừng viết chương trình mà chưa suy xét kỹ giải thuật liệu cần thao tác, ta dễ mắc phải hai sai lầm trầm trọng: sai giải thuật, giải thuật triển khai cấu trúc liệu không phù hợp Chỉ cần mắc hai lỗi nguy sụp đổ toàn chương trình hoàn toàn có thể, cố chữa bị rối, khả chắn phải làm lại từ đầu MODUL HÓA VÀ VIỆC GIẢI QUYẾT BÀI TOÁN Trong thực tế toán giải máy tính điện tử ngày nhiều phức tạp Các giải thuật ngày có qui mô lớn khó thiết lập Để đơn giản hoá toán người ta tiến hành phân chia toán lớn thành toán nhỏ Có nghĩa toán lớn modul cần chia thành modul con, đến lượt modul lại chia tiếp thành modul khác ứng với phần việc mà người ta biết cách giải Việc tổ chức lời giải toán thực theo cấu trúc phân cấp sau : 7/15 Phân tích thiết kế toán Chiến lược giải toán theo kiểu gọi chiến lược “chia để trị” (devide and conquare) Để thể chiến lược người ta sử dụng phương pháp thiết kế từ “đỉnh - xuống” (top - down design) Đó cách phân tích tổng quát toàn vấn đề, xuất phát từ kiện mục tiêu đề ra, để đề cập đến công việc chủ yếu sau dần vào giải phần cụ thể cách chi tiết hơn(gọi cách thiết kế từ khái quát đến chi tiết) Ví dụ : Chủ tịch hội đồng xét cấp học bổng nhà trường yêu cầu chúng ta: “ Dùng máy tính điện tử để quản lý bảo trì hồ sơ học bổng sinh viên diện tài trợ, đồng thời thường kỳ phải lập báo cáo tổng kết để đệ trình lên Bộ” Như trước hết ta phải hình dung cụ thể đầu vào đầu toán Có thể coi ta có tập hồ sơ (file) bao gồm ghi (records) thông tin liên quan đến học bổng sinh viên : Mã SV, Điểm TB, điểm đạo đức, khoản tiền tài trợ Và chương trình lập phải tạo điều kiện cho người sử dụng giải yêu cầu sau: Tìm lại hiển thị ghi sinh viên thiết bị cuối (terminal) người dùng Cập nhật (update) ghi sinh viên cho trước cách thay đổi điểm trung bình, điểm đạo đức, khoản tiền tài trợ cần In bảng tổng kết chứa thông tin thời (đã cập nhật có thay đổi) gồm số liệu, điểm trung bình, điểm đạo đức, khoản tiền tài trợ, cần Xuất phát từ nhận định trên, giải thuật xử lý phải giải nhiệm vụ sau: 8/15 Phân tích thiết kế toán Những thông tin sinh viên học bổng, lưu trữ đĩa phải đọc vào nhớ để xử lý (gọi nhiệm vụ “đọc tệp”) Xử lý thồng tin để tạo kết mong muốn (nhiệm vụ “xử lý tệp”) Sao chép thông tin cập nhật vào tệp đĩa để lưu trữ cho việc xử lý sau này( gọi nhiệm vụ “ghi tệp”) Các nhiệm vụ mức đầu tương đối phức tạp thường chia thành nhiệm vụ Chẳng hạn, nhiệm vụ “xử lý tệp” phân thành nhiệm vụ tương ứng giải yêu cầu nêu trên: Tìm lại ghi sinh viên cho trước Cập nhật thông tin ghi sinh viên In bảng tổng kết thông tin sinh viên học bổng Những nhiệm vụ lại chia nhỏ thành nhiệm vụ theo sơ đồ sau: Cách thiết kế giải thuật theo kiểu top - down giúp cho việc giải toán định hướng rõ ràng, dễ dàng thực tảng cho việc lập trình cấu trúc 9/15 Phân tích thiết kế toán PHƯƠNG PHÁP TINH CHỈNH DẦN TỪNG BƯỚC (Stepwise refinement) Tinh chỉnh bước phương pháp thiết kế giải thuật gắn liền với lập trình Nó phản ánh tinh thần trình modul hoá toán thiết kế kiểu top - down Phương pháp tiến hành theo sơ đồ: CTDL → CTDL lưu trữ → Cách cài đặt DL hợp lý → CTDL tiền định Trong trình thực giải thuật ban đầu chương trình thực ngôn ngữ tự nhiên phản ánh ý công việc cần làm Đến bước sau ý chi tiết hoá tương ứng với công việc nhỏ Ta gọi bước tinh chỉnh, tinh chỉnh hướng phía ngôn ngữ lập trình mà ta chọn Càng bước sau lời lẽ đặc tả công việc xử lý thay câu lệnh hướng tới câu lệnh ngôn ngữ lập trình Ví dụ 2.4: Giả sử ta muốn lập chương trình xếp dãy n số nguyên khác theo thứ tự tăng dần Giải thuật phác thảo cách thủ công đơn giản sau:“ Coi phần tử dãy số phần tử véc tơ (có cấu trúc mảng chiều) dãy lưu trữ vec tơ lưu trữ gồm n từ máy nhớ (a1, a2, , an) từ lưu trữ phần tử thứ i (1 ≤ i ≤ n) dãy số Qui ước dãy số xếp để chỗ cũ cho Từ số cho chọn số nhỏ nhất, đặt vào cuối dãy xếp Sau tiến hành so sánh với số vị trí khác với số phải tiến hành đổi chỗ Công việc lặp lại dãy số chưa xếp trở thành rỗng” Bước tinh chỉnh thực nhờ ngôn ngữ tựa C sau: For(int i =1, i ≤ n, i++) { + Xét từ a i đến a n để tìm số nhỏ a j + Đổi chỗ aj } Các bước tiến hành: + B1: Xét dãy cho Tìm số nguyên nhỏ aj số từ đến an 10/15 Phân tích thiết kế toán + B2: Đổi chỗ aj Nhiệm vụ đầu thực cách: “ Thoạt tiên coi “số nhỏ nhất” tạm thời; so sánh với ai+1,ai+2, Khi so sánh với an số nhỏ xác định.” Để xác định ta phải vị trí nó, hay nói cách khác nắm số phần tử thông qua khâu trung gian: {Bước tinh chỉnh 1} j =i; For(int k =j+1, k ≤ n, k++) if ( a k < a j ) j=k; {Bước tinh chỉnh 2} B = a i ; a i = a j ; a j = B; Sau chỉnh lại cách viết biến số cho với qui ước ta có chương trình xếp hoàn chỉnh viết dạng thủ tục sau: Void Sort(A,n) {các biến i,j,k kiểu nguyên; biến trung gian B kiểu A} For(int i =1, i ≤ n, i++) { 2- {Chọn số nhỏ nhất} j =i; For(int k =j+1, k ≤ n, k++) if ( A[k] < A[j] ) j = k; {Đổi chỗ} B = A[i]; A[i]= A[j]; A[j] = B; } 11/15 Phân tích thiết kế toán Ví dụ 2: Cho ma trận vuông n × n số nguyên Hãy in phần tử thuộc đường chéo song song với đường chéo theo thứ tự tính từ phải sang trái Chọn cách in từ phải sang trái ta có kết quả: a14 a13 a24 a12 a23 a34 a11 a22 a33 a44 a21 a32 a43 a31 a42 a41 Nửa tam giác cột giảm dần từ n → 1, đưa phần tử thuộc đường chéo ứng với cột j Nửa tam giác hàng tăng từ → n Với hàng ta phải đưa phần tử thuộc đường chéo tương đương với hàng i cho Ta phác hoạ giải thuật sau: Nhập cấp ma trận n Nhập phần tử ma trận A[i,j] In đường chéo song song với đường chéo Hai nhiệm vụ (1) (2) dễ dàng thể Pascal: Cin>>n; for ( i = 1, i [...]... của ma trận A[i,j] 3 In các đường chéo song song với đường chéo chính Hai nhiệm vụ (1) và (2) có thể dễ dàng thể hiện bằng Pascal: 1 Cin>>n; 1 for ( i = 1, i .. .Phân tích thiết kế toán Phát biểu lại: Cho số nguyên dương n, tìm phân tích n thành tổng số nguyên dương cho tích số lớn Trên thực tế, ta nên xét vài trường hợp cụ thể để thông qua hiểu toán. .. giống cho trước làm input, thuật toán đơn định thi hành mã lệnh giống 2/15 Phân tích thiết kế toán cho kết giống nhau, thuật toán ngẫu nhiên thực theo mã lệnh khác cho kết khác Ví dụ yêu cầu chọn... cấu trúc phân cấp sau : 7/15 Phân tích thiết kế toán Chiến lược giải toán theo kiểu gọi chiến lược “chia để trị” (devide and conquare) Để thể chiến lược người ta sử dụng phương pháp thiết kế từ

Ngày đăng: 31/12/2015, 11:33

Từ khóa liên quan

Mục lục

  • Phân tích và thiết kế bài toán

  • CÁC BƯỚC CƠ BẢN ĐỂ GIẢI QUYẾT BÀI TOÁN

  • MODUL HÓA VÀ VIỆC GIẢI QUYẾT BÀI TOÁN

  • PHƯƠNG PHÁP TINH CHỈNH DẦN TỪNG BƯỚC (Stepwise refinement)

Tài liệu cùng người dùng

Tài liệu liên quan