Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 161 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
161
Dung lượng
873,75 KB
Nội dung
Cấu trúc liệu giải thuật Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên Cấu trúc liệu giải thuật Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên Phiên trực tuyến: http://voer.edu.vn/c/fe7df99c MỤC LỤC Mục lục 1.1 Mục lục Bài 1: Giải thuật cấu trúc liệu 2.1 Giải thuật cấu trúc liệu Bài 2: Phân tích thiết kế toán 3.1 Phân tích thiết kế toán Bài 3: Phân tích thời gian thực giải thuật 4.1 Phân tích thời gian thực thuật toán Bài 4: Mảng danh sách 5.1 Mảng danh sách Bài 5: Danh sách nối đơn (Singlely Linked List) 6.1 Danh sách nối đơn (Singlely Linked List) Bài 6: Thực hành cài đặt danh sách nối đơn 7.1 Thực hành cài đặt danh sách nối đơn Bài 7: Danh sách tuyến tình ngăn xếp (Stack) 8.1 Danh sách tuyến tính ngăn xếp (Stack) Bài 8: Danh sách tuyến tình hàng đợi (Queue) 9.1 Danh sách tuyến tính kiểu hàng đợi 10 Bài 9: Thực hành danh sách Queue 10.1 Thực hành đặt danh sách kiểu hàng đợi 11 Bài 10: Danh sách nối vòng nối kép 11.1 Danh sách nối vòng nối kép 12 Bài 11: Thực hành danh sách liên kết kép 12.1 Thực hành cài đặt danh sách liên kết kép 13 Bài 12: Dữ liệu kiểu 13.1 Kiểu liệu 14 Bài 13: Thực hành cài đặt nhị phân 14.1 Thực hành cài đặt nhị phân 15 Bài 14: Cây nhị phân ứng dụng 15.1 Cây nhị phân ứng dụng 16 Bài 15: Thực hành cài đặt nhị phân tìm kiếm 16.1 Thực hành cài đặt nhị phân tìm kiếm Tham gia đóng góp 1/159 Mục lục Mục lục MỤC LỤC MỤC LỤC Trong khoa học máy tính, cấu trúc liệu cách lưu liệu máy tính cho sử dụng cách hiệu Thông thường, cấu trúc liệu chọn cẩn thận cho phép thực thuật toán hiệu Việc chọn cấu trúc liệu thường chọn cấu trúc liệu trừu tượng Một cấu trúc liệu thiết kế tốt cho phép thực nhiều phép toán, sử dụng tài nguyên, thời gian xử lý không gian nhớ tốt Các cấu trúc liệu triển khai cách sử dụng kiểu liệu, tham chiếu phép toán cung cấp ngôn ngữ lập trình Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc liệu vấn đề quan trọng Kinh nghiệm việc xây dựng hệ thóng lớn cho thấy khó khăn việc triển khai chương trình, chất lượng hiệu kết cuối phụ thuộc nhiều vào việc chọn cấu trúc liệu tốt Sau cấu trúc liệu chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng Đôi trình tự công việc diễn theo thứ tự ngược lại: cấu trúc liệu chọn toán quan trọng định có thuật toán chạy tốt với số cấu trúc liệu cụ thể Trong hai trường hợp, việc lựa chọn cấu trúc liệu quan trọng Trong modul này, với thời lượng hạn chế, trình bày vấn đề cấu trúc liệu danh sách nối đơn, kép, ngăn xếp, hàng đợi, Còn nhiều cấu trúc liệu mạnh khác tập hợp, bảng băm, B-tree,… mà modul không đủ thời lượng trình bày Ngoài ra, thuật toán trình bày ngắn gọn liền với cấu trúc liệu tương ứng Vì thuật toán lĩnh vực quan trọng rộng nên chương trình có modul “Phân tích thiết kế thuật toán” học kỳ sau Hưng Yên, tháng 12 năm 2007 2/159 Bài 1: Giải thuật cấu trúc liệu Giải thuật cấu trúc liệu GIẢI THUẬT Khi viết chương trình máy tính, ta thường cài đặt phương pháp nghĩ trước để giải vấn đề Phương pháp thường độc lập với máy tính cụ thể dùng để cài đặt: thích hợp cho nhiều máy tính Trong trường hợp nào, thìphương pháp, thân chương trình máy tính nghiên cứu để học cách làm để công vào toán từ “Giải thuật” hay “Thuật toán” dùng khoa học máy tính để mô tả phương pháp giải toán thích hợp cài đặt chương trình máy tính Giải thuật chúng đối tượng nghiên cứu trung tâm hầu hết lĩnh vực Tin học Các chương trình máy tính thường tối ưu, không cần thuật toán tối ưu, trừ thuật toán dùng lại nhiều lần Nếu không cần cài đặt đơn giản cẩn thận đủ để ta tin tưởng hoạt động tốt chạy chậm đến mười lần phiên tốt, điều có nghĩa chạy chậm vài giây, ta chọn thiết kế cài đặt tối ưu phức tạp từ đầu tốn nhiều phút, nhiều giờ… Do ta xem xét cài đặt hợp lý đơn giản thuật toán tốt Thông thường để giải toán ta có lựa chọn nhiều thuật toán khác, việc lựa chọn thuật toán tốt vấn đề tương đối khó khăn phức tạp, thường cần đến trình phân tích tinh vi tin học Khái niệm Giải thuật có từ lâu nhà toán học người Arập phát ngôn, thuật toán tiếng có từ thời cổ Hylạp thuật toán Euclid (thuật toán tìm ước số chung lớn số) Phương pháp cộng, nhân, chia… hai số giải thuật… Trong Tin học khái niệm giải thuật trình bày sau: Giải thuật câu lệnh (Statements) chặt chẽ rõ ràng xác định trình tự thao tác số đối tượng cho sau số hữu hạn bước thực ta đạt kết mong muốn (Thuật toán dãy hữu hạn bước, bước mô tả xác phép toán hành động cần thực hiện, để giải vấn đề) 3/159 Đối tượng Input kết mong muốn Output thuật toán Euclid MỐI QUAN HỆ GIỮA CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thực đề án tin học chuyển toán thực tế thành toán giải máy tính Một toán thực tế bao gồm đối tượng liệu yêu cầu xử lý đối tượng Vì thế, để xây dựng mô hình tin học phản ánh toán thực tế cần trọng đến hai vấn đề : Tổ chức biểu diễn đối tượng thực tế : Các thành phần liệu thực tế đa dạng, phong phú thường chứa đựng quan hệ với nhau, mô hình tin học toán, cần phải tổ chức , xây dựng cấu trúc thích hợp cho vừa phản ánh xác liệu thực tế này, vừa dễ dàng dùng máy tính để xử lý Công việc gọi xây dựng cấu trúc liệu cho toán Xây dựng thao tác xử lý liệu: Từ yêu cầu xử lý thực tế, cần tìm giải thuật tương ứng để xác định trình tự thao tác máy tính phải thi hành kết mong muốn, bước xây dựng giải thuật cho toán Tuy nhiên giải toán máy tính, thường có khuynh hướng trọng đến việc xây dựng giải thuật mà quên tầm quan trọng việc tổ chức liệu toán Giải thuật phản ánh phép xử lý , đối tượng xử lý giải thuật lại liệu, liệu chứa đựng thông tin cần thiết để thực giải thuật Để xác định giải thuật phù hợp cần phải biết tác động đến loại liệu (ví dụ để làm nhuyễn hạt đậu , người ta dùng cách xay không băm dao, đậu văng ngoài) chọn lựa cấu trúc liệu cần phải hiểu rõ thao tác tác động đến (ví dụ để biểu diễn điểm số sinh viên người ta dùng số thực thay chuỗi ký phải thực thao tác tính trung bình từ điểm số đó) Như đề án tin học, giải thuật cấu trúc liệu có mối quan hệ chặt chẽ với nhau, thể qua công thức : Cấu trúc liệu + Giải thuật = Chương trình Với cấu trúc liệu chọn, có giải thuật tương ứng, phù hợp Khi cấu trúc liệu thay đổi thường giải thuật phải thay đổi theo để tránh việc xử lý gượng ép, thiếu tự nhiên cấu trúc không phù hợp Hơn nữa, cấu trúc liệu tốt giúp giải thuật xử lý phát huy tác dụng tốt hơn, vừa đáp ứng nhanh vừa tiết kiệm vật tư, giải thuật dễ hiễu đơn giản 4/159 Ví dụ 1.1: Một chương trình quản lý điểm thi sinh viên cần lưu trữ điểm số sinh viên Do sinh viên có điểm số ứng với môn học khác nên liệu có dạng bảng sau: Sinh viên Môn Môn Môn3 Môn4 SV SV SV Chỉ xét thao tác xử lý xuất điểm số môn sinh viên Giả sử có phương án tổ chức lưu trữ sau: Phương án : Sử dụng mảng chiều Có tất 3(SV)*4(Môn) = 12 điểm số cần lưu trữ, khai báo mảng result sau : int result [ 12 ] = {7, 9, 5, 2,5, 0, 9, 4,6, 3, 7, 4}; mảng result phần tử lưu trữ sau: Và truy xuất điểm số môn j sinh viên i - phần tử (dòng i, cột j) bảng phải sử dụng công thức xác định số tương ứng mảng result: bảngđiểm(dòng i, cột j) ⇒ result[((i-1)*số cột) + j] Ngược lại, với phần tử mảng, muốn biết điểm số sinh viên nào, môn gì, phải dùng công thức xác định sau result[ i ] ⇒ bảngđiểm (dòng((i / số cột) +1), cột (i % số cột) ) Với phương án này, thao tác xử lý cài đặt sau : void XuatDiem() //Xuất điểm số tất sinh viên{ const int so_mon = 4;int sv,mon;for (int i=0; i info then insert (Right, x) else if x < info then insert (left, x); End; Giải thuật lặp Trong thủ tục ta sử dụng biến trỏ địa phương q chạy đỉnh gốc Khi đỉnh đó, q xuống đỉnh trái (phải) tuỳ theo khoá đỉnh lớn (nhỏ hơn) khoá x Ở đỉnh p muốn xuống đỉnh trái (phải) phải kiểm tra xem đỉnh có đỉnh trái (phải) không Nếu có tiếp tục xuống, ngược lại treo đỉnh vào bên trái (phải) đỉnh Điều kiện q = nil kết thúc vòng lặp Quá trình lại lặp có đỉnh chèn vào procedure Insert (var Root : Tree; x: keytype) var p, q : tree; 148/159 begin New(p); P^.info :=x; if Root = nil then Begin Root:=p; P^.left:= nil; P^.right:= nil; End Else Begin q:=Root; while q nil if x < q^.info then if q^.left nil then q := q^.left else begin q^.left :=p; p := nil; end else if x > q^.info then if q^.right nil then q:=q^.right else begin 149/159 q^.right :=p; q =nil; end; end; end; Nhận xét: Để dựng CNPTK ứng với dãy khoá đưa vào cách liên tục bổ nút ứng với khoá, rỗng Ban đầu phải dựng lên với nút gốc khoá sau khoá tiếp theo, tìm bổ sung vào Ví dụ với dãy khoá: 42 23 74 11 65 58 94 36 99 87 nhị phân tìm kiếm dựng có dạng hình 5.20 23744211366594589987 Hình 5.20 Một nhị phân tìm kiếm d)Loại bỏ nút nhị phân tìm kiếm Đối lập với phép toán chèn vào phép toán loại bỏ Chúng ta cần phải loại bỏ khỏi CNPTK đỉnh có khoá x (ta gọi tắt nút x) cho trước, cho việc huỷ nút khỏi phải bảo đảm điều kiện ràng buộc CNPTK Có ba trường hợp huỷ nút x xảy ra: • X nút • X nút nửa ( có trái phải) • X có đủ hai (trường hợp tổng quát) Trường hợp thứ nhất: đơn giản huỷ nút x không liên quan đến phần tử khác 320TCây trước xoá20TCây sau xoá Hình 5.21 Trường hợp thứ hai: Trước xoá nút x cần móc nối cha x với nút (nút trái nút phải) 150/159 T22010318T1 T2201025318T1 a) Cây trước xoáb) Cây sau xoá đỉnh (25) Trường hợp tổng quát: nút bị loại bỏ có trái phải, nút thay nút ứng với khoá nhỏ sát trước (nút cực phải trái nó) nút ứng với khoá lớn sát sau (nút cực trái phải nó) Như ta phải thay đổi số mối nối nút: • Nút cha nút bị loại bỏ • Nút chọn làm nút thay • Nút cha nút chọn làm nút thay T2b) Cây sau xoá đỉnh 201810253T1T2a) Cây trước xoá đỉnh 20201025318T1 Trong ví dụ ta chọn nút thay nút bị xoá nút cực phải trái (nút 18) T5ABT4CET2T3T1RQTSa) Cây trước xoá nút trỏ QT5AEBT4CT2T1RQTST3b) Cây sau xoá nút trỏ Q Sau giải thuật thực việc loại bỏ nút trỏ Q Ban đầu Q nối trái nối phải nút R nhị phân tìm kiếm, mà ta giả sử biết procedure Del (var Q: Tree); {xoá nút trỏ Q} var T, S : Tree; begin P := Q; {Xử lý trường hợp nút nút nửa lá} if P^.left = nil then Begin Q:=P^.right ;{R^.left := P^.right} Dispose(P); end else 151/159 if P^.right = nil then begin Q :=P^.left; Dispore (P); end else { Xử lý trường hợp tổng quát} begin T := P^.left; if T^.right = nil then begin T^.right := P^.right; Q := T; Dispose (P); end else begin S := T^.right; {Tìm nút thay thế, nút cực phải } while S^.right nil begin T := S; S := T^.right; 152/159 end; S^.right := P^.right; T^.right := S^.left; S^.left := P^.left; Q:=S; Dispose(p); end; end; end; Thủ tục xoá trường liệu X • Tìm đến nút có trường liệu X • Áp dụng thủ tục Del để xoá Sau viết thủ tục loại khỏi gốc Root đỉnh có khoá x cho trước Đó thủ tục đệ qui, tìm đỉnh có khoá x, sau áp dụng thủ tục Del để loại đỉnh khỏi procedure Delete (var Root :Tree ; x : keytype); begin if Root nil then if x < Root^.info then Delete (Root^.left, x) else if x > Root^.info then Delete (Root^.right, x) else Del(Root); end; Nhận xét: Việc huỷ toàn thực thông qua thao tác duyệt theo thứ sau Nghĩa ta huỷ trái, phải huỷ nút gốc 153/159 procedure RemoveTree (var Root: Tree); begin if Root nil then begin RemoveTree(Root^.left); RemoveTree(Root^.right); Dispose (Root); end; end; 154/159 Bài 15: Thực hành cài đặt nhị phân tìm kiếm Thực hành cài đặt nhị phân tìm kiếm THỰC HÀNH CÀI ĐẶT CÂY NHỊ PHÂN TÌM KIẾM Cài đặt nhị phân tìm kiếm với phương thức: Khởi tạo Thêm nút Xóa nút Tìm kiếm 155/159 Tham gia đóng góp Tài liệu: Cấu trúc liệu giải thuật Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên URL: http://voer.edu.vn/c/fe7df99c Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Mục lục Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/48de4a98 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Giải thuật cấu trúc liệu Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/6a29d1a3 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Phân tích thiết kế toán Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/32569f6a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Phân tích thời gian thực thuật toán Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/a7204439 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Mảng danh sách Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/9461a675 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách nối đơn (Singlely Linked List) Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/578aa05e 156/159 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực hành cài đặt danh sách nối đơn Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/1038f94e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách tuyến tính ngăn xếp (Stack) Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/a208ce0f Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách tuyến tính kiểu hàng đợi Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/387652b5 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực hành đặt danh sách kiểu hàng đợi Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/27f6f7c3 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách nối vòng nối kép Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/556b338a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực hành cài đặt danh sách liên kết kép Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/b1a9a363 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Kiểu liệu Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/2ff63fcb Giấy phép: http://creativecommons.org/licenses/by/3.0/ 157/159 Module: Thực hành cài đặt nhị phân Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/a5c4789c Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cây nhị phân ứng dụng Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/58472201 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực hành cài đặt nhị phân tìm kiếm Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên URL: http://www.voer.edu.vn/m/c00632bd Giấy phép: http://creativecommons.org/licenses/by/3.0/ 158/159 Chương trình Thư viện Học liệu Mở Việt Nam Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources – VOER) hỗ trợ Quỹ Việt Nam Mục tiêu chương trình xây dựng kho Tài nguyên giáo dục Mở miễn phí người Việt cho người Việt, có nội dung phong phú Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0 nội dung sử dụng, tái sử dụng truy nhập miễn phí trước hết trong môi trường giảng dạy, học tập nghiên cứu sau cho toàn xã hội Với hỗ trợ Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) trở thành cổng thông tin cho sinh viên giảng viên Việt Nam Mỗi ngày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, học tập tải tài liệu giảng dạy Với hàng chục nghìn module kiến thức từ hàng nghìn tác giả khác đóng góp, Thư Viện Học liệu Mở Việt Nam kho tàng tài liệu khổng lồ, nội dung phong phú phục vụ cho tất nhu cầu học tập, nghiên cứu độc giả Nguồn tài liệu mở phong phú có VOER có chia sẻ tự nguyện tác giả nước Quá trình chia sẻ tài liệu VOER trở lên dễ dàng đếm 1, 2, nhờ vào sức mạnh tảng Hanoi Spring Hanoi Spring tảng công nghệ tiên tiến thiết kế cho phép công chúng dễ dàng chia sẻ tài liệu giảng dạy, học tập chủ động phát triển chương trình giảng dạy dựa khái niệm học liệu mở (OCW) tài nguyên giáo dục mở (OER) Khái niệm chia sẻ tri thức có tính cách mạng khởi xướng phát triển tiên phong Đại học MIT Đại học Rice Hoa Kỳ vòng thập kỷ qua Kể từ đó, phong trào Tài nguyên Giáo dục Mở phát triển nhanh chóng, UNESCO hỗ trợ chấp nhận chương trình thức nhiều nước giới 159/159 [...]... giải quyết và những thao tác sẽ tiến hành trên dữ liệu vào Có những thuật toán chỉ thích ứng với một cách tổ chức dữ liệu nhất định, đối với những cách tổ chức dữ liệu khác thì sẽ kém hiệu quả hoặc không thể thực hiện được Chính vì vậy nên bước xây dựng cấu trúc dữ liệu không thể tách rời bước tìm kiếm thuật toán giải quyết vấn đề Các tiêu chuẩn khi lựa chọn cấu trúc dữ liệu • Cấu trúc dữ liệu trước... học xong chuyên đề này, qua những cấu trúc dữ liệu và giải thuật hết sức mẫu mực, chúng ta rút ra được bài học kinh nghiệm: Đừng bao giờ viết chương trình khi mà chưa suy xét kỹ về giải thuật và những dữ liệu cần thao tác, bởi như vậy ta dễ mắc phải hai sai lầm trầm trọng: hoặc là sai về giải thuật, hoặc là giải thuật không thể triển khai nổi trên một cấu trúc dữ liệu không phù hợp Chỉ cần mắc một... thông tin nhập và xuất của bài toán • Cấu trúc dữ liệu phải phù hợp với các thao tác của thuật toán mà ta lựa chọn để giải quyết bài toán • Cấu trúc dữ liệu phải cài đặt được trên máy tính với ngôn ngữ lập trình đang sử dụng Đối với một số bài toán, trước khi tổ chức dữ liệu ta phải viết một đoạn chương trình nhỏ để khảo sát xem dữ liệu cần lưu trữ lớn tới mức độ nào Xác định thuật toán Thuật toán là... một vài trường hợp cụ thể để thông qua đó hiểu được bài toán rõ hơn và thấy được các thao tác cần phải tiến hành Đối với những bài toán đơn giản, đôi khi chỉ cần qua ví dụ là ta đã có thể đưa về một bài toán quen thuộc để giải Tìm cấu trúc dữ liệu biểu diễn bài toán Khi giải một bài toán, ta cần phải định nghĩa tập hợp dữ liệu để biểu diễn tình trạng cụ thể Việc lựa chọn này tuỳ thuộc vào vấn đề cần giải. .. toán trong hàng không, phẫu thuật, … Các bước phân tích thuật toán Bước đầu tiên trong việc phân tích một thuật toán là xác định đặc trưng dữ liệu sẽ được dùng làm dữ liệu nhập của thuật toán và quyết định phân tích nào là thích hợp Về mặt lý tưởng, chúng ta muốn rằng với một phân bố tùy ý được cho của dữ liệu nhập, sẽ có sự phân bố tương ứng về thời gian hoạt động của thuật toán Chúng ta không thể... ước lượng để tránh sa vào chi tiết Cách đánh giá thời gian thực hiện giải thuật độc lập với máy tính và các yếu tố liên quan tới máy như vậy sẽ dẫn đến khái niệm về “ cấp độ lớn của thời gian thực hiện giải thuật hay nói cách khác là “độ phức tạp tính toán của giải thuật Nếu thời gian thực hiện một giải thuật là T(n) = cn2 (c = const) thì ta nói độ phức tạp tính toán của giải thuật này có cấp là n2... chẽ và rõ ràng các quy tắc nhằm xác định một dãy thao tác trên cấu trúc dữ liệu sao cho: Với một bộ dữ liệu vào, sau một số hữu hạn bước thực hiện các thao tác đã chỉ ra, ta đạt được mục tiêu đã định Các đặc trưng của thuật toán • Tính đơn nghĩa Ở mỗi bước của thuật toán, các thao tác phải hết sức rõ ràng, không gây nên sự 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 và tính... liệu thử đặc trưng cho tất cả tập các dữ liệu vào của thuật toán là rất khó khăn và tốn nhiều chi phí • Các số liệu thu nhận được phụ thuộc nhiều vào phần cứng mà thuật toán được thử nghiệm trên đó Điều này khiến cho việc so sánh các thuật toán khó khăn nếu chúng được thử nghiệm ở những nơi khác nhau Vì những lý do trên, người ta đã tìm kiếm những phương pháp đánh giá thuật toán hình thức hơn, ít phụ thuộc... x = b hay x = (a + b) div 2, thuật toán sẽ luôn cho một giá trị 10/159 duy nhất với dữ liệu vào là hai số tự nhiên a và b Nhưng nếu ta viết x = a + Random(b - a + 1) thì sẽ có thể thu được các kết quả khác nhau trong mỗi lần thực hiện với input là a và b tuỳ theo máy tính và bộ tạo số ngẫu nhiên • Tính dừng Thuật toán không được rơi vào quá trình vô hạn, phải dừng lại và cho kết quả sau một số hữu... Phân tích và thiết kế bài toán 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 Xác định bài toán Input → Process → Output (Dữ liệu vào → Xử lý → Kết quả ra) Việc xác định bài toán tức là phải xác định xem ta phải giải quyết vấn đề gì?, với giả thiết nào đã cho và lời giải cần phải đạt những yêu cầu gì Khác với bài toán thuần tuý toán học chỉ cần xác định rõ giả thiết và kết luận