1. Trang chủ
  2. » Giáo án - Bài giảng

Cấu trúc dữ liệu và giải thuật

188 7 0

Đ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

Nội dung

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG  KHOA CÔNG NGHỆ THÔNG TIN BÀI GIẢNG IT CẤU TRÚC DỮ LIỆU PT VÀ GIẢI THUẬT NGUYỄN DUY PHƯƠNG HàNội 2013 LỜI NÓI ĐẦU Cấu trúc liệu giải thuật môn học sinh viên ngành Công nghệ thông tin Các cấu trúc liệu giải thuật xem yếu tố quan trọng lập trình, câu nói tiếng Niklaus Wirth: Chương trình = Cấu trúc liệu + Giải thuật (Programs = Data Structures + Algorithms) Nắm vững cấu trúc liệu giải thuật sở để sinh viên tiếp cận với việc thiết kế xây dựng phần mềm sử dụng cơng cụ lập trình đại Cấu trúc liệu xem phương pháp lưu trữ liệu máy tính nhằm sử dụng cách có hiệu liệu Và để sử dụng liệu cách hiệu cần phải có thuật tốn áp dụng liệu Do vậy, cấu trúc liệu giải thuật yếu tố khơng thể tách rời có liên quan chặt chẽ với Việc lựa chọn cấu trúc liệu ảnh hưởng lớn tới việc lựa chọn áp dụng giải thuật Tài liệu “Cấu trúc liệu giải thuật” bao gồm chương, trình bày cấu trúc liệu giải thuật tin học PT IT Chương trình bày phân tích thiết kế thuật tốn Đầu tiên cách phân tích vấn đề, từ thực tiễn chương trình, cách thiết kế giải pháp cho vấn đề theo cách giải máy tính Tiếp theo, phương pháp phân tích, đánh giá độ phức tạp thời gian thực giải thuật xem xét chương Chương trình bày đệ qui, khái niệm toán học khoa học máy tính Việc sử dụng đệ qui xây dựng chương trình giải vấn đề phức tạp số câu lệnh, đặc biệt vấn đề mang chất đệ qui Chương 3, 4, 5, trình bày cấu trúc liệu sử dụng thông dụng mảng danh sách liên kết, ngăn xếp hàng đợi, cây, đồ thị Đó cấu trúc liệu gần gũi với cấu trúc thực tiễn Chương trình bày thuật tốn xếp tìm kiếm Các thuật tốn với kỹ thuật sử dụng coi kỹ thuật sở cho lập trình máy tính Các thuật tốn xem xét bao gồm lớp thuật toán đơn giản thuật tốn cài đặt phức tạp có thời gian thực tối ưu Cuối phần có câu hỏi tập để sinh viên ôn luyện tự kiểm tra kiến thức Cuối tài liệu có phụ lục hướng dẫn trả lời câu hỏi, mã nguồn tham khảo tài liệu tham khảo Về nguyên tắc, cấu trúc liệu giải thuật biểu diễn cài đặt ngơn ngữ lập trình đại Tuy nhiên, để có phân tích sâu sắc có kết thực tế hơn, tác giả sử dụng ngơn ngữ lập trình C để minh hoạ cho cấu trúc liệu thuật toán Do vậy, kiến thức tin học, người đọc cần có kiến thức ngơn ngữ lập trình C Cuối cùng, cố gắng chắn không tránh khỏi thiếu sót Tác giả mong nhận góp ý bạn đọc đồng nghiệp để tài liệu hoàn thiện Hà nội, tháng 0610/2010 MỤC LỤC CHƯƠNG I: PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT 1.1 GIẢI THUẬT VÀ NGÔN NGỮ DIỄN ĐẠT GIẢI THUẬT 1.1.1 Giải thuật 1.1.2 Ngôn ngữ diễn đạt giải thuật kỹ thuật tinh chỉnh bước 1.2 PHÂN TÍCH THUẬT TOÁN 1.2.1 Ước lượng thời gian thực chương trình 1.2.2 Tính tốn thời gian thực chương trình 10 1.3 TÓM TẮT CHƯƠNG 12 1.4 CÂU HỎI VÀ BÀI TẬP 13 IT CHƯƠNG 2: ĐỆ QUI 14 2.1 KHÁI NIỆM 14 PT 2.1.1 Điều kiện để viết chương trình đệ qui 15 2.1.2 Khi không nên sử dụng đệ qui 16 2.2 THIẾT KẾ GIẢI THUẬT ĐỆ QUI 17 2.2.1 Chương trình tính hàm n! 17 2.2.2 Thuật tốn Euclid tính ước số chung lớn số nguyên dương 18 2.2.3 Các giải thuật đệ qui dạng chia để trị (divide and conquer) 18 2.2.4 Thuật toán quay lui (backtracking algorithms) 23 2.3 TÓM TẮT CHƯƠNG 32 2.4 CÂU HỎI VÀ BÀI TẬP 32 CHƯƠNG 3: MẢNG VÀ DANH SÁCH LIÊN KẾT 34 3.1 CẤU TRÚC DỮ LIỆU KIỂU MẢNG (ARRAY) 34 3.2 DANH SÁCH LIÊN KẾT 35 3.2.1 Khái niệm 35 3.2.2 Các thao tác danh sách liên kết 36 3.2.3 Một số dạng khác danh sách liên kết 45 3.3 TÓM TẮT CHƯƠNG 48 3.4 CÂU HỎI VÀ BÀI TẬP 48 I CHƯƠNG 4: NGĂN XẾP VÀ HÀNG ĐỢI 49 4.1 NGĂN XẾP (STACK) 49 4.1.1 Khái niệm 49 4.1.2 Cài đặt ngăn xếp mảng 50 4.1.3 Cài đặt ngăn xếp danh sách liên kết 52 4.1.4 Một số ứng dụng ngăn xếp 55 4.2 HÀNG ĐỢI (QUEUE) 63 4.2.1 Khái niệm 63 4.2.2 Cài đặt hàng đợi mảng 65 4.2.3 Cài đặt hàng đợi danh sách liên kết 67 4.3 TÓM TẮT CHƯƠNG 69 4.4 CÂU HỎI VÀ BÀI TẬP 69 CHƯƠNG 5: CẤU TRÚC DỮ LIỆU KIỂU CÂY 70 5.1 KHÁI NIỆM 70 IT 5.2 CÀI ĐẶT CÂY 71 5.2.1 Cài đặt mảng nút cha 71 5.2.2 Cài đặt thông qua danh sách nút 72 PT 5.3 DUYỆT CÂY 73 5.3.1 Duyệt thứ tự trước 73 5.3.2 Duyệt thứ tự 74 5.3.3 Duyệt thứ tự sau 75 5.4 CÂY NHỊ PHÂN 75 5.4.1 Cài đặt nhị phân mảng 76 5.4.2 Cài đặt nhị phân danh sách liên kết 77 5.4.3 Duyệt nhị phân 78 5.5 TÓM TẮT CHƯƠNG 78 5.6 CÂU HỎI VÀ BÀI TẬP 79 CHƯƠNG 6: ĐỒ THỊ 80 6.1 CÁC KHÁI NIỆM CƠ BẢN 80 6.1.1 Đồ thị có hướng 80 6.1.2 Đồ thị vô hướng 81 6.1.3 Đồ thị có trọng số 81 6.2 BIỂU DIỄN ĐỒ THỊ 82 II 6.2.1 Biểu diễn đồ thị ma trận kề 82 6.2.2 Biểu diễn đồ thị danh sách kề 84 6.3 DUYỆT ĐỒ THỊ 84 6.3.1 Duyệt theo chiều sâu 84 6.3.2 Duyệt theo chiều rộng 86 6.3.3 Ứng dụng duyệt đồ thị để kiểm tra tính liên thông 88 6.4 TÓM TẮT CHƯƠNG 88 6.5 CÂU HỎI VÀ BÀI TẬP 89 CHƯƠNG 7: SẮP XẾP VÀ TÌM KIẾM 90 7.1 BÀI TOÁN SẮP XẾP 90 7.2 CÁC GIẢI THUẬT SẮP XẾP ĐƠN GIẢN 91 7.2.1 Sắp xếp chọn 91 7.2.2 Sắp xếp chèn 93 7.2.3 Sắp xếp bọt 95 IT 7.3 QUICK SORT 97 PT 7.3.1 Giới thiệu 97 7.3.2 Các bước thực giải thuật 98 7.3.3 Cài đặt giải thuật 99 7.4 HEAP SORT 100 7.4.1 Giới thiệu 100 7.4.2 Các thuật toán heap 101 7.5 MERGE SORT (SẮP XẾP TRỘN) 109 7.5.1 Giới thiệu 109 7.5.2 Trộn dãy 109 7.5.3 Sắp xếp trộn 113 7.6 BÀI TỐN TÌM KIẾM 114 7.7 TÌM KIẾM TUẦN TỰ 115 7.8 TÌM KIẾM NHỊ PHÂN 115 7.9 CÂY NHỊ PHÂN TÌM KIẾM 117 7.9.1 Tìm kiếm nhị phân tìm kiếm 118 7.9.2 Chèn phần tử vào nhị phân tìm kiếm 119 7.9.3 Xoá nút khỏi nhị phân tìm kiếm 121 7.10 TÓM TẮT CHƯƠNG 122 III 7.11 CÂU HỎI VÀ BÀI TẬP 123 PHỤ LỤC I: HƯỚNG DẪN GIẢI CÂU HỎI VÀ BÀI TẬP 124 PHỤ LỤC II: MÃ NGUỒN THAM KHẢO 127 PT IT TÀI LIỆU THAM KHẢO 148 IV CHƯƠNG PHÂN TÍCH VÀ THIẾT KẾ GIẢI THUẬT Chương trình bày khái niệm giải thuật phương pháp tinh chỉnh bước chương trình thể qua ngơn ngữ diễn đạt giải thuật Chương nêu phương pháp phân tích đánh giá thuật tốn, khái niệm liên quan đến việc tính tốn thời gian thực chương trình Trong phần có minh hoạ cụ thể Phần đầu đưa ví dụ tốn nút giao thơng phương pháp giải tốn từ phân tích vấn đề thiết kế giải thuật, tinh chỉnh bước mức cụ thể Phần đưa ví dụ phân tích tính tốn thời gian thực giải thuật xếp bọt IT Để học tốt chương này, sinh viên cần nắm vững phần lý thuyết tìm ví dụ tương tự để thực hành phân tích, thiết kế, đánh giá giải thuật 1.1 GIẢI THUẬT VÀ NGÔN NGỮ DIỄN ĐẠT GIẢI THUẬT 1.1.1 Giải thuật PT Trong thực tế, gặp phải vấn đề cần phải giải quyết, ta cần phải đưa phương pháp để giải vấn đề Khi muốn giải vấn đề cách sử dụng máy tính, ta cần phải đưa giải pháp phù hợp với việc thực thi chương trình máy tính Thuật ngữ “thuật tốn” dùng để giải pháp Thuật tốn định nghĩa sau: Thuật toán chuỗi hữu hạn lệnh Mỗi lệnh có ngữ nghĩa rõ ràng thực với lượng hữu hạn tài nguyên khoảng hữu hạn thời gian Chẳng hạn lệnh x = y + z lệnh có tính chất Trong thuật tốn, lệnh lặp lặp lại nhiều lần, nhiên liệu đầu vào nào, thuật toán phải kết thúc sau thực thi số hữu hạn lệnh Như nói trên, lệnh thuật tốn phải có ngữ nghĩa rõ ràng thực thi khoảng thời gian hữu hạn Tuy nhiên, lệnh có ngữ nghĩa rõ ràng người lại không rõ ràng người khác Ngồi ra, thường khó để chứng minh lệnh thực khoảng hữu hạn thời gian Thậm chí, kể biết rõ ngữ nghĩa lệnh, khó để chứng minh với liệu đầu vào nào, thuật toán dừng Tiếp theo, xem xét ví dụ xây dựng thuật tốn cho tốn đèn giao thơng: Giả sử người ta cần thiết kế hệ thống đèn cho nút giao thơng có nhiều đường giao phức tạp Để xây dựng tập trạng thái đèn giao thơng, ta cần phải xây dựng chương trình có đầu vào tập ngã rẽ phép nút giao thông (lối thẳng xem ngã rẽ) chia tập thành số nhóm, cho tất ngã rẽ nhóm lúc mà khơng xảy tranh chấp Sau đó, gắn trạng thái đèn giao thông với nhóm vừa phân chia Với cách phân chia có số nhóm nhất, ta xây dựng hệ thống đèn giao thơng có trạng thái Chẳng hạn, ta xem xét toán với nút giao thơng cho hình 1.1 Trong nút giao thông trên, C E đường chiều, đường lại chiều Có tất 13 ngã rẽ nút giao thơng Một số ngã rẽ đồng thời, chẳng hạn ngã rẽ AB (từ A rẽ sang B) EC Một số ngã rẽ khơng đồng thời (gây tuyến giao thông xung đột nhau), chẳng hạn AD EB Hệ thống đèn nút giao thông phải hoạt động cho ngã rẽ xung đột (chẳng hạn AD EB) không cho phép thời điểm, ngã rẽ không xung đột thời điểm E D C B IT A Hình 1.1 Nút giao thơng PT Chúng ta mơ hình hóa vấn đề cấu trúc toán học gọi đồ thị (sẽ trình bày chi tiết chương 5) Đồ thị cấu trúc bao gồm tập điểm gọi đỉnh tập đường nối điểm, gọi cạnh Vấn đề nút giao thơng mơ hình hóa đồ thị, ngã rẽ đỉnh, có cạnh nối đỉnh biểu thị ngã rẽ khơng thể đồng thời Khi đó, đồ thị nút giao thơng hình 1.1 biểu diễn hình 1.2 AB AC AD BA BC BD DA DB DC EA EB EC ED Hình 1.2 Đồ thị ngã rẽ Ngồi cách biểu diễn trên, đồ thị cịn biểu diễn thơng qua bảng, phần tử hàng i, cột j có giá trị có cạnh nối đỉnh i đỉnh j AB AC AD AB BA BC BD DA 1 1 AC DB DC EA EB EC ED 1 AD 1 1 BA BC BD 1 DA 1 DB 1 1 1 1 1 DC EB EC ED 1 1 1 1 1 1 IT EA PT Bảng 1.1 Biểu diễn đồ thị ngã rẽ bảng Ta sử dụng đồ thị để giải vấn đề thiết kế hệ thống đèn cho nút giao thơng nói Việc tơ màu đồ thị việc gán cho đỉnh đồ thị màu cho khơng có hai đỉnh nối cạnh lại có màu Dễ thấy vấn đề nút giao thơng chuyển thành tốn tơ màu đồ thị ngã rẽ cho phải sử dụng số màu Bài tồn tơ màu đồ thị toán xuất nghiên cứu từ lâu Tuy nhiên, để tô màu đồ thị với số màu toán phức tạp Để giải toán này, người ta thường sử dụng phương pháp “vét cạn” để thử tất khả Có nghĩa, thử tiến hành tô màu đồ thị màu, dùng màu, màu, v.v tìm phương pháp tơ màu thoả mãn u cầu Phương pháp vét cạn thích hợp với đồ thị nhỏ, nhiên đồ thị phức tạp tiêu tốn nhiều thời gian thực tài nguyên hệ thống Ta tiếp cận vấn đề theo hướng cố gắng tìm giải pháp đủ tốt, khơng thiết phải giải pháp tối ưu Chẳng hạn, ta cố gắng tìm giải pháp tơ màu cho đồ thị ngã rẽ với số màu ít, gần với số màu nhất, thời gian thực việc tìm giải pháp nhanh Giải thuật tìm giải pháp đủ tốt chưa phải tối ưu gọi giải thuật tìm theo “cảm tính” Đối với tốn tơ màu đồ thị, thuật tốn cảm tính thường sử dụng thuật toán “tham ăn” (greedy) Theo thuật toán này, ta sử dụng màu để tô nhiều số đỉnh có thể, thoả mãn yêu cầu toán Tiếp theo, sử dụng màu thứ để tô đỉnh chưa tô bước 1, sử dụng đến màu thứ để tô đỉnh chưa tô bước 2, v.v Để tô màu đỉnh với màu mới, thực bước: - Lựa chọn đỉnh chưa tô màu tơ màu - Duyệt qua đỉnh chưa tô màu Với đỉnh dạng này, kiểm tra xem có cạnh nối với đỉnh vừa tô màu hay không Nếu khơng có cạnh ta tơ màu đỉnh màu Thuật toán gọi “tham ăn” bước tơ màu tất đỉnh mà khơng cần phải xem xét xem việc tơ màu có để lại điểm bất lợi cho bước sau hay không Trong nhiều trường hợp, tơ màu nhiều đỉnh màu bớt “tham ăn” bỏ qua số đỉnh tơ màu bước trước Ví dụ, xem xét đồ thị hình 1.3, đỉnh tơ màu đỏ Ta thấy hồn tồn tô đỉnh màu đỏ, với điều kiện ta không tô đỉnh số màu đỏ Tuy nhiên, ta áp dụng thuật toán tham ăn theo thứ tự đỉnh lớn dần đỉnh đỉnh màu đỏ, đỉnh 3, khơng tơ màu đỏ IT a) Đồ thị ban đầu b) Tơ màu theo thuật tốn tham ăn c) Một cách tô màu tốt PT 5 Hình 1.3 Đồ thị Bây ta xem xét thuật toán tham ăn áp dụng đồ thị ngã rẽ hình 1.2 Giả sử ta đỉnh AB tô cho đỉnh màu xanh Khi đó, ta tơ cho đỉnh AC màu xanh khơng có cạnh nối đỉnh với AB AD tơ màu xanh khơng có cạnh nối AD với AB, AC Đỉnh BA khơng có cạnh nối tới AB, AC, AD nên tơ màu xanh Tuy nhiên, đỉnh BC khơng tơ màu xanh tồn cạnh nối BC AB Tương tự vậy, BD, DA, DB khơng thể tơ màu xanh tồn cạnh nối chúng tới đỉnh tô màu xanh Cạnh DC tơ màu xanh Cuối cùng, cạnh EA, EB, EC tô màu xanh ED tơ màu xanh 27 Một từ hiểu dãy ký tự khơng chứa khoảng trống, dấu tab, dấu xuống dịng dấu đầu dịng Ta nói, từ X nối với từ Y ký tự từ X trùng với ký tự cuối từ Y (Ví dụ từ X = ”ABC” nối với từ Y =”EFA”) Yêu cầu: Cho xâu ký tự S có khơng q 80 từ (các từ S lặp lại) Hãy cho biết nối tất từ S để tạo nên từ theo nguyên tắc nêu hay khơng? Input: Dịng ghi số test, khơng lớn 100 Mỗi test xâu ký tự S viết dòng Output: Viết dòng giá trị “YES” “NO” ta thực khơng thực u cầu đặt tốn Ví dụ cho Input Output: INPUT OUTPUT YES NO IT ABC DEA ABC EAD DEA EAD ABC ABD ABF ABG ADH ADA PT 28 Cho hệ thống giao thông gồm N điểm (N250) Biết hai điểm hệ thống có đường trực tiếp gián tiếp thông qua điểm trung gian Hãy cho biết ta định chiều lại tồn hệ thống giao thông cho hai điểm hệ thống tồn đường chiều hay khơng? Input: Dịng ghi số test, không lớn 100 Mỗi test tổ chức sau:  Dòng thứ ghi lại số N số điểm node giao thông hệ thống;  N dịng ghi lại ma trận vng A = (aij) cấp N biểu diễn hệ thống giao thơng Trong đó, aij = khơng có đường trực tiếp từ điểm i đến j, aij = có đường trực tiếp từ điểm i đến j Output: Với test, viết dòng giá trị “YES” hệ thống giao thơng định chiều được, giá trị “NO” hệ thống giao thông định chiều Ví dụ cho Input Output: 168 INPUT OUTPUT NO YES 1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 N IT 29 Số Nnguyên hệ số ACM số nguyên thông thường sử dụng ký hiệu từ 0, 1, ,9 làm ký hiệu hệ đếm (Ví dụ số 719ACM) Nguyên tắc chung để đổi số A =(a1, a2, ,aN) hệ số ACM sang số hệ số 10 thực sau: K 10   * (i!) , chữ số vị trí thứ i hệ số ACM Ví dụ: PT i 1 A = 719ACM = 9.(1!) + 1.(2!) + 7.(3!) = 5310 Nhiệm vụ bạn viết chương trình đọc số nguyên hệ số ACM đổi số thành số hệ số 10 Dữ liệu vào: Dữ liệu vào gồm nhiều liệu tương ứng với nhiều test Dòng chứa số nguyên không lớn 100 số lượng liệu Những dòng chứa liệu Mỗi liệu viết dòng Mỗi dòng viết số nhỏ 232 số hệ số ACM Dữ liệu ra: Với liệu, ghi dòng số chuyển đổi Ví dụ liệu vào Ví dụ liệu 169 53 719 1 15 110 102 PT IT 170 30 Cho hệ thống giao thông gồm N điểm Biết hai điểm hệ thống tồn đường trực tiếp gián tiếp thông qua số điểm trung gian Ta gọi điểm giao thông s điểm thắt cặp nút giao thông u, v đường từ s đến t phải qua s Ví dụ với cặp nút 1, hệ thống giao thông gồm điểm có đỉnh thắt s = s =4 Nhiệm vụ bạn viết chương trình tìm số lượng đỉnh thắt s cặp điếm u, v hệ thống giao thông IT Dữ liệu vào: Dữ liệu vào gồm nhiều liệu tương ứng với nhiều test Dòng chứa số nguyên không lớn 100 số lượng liệu Các dòng chứa liệu Mỗi liệu gồm nhóm dịng theo khn dạng: PT  Dịng chứa số nguyên N, M, u, v ( u, v, N100; M1000)  M dòng sau, dòng ghi lại đường nối trực tiếp cặp điểm (i, j) hệ thống giao thông (1i,jN) Dữ liệu ra: Với liệu, ghi dòng số số lượng đỉnh thắt cặp điểm u, v test Ví dụ liệu vào Ví dụ liệu 171 2 2 3 4 3 4 IT PT 31 Cho chuỗi gồm n bít X = (x1, x2, , xn) Ta gọi K tổng bít liền kề chuỗi X ( ký hiệu AdjBC(X)) tính tốn sau: n 1 K   xi xi 1 ; i 1 Ví dụ : AdjBC(011101101) = AdjBC(111101101) = AdjBC(010101010) = Viết chương trình tìm số chuỗi bít có độ dài N có tổng bít liền kề K Ví dụ với N = 5, ta có chuỗi có tổng bít liền kề sau: 11100, 01110, 00111, 10111, 11101, 11011 Input:  Dòng ghi lại số tự nhiên T số test tốn;  T dịng kế tiếp, dòng ghi lại test Mỗi test ghi lại cặp ba số i, N, K Trong đó, i số thứ tự test, N độ dài chuỗi bít, K tổng bít liền kề Các số ghi cách vài khoảng trống Output: 172  Ghi lại số hiệu test số bít liền kề thỏa mãn u cầu tốn dòng Hai số viết cách vào khoảng trống InputB: OutputB: 10 2 63426 20 1861225 30 17 1682122501 40 24 44874764 50 37 160916 60 52 22937308 70 59 99167 80 73 15476 90 84 10 23076518 IT 10 100 90 PT 32 Cho dãy A[] gồm N số tự nhiên khác số tự nhiên K Hãy sử dụng thuật toán sinh viết chương trình liệt kê tất dãy dãy số A[] cho tổng phần tử dãy K Dữ liệu vào cho file dayso.in theo khn dạng sau:  Dịng ghi lại số tự nhiên N số số dãy số A[] số tự nhiên K, hai số viết cách vài khoảng trống;  Dòng ghi lại N số dãy số A[], hai số viết cách vài khoảng trống Các dãy thoả mãn điều kiện tìm ghi lại file ketqua.out theo khn dạng sau:  Dòng ghi lại số dãy có tổng phần tử K tìm được;  Những dịng dịng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ minh hoạ cho file dayso.in ketqua.out toán Dayso.in Ketqua.out 50 10 15 20 25 10 15 25 20 25 10 15 173 20 33 Cho dãy A[] gồm N số tự nhiên khác số tự nhiên K Hãy sử dụng thuật toán quay lui viết chương trình liệt kê tất dãy dãy số A[] cho tổng phần tử dãy K Dữ liệu vào cho file dayso.in theo khn dạng sau:  Dịng ghi lại số tự nhiên N số số dãy số A[] số tự nhiên K, hai số viết cách vài khoảng trống;  Dòng ghi lại N số dãy số A[], hai số viết cách vài khoảng trống Các dãy thoả mãn điều kiện tìm ghi lại file ketqua.out theo khn dạng sau:  Dòng ghi lại số dãy có tổng phần tử K tìm được;  Những dịng dịng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ minh hoạ cho file dayso.in ketqua.out toán 50 10 15 20 25 10 15 25 20 25 10 15 PT Ketqua.out IT Dayso.in 20 34 Cho dãy A[] gồm N số tự nhiên khác số tự nhiên K Hãy sử dụng thuật toán quay nhánh cận viết chương trình liệt kê tất dãy dãy số A[] cho tổng phần tử dãy K Dữ liệu vào cho file dayso.in theo khuôn dạng sau:  Dòng ghi lại số tự nhiên N số số dãy số A[] số tự nhiên K, hai số viết cách vài khoảng trống;  Dòng ghi lại N số dãy số A[], hai số viết cách vài khoảng trống Các dãy thoả mãn điều kiện tìm ghi lại file ketqua.out theo khn dạng sau:  Dịng ghi lại số dãy có tổng phần tử K tìm được;  Những dịng dòng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ minh hoạ cho file dayso.in ketqua.out toán Dayso.in 50 Ketqua.out 174 10 15 20 25 10 15 25 20 25 10 15 20 35 Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, , aN } số tự nhiên K ( KN100) Hãy sử dụng thuật toán sinh viết chương trình liệt kê tất dãy K phần tử tăng dần tự nhiên dãy số A[] Dữ liệu vào cho file dayso.in theo khuôn dạng sau:  Dòng ghi lại hai số tự nhiên N, K Hai số viết cách vài khoảng trống;  Những dòng ghi lại N số nguyên dãy số A[], hai số khác viết cách vài khoảng trống Các dãy K phần tử tăng dần dãy số A[] tìm ghi lại file ketqua.out theo khn dạng: IT  Dòng ghi lại số tự nhiên M số dãy K phần tử tăng dần dãy số A[] tìm được;  M dịng kế tiếp, dòng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ với file dayso.in cho ta file ketqua.out tương ứng dayso.in PT ketqua.out 15 10 20 15 10 20 15 20 10 20 15 20 10 20 36 Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, , aN } số tự nhiên K ( KN100) Hãy sử dụng thuật toán sinh viết chương trình liệt kê tất dãy K phần tử tăng dần tự nhiên dãy số A[] Dữ liệu vào cho file dayso.in theo khn dạng sau:  Dịng ghi lại hai số tự nhiên N, K Hai số viết cách vài khoảng trống;  Những dòng ghi lại N số nguyên dãy số A[], hai số khác viết cách vài khoảng trống 175 Các dãy K phần tử tăng dần dãy số A[] tìm ghi lại file ketqua.out theo khn dạng:  Dịng ghi lại số tự nhiên M số dãy K phần tử tăng dần dãy số A[] tìm được;  M dòng kế tiếp, dòng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ với file dayso.in cho ta file ketqua.out tương ứng dayso.in 15 10 20 15 10 20 15 20 10 20 15 20 IT ketqua.out 10 20 PT 37 Cho ma trận vuông C = (cij) cấp N (1 i, j  N100) gồm N2 số tự nhiên (các số không thiết phải khác nhau) ghi lại file matran.in theo khn dạng sau :  Dịng ghi lại số tự nhiên N cấp ma trận vuông C;  N dòng ghi lại ma trận vuông C = (cij) Hai phần tử khác ma trận ghi cách vài khoảng trống Hãy sử dụng thuật tốn sinh thích hợp viết chương trình lấy hàng, cột phần tử ma trận C cho tổng phần tử nhỏ Kết tìm ghi lại file ketqua.out theo khuôn dạng:  Dòng ghi lại tổng giá trị nhỏ N phần tử tìm được;  N dịng kế tiếp, dòng ghi lại ba số i, j, cij tương ứng với số hàng, số cột giá trị phần tử tương ứng ma trận Ba số viết cách vài khoảng trống Ví dụ file matran.in ketqua.out: matran.in ketqua.out 82 10 64 57 29 18 15 1 10 34 20 19 30 16 12 12 176 57 49 40 16 11 19 16 29 21 46 26 21 18 21 28 16 11 21 21 37 11 15 12 15 48 37 30 12 38 Cho ma trận vuông C = (cij) cấp N (1 i, j  N100) gồm N2 số tự nhiên (các số không thiết phải khác nhau) ghi lại file matran.in theo khuôn dạng sau :  Dòng ghi lại số tự nhiên N cấp ma trận vuông C;  N dịng ghi lại ma trận vng C = (cij) Hai phần tử khác ma trận ghi cách vài khoảng trống Hãy sử dụng thuật tốn quay lui viết chương trình lấy hàng, cột phần tử ma trận C cho tổng phần tử nhỏ Kết tìm ghi lại file ketqua.out theo khn dạng: IT  Dịng ghi lại tổng giá trị nhỏ N phần tử tìm được;  N dịng kế tiếp, dòng ghi lại ba số i, j, cij tương ứng với số hàng, số cột giá trị phần tử tương ứng ma trận Ba số viết cách vài khoảng trống PT Ví dụ file matran.in ketqua.out: matran.in ketqua.out 82 10 64 57 29 18 15 1 10 34 20 19 30 16 12 12 57 49 40 16 11 19 16 29 21 46 26 21 18 21 28 16 11 21 21 37 11 15 12 15 48 37 30 12 39 Cho ma trận vuông C = (cij) cấp N (1 i, j  N100) gồm N2 số tự nhiên (các số không thiết phải khác nhau) ghi lại file matran.in theo khuôn dạng sau :  Dòng ghi lại số tự nhiên N cấp ma trận vuông C;  N dịng ghi lại ma trận vng C = (cij) Hai phần tử khác ma trận ghi cách vài khoảng trống Hãy sử dụng thuật tốn nhánh cận viết chương trình lấy hàng, cột phần tử ma trận C cho tổng phần tử nhỏ Kết tìm ghi lại file ketqua.out theo khn dạng: 177  Dịng ghi lại tổng giá trị nhỏ N phần tử tìm được;  N dịng kế tiếp, dòng ghi lại ba số i, j, cij tương ứng với số hàng, số cột giá trị phần tử tương ứng ma trận Ba số viết cách vài khoảng trống Ví dụ file matran.in ketqua.out: matran.in ketqua.out 82 10 64 57 29 18 15 1 10 34 20 19 30 16 12 12 57 49 40 16 11 19 16 29 21 46 26 21 18 21 28 16 11 21 21 37 11 15 12 15 48 37 30 12 IT 40 Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, , aN } số tự nhiên K ( KN100) Hãy sử dụng thuật tốn sinh viết chương trình liệt kê tất dãy K phần tử giảm dần dãy số A[] Dữ liệu vào cho file dayso.in theo khuôn dạng sau: PT  Dòng ghi lại hai số tự nhiên N, K Hai số viết cách vài khoảng trống  Những dòng ghi lại N số nguyên dãy số A[], hai số khác viết cách vài khoảng trống Các dãy K phần tử giảm dần dãy số A[] tìm ghi lại file ketqua.out theo khn dạng:  Dịng ghi lại số tự nhiên M số dãy K phần tử giảm dần dãy số A[] tìm được;  M dòng kế tiếp, dòng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ với file dayso.in cho ta file ketqua.out tương ứng dayso.in 20 10 ketqua.out 15 20 10 20 10 20 15 20 15 20 178 10 15 41 Cho dãy gồm N số nguyên phân biệt A[] = {a1, a2, , aN } số tự nhiên K ( KN100) Hãy sử dụng thuật tốn quay lui viết chương trình liệt kê tất dãy K phần tử giảm dần dãy số A[] Dữ liệu vào cho file dayso.in theo khn dạng sau:  Dịng ghi lại hai số tự nhiên N, K Hai số viết cách vài khoảng trống  Những dòng ghi lại N số nguyên dãy số A[], hai số khác viết cách vài khoảng trống Các dãy K phần tử giảm dần dãy số A[] tìm ghi lại file ketqua.out theo khuôn dạng: dayso.in 20 10 ketqua.out 15 20 10 20 10 20 15 20 15 20 10 15 PT IT  Dòng ghi lại số tự nhiên M số dãy K phần tử giảm dần dãy số A[] tìm được;  M dịng kế tiếp, dịng ghi lại dãy Hai phần tử khác dãy viết cách vài khoảng trống Ví dụ với file dayso.in cho ta file ketqua.out tương ứng 42 Cho ma trận vuông C = (cij) cấp N (1 i, j  N100) gồm N2 số tự nhiên (các số không thiết phải khác nhau) ghi lại file matran.in theo khn dạng sau :  Dịng ghi lại số tự nhiên N cấp ma trận vuông C;  N dòng ghi lại ma trận vuông C = (cij); Hai phần tử khác ma trận ghi cách vài khoảng trống Hãy sử dụng thuật toán sinh (quay lui, nhánh cận, qui hoạch động) viết chương trình lấy hàng, cột phần tử ma trận C cho tổng phần tử lớn Kết tìm ghi lại file ketqua.out theo khn dạng:  Dịng ghi lại tổng giá trị nhỏ N phần tử tìm được; 179  N dòng kế tiếp, dòng ghi lại ba số i, j, cij tương ứng với số hàng, số cột giá trị phần tử tương ứng ma trận Ba số viết cách vài khoảng trống Ví dụ file viec.in ketqua.out: matran.in ketqua.out 238 10 14 27 29 18 27 27 34 20 19 34 16 12 34 57 37 40 57 11 19 57 29 21 46 26 21 18 46 27 37 11 21 21 37 37 55 12 15 48 37 35 37 IT 43 Cho dãy AN = {a1, a2, ,aN} gồm N số tự nhiên phân biệt Hãy sử dụng thuật toán sinh (quay lui, nhánh cận, qui hoạch động) viết chương trình liệt kê tất dãy K phần tử dãy số AN (KN) cho tổng phần tử dãy số B Dữ liệu vào cho file dayso.in theo khn dạng sau: PT  Dịng ghi lại ba số N, K, B Các số ghi cách vài khoảng trống;  Những dòng ghi lại N số dãy số AN Hai số khác ghi cách vài khoảng trống Các dãy tìm ghi lại file ketqua.out theo khn dạng sau:  Dịng ghi lại số dãy tìm được;  Những dịng kế tiếp, dòng ghi lại dãy thỏa mãn điều kiện Hai số khác ghi cách vài khoảng trống Ví dụ minh họa cho khuôn dạng file dayso.in ketqua.out dayso.in ketqau.out 50 10 15 20 25 20 25 10 15 25 48 Cho file liệu trungto.in theo khn dạng sau:  Dịng ghi lại số tự nhiên N số biểu thức số học biểu diễn dạng trung tố;  N dòng kế tiếp, dòng ghi lại biểu thức trung tố 180 Hãy sử dụng cấu trúc liệu kiểu ngăn xếp viết chương trình dịch chuyển biểu thức trung tố file trungto.in thành file hauto.out Các biểu thức hậu tố dịch chuyển ghi lại file hauto.out theo khuôn dạng sau:  Dòng ghi lại số tự nhiên N số biểu thức hậu tố dịch chuyển được;  N dòng kế tiếp, dòng ghi lại biểu thức hậu tố Ví dụ minh họa cho file trungto.in hauto.out hauto.out 4 (a+b) ab+ (a-b) ab– (a/b) ab/ (a*b) ab* IT trungto.in 49 Cho file liệu hauto.in theo khuôn dạng sau: PT  Dòng ghi lại số tự nhiên N số biểu thức số học biểu diễn dạng hậu tố;  N dòng kế tiếp, dòng ghi lại biểu thức hậu tố Hãy sử dụng cấu trúc liệu kiểu ngăn xếp viết chương trình tính tốn giá trị biểu thức hậu tố file hauto.in Các biểu thức hậu tố dịch chuyển ghi lại file ketqua.out theo khuôn dạng sau:  Dòng ghi lại số tự nhiên N số biểu thức hậu tố;  N dòng kế tiếp, dòng ghi lại giá trị biểu thức hậu tố file Ví dụ minh họa cho file hauto.in ketqua.out hauto.in ketqua.out 4 + – / * 181 TÀI LIỆU THAM KHẢO [1] Aho, Hopcroft & Ullman, Data Structures and Algorithms,Addison Wesley, 2001 [2] Robert Sedewick, Algorithms in Java Third Edition,Addison Wesley, 2002 [3] Niklaus Wirth, Data Structures and Algorithms,Prentice Hall, 2004 [4] Robert Sedewick, Algorithms,Addison Wesley, 1983 PT IT [5] Bruno R Preiss, Data Structures and Algorithms with Object-Oriented Design, Jon Wiley & Sons, 1998 182 ... chẽ với Việc lựa chọn cấu trúc liệu ảnh hưởng lớn tới việc lựa chọn áp dụng giải thuật Tài liệu ? ?Cấu trúc liệu giải thuật? ?? bao gồm chương, trình bày cấu trúc liệu giải thuật tin học PT IT Chương... ĐẦU Cấu trúc liệu giải thuật môn học sinh viên ngành Công nghệ thông tin Các cấu trúc liệu giải thuật xem yếu tố quan trọng lập trình, câu nói tiếng Niklaus Wirth: Chương trình = Cấu trúc liệu. .. giá giải thuật 1.1 GIẢI THUẬT VÀ NGÔN NGỮ DIỄN ĐẠT GIẢI THUẬT 1.1.1 Giải thuật PT Trong thực tế, gặp phải vấn đề cần phải giải quyết, ta cần phải đưa phương pháp để giải vấn đề Khi muốn giải

Ngày đăng: 19/03/2021, 16:52

w