Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
703,7 KB
Nội dung
GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] MÔN: CẤU TRÚC DỮ LIỆU PHÂN TÍCH THIẾT KẾ GIẢI THUẬT (Analisys & Design Algorithm) Nguyễn Xuân Vinh /XX 12/3/15 nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Nội dung Cách tiếp cận từ toán đến chương trình Kiểu liệu trừu tượng (Abstract Data Type) Kiểu liệu – Kiểu liệu trừu tượng – Cấu trúc liệu GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Mô hình hóa toán Để giải toán thực tế máy tính ta phải việc xác định toán "phải làm gì?" "làm nào?" Hầu hết toán không đơn giản, không rõ ràng Để giảm bớt phức tạp toán thực tế hình thức hóa Input Dữ kiện Bài toán thực Mô hình hóa + Giải thuật /XX 12/3/15 tế Dữ liệu Kết Output GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Ví dụ: chọn lớp trưởng Yêu cầu: chọn người có điểm cao làm lớp trưởng Đánh giá: Lập danh sách tất học sinh lớp theo họ tên điểm trung bình Sắp thứ tự học viên giảm dần theo điểm trung bình (học viên có ĐTB có hạng) Chọn lọc lớp trưởng: Nếu có người đứng đầu người làm lớp trưởng Nếu người tiến hành bốc thăm /XX 12/3/15 Dữ liệu Input + Giải thuật Output GV: NGUYỄN XUÂN VINH Ví dụ: Tô màu đồ giới Phát biểu: Ta cần phải tô màu cho nước đồ giới Trong nước tô màu hai nước láng giềng (cùng biên giới) phải tô hai màu khác MÔN: CẤU TRÚC DỮ LIỆU Hãy tìm phương án tô màu cho số màu sử dụng Giải pháp mô hình hóa: Ta xem nước đồ giới đỉnh đồ thị, hai nước láng giềng hai đỉnh ứng với nối với cạnh Bài toán lúc trở thành toán tô màu cho đồ thị sau: Mỗi đỉnh phải tô màu, hai đỉnh có cạnh nối phải tô hai màu khác ta cần tìm phương án tô màu cho số màu sử dụng /XX 12/3/15 GV: NGUYỄN XUÂN VINH Ví dụ: Đèn giao thông Phát biểu: Cho ngã năm đó: C E đường chiều theo chiều mũi tên Các đường khác hai chiều Hãy thiết kế bảng đèn hiệu điều khiển giao thông ngã năm cách hợp lý Nghĩa là: phân chia lối ngã năm thành nhóm, nhóm gồm lối đi đồng thời không xảy tai nạn giao MÔN: CẤU TRÚC DỮ LIỆU thông (các hướng không cắt nhau), số lượng nhóm Phân tích: Tại ngã năm có 13 lối đi: AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC, ED Xác định lối đồng thời Vẽ sơ đồ trực quan Viết tên 13 lối lên mặt phẳng Hai lối đồng thời xảy đụng (tức hai hướng cắt qua nhau) nối lại với /XX 12/3/15 Ta mô hình hoá toán giao thông theo mô hình đồ thị GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Ví dụ: Đèn giao thông Giải pháp: Ta dùng màu tô lên đỉnh đồ thị cho: Các lối đi đồng thời có màu: Tức hai đỉnh có cạnh nối không tô màu Số nhóm nhất: Tức số màu dùng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Ví dụ: Đèn giao thông Click to edit Master text styles Second level Third level Fourth level GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Thuật toán (Algorithms) Thuật toán chuỗi hữu hạn thao tác để giải toán (Knuth (1973) ) Tính chất: Hữu hạn (finiteness): giải thuật phải luôn kết thúc sau số hữu hạn bước (phải có điểm dừng) định (definiteness): bước giải thuật phải xác định rõ ràng phải thực xác, Xác quán Hiệu (effectiveness): thao tác giải thuật phải thực lượng thời gian hữu hạn Phải có đầu vào (input) đầu (output) Biểu diễn giải thuật: Dùng ngôn ngữ tự nhiên Dùng lưu đồ-sơ đồ khối (flowchart) Dùng mã giả (pseudocode) (Sẽ trình bày cách biểu diễn giải thuật phần sau) GV: NGUYỄN XUÂN VINH Heuristic Thuật giải Heuristic mở rộng khái niệm thuật toán Nó thể cách giải toán với đặc tính sau: Thường tìm lời giải tốt (nhưng không lời giải tốt nhất) Giải toán theo thuật giải Heuristic thường dễ dàng nhanh chóng đưa kết so với giải thuật tối ưu, chi phí thấp 10 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Thuật giải Heuristic thường thể tự nhiên, gần gũi với cách suy nghĩ hành động người GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 17 Biểu diễn thuật toán Dùng ngôn ngữ tự nhiên Dùng mã giả (pseudocode) Dùng ngôn ngữ lập trình (Java, C, C++, C#, …) Lưu đồ - sơ đồ khối (flowchart) 18 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH GV: NGUYỄN XUÂN VINH Ngôn ngữ giả & tinh chế bước Khi có mô hình thích hợp cho toán cần hình thức hoá giải thuật thuật ngữ mô hình Ví dụ GREEDY: void Greedy(GRAPH G, SET mauMoi){ mauMoi = Tập rỗng; MÔN: CẤU TRÚC DỮ LIỆU for đỉnh v chưa tô màu thuộc G If v không nối tới đỉnh tập mauMoi{ Tô màu cho đỉnh v; Đưa v vào tập mauMoi; } 19 /XX 12/3/15 } GV: NGUYỄN XUÂN VINH Ngôn ngữ giả & tinh chế bước Sau tinh chỉnh bước ta có: void Greedy(GRAPH g, SET mauMoi){ int tonTai; int v, w; mauMoi = tập rỗng; MÔN: CẤU TRÚC DỮ LIỆU v = đỉnh chưa tô màu G; while v !=null{ tonTai = 0; w = đỉnh mauMoi; while w != null{ if tồn cạnh nối v w G; 20 /XX 12/3/15 tonTai = 1; w = đỉnh mauMoi; If tonTai == 1;{ tô màu cho đỉnh v; } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 21 Các bước tiếp cận với toán Mô hình hoá toán mô hình toán học thích hợp Tìm giải thuật mô hình Giải thuật mô tả cách không hình thức Nó nêu phương hướng giải bước giải cách tổng quát Hình thức hoá giải thuật cách viết thủ tục ngôn ngữ giả Sau đó: chi tiết hoá dần + kiểu liệu trừu tượng + cấu trúc điều khiển ngôn ngữ lập trình mô tả giải thuật Cài đặt giải thuật ngôn ngữ lập trình cụ thể GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 22 Tóm tắt bước Mô hình toán học Kiểu liệu trừu trượng Cấu trúc liệu Giải thuật không hình thức Chương trình ngôn ngữ giả Chương trình Java, C, Pascal… GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 Kiểu liệu trừu tượng (ADT) Khái niệm trừu tượng hóa: Trong tin học, trừu tượng hóa nghĩa đơn giản hóa, làm cho sáng sủa dễ hiểu Cụ thể trừu tượng hóa che chi tiết, làm bật tổng thể Trừu tượng hóa thực hai khía cạnh: Trừu tượng hóa liệu Trừu tượng hóa chương trình GV: NGUYỄN XUÂN VINH Trừu tượng hóa chương trình Trừu tượng hóa chương trình định nghĩa chương trình để tạo phép toán trừu tượng (sự tổng quát hóa phép toán nguyên thủy) Trừu tượng hóa chương trình cho phép phân chia chương trình thành chương trình che dấu tất lệnh cài đặt chi tiết chương trình MÔN: CẤU TRÚC DỮ LIỆU Ví dụ: void Main() { Nhap( Lop); Xu_ly (Lop); 24 /XX 12/3/15 Xuat (Lop);} GV: NGUYỄN XUÂN VINH Trừu tượng hóa liệu Trừu tượng hóa liệu định nghĩa kiểu liệu trừu tượng Một kiểu liệu trừu tượng mô hình toán học với tập hợp phép toán (operator) trừu tượng định nghĩa mô hình 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Ví dụ tập hợp số nguyên với phép toán hợp, giao, hiệu kiểu liệu trừu tượng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 26 Trừu tượng hóa liệu Ví dụ: giải thuật GREEDY Câu lệnh Mệnh đề hình thức MAKENULL(mauMoi) mauMoi = tập rỗng w=FIRST(mauMoi ) w = đỉnh tập mauMoi w=NEXT(w, mauMoi ) w = đỉnh tập mauMoi INSERT(v, mauMoi ) Đưa v vào tập hợp mauMoi GV: NGUYỄN XUÂN VINH Trừu tượng hóa liệu Thuận lợi dùng ADT: Có thể định nghĩa kiểu liệu tuỳ ý với phép toán cần thiết dùng đối tượng nguyên thuỷ Có thể cài đặt ADT cách nào, chương trình dùng chúng không thay đổi, có chương 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU trình biểu diễn cho phép toán ADT thay đổi GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 28 Kiểu liệu – Cấu trúc liệu – Kiểu liệu trừu tượng Kiểu liệu tập hợp giá trị tập hợp phép toán giá trị Kiểu Boolean tập hợp có giá trị TRUE, FALSE phép toán OR, AND, NOT … Kiểu Integer tập hợp số nguyên có giá trị từ -32768 đến 32767 phép toán cộng, trừ, nhân, chia, Div, Mod… Kiểu liệu có hai loại: Kiểu liệu sơ cấp kiểu liệu mà giá trị đơn Ví dụ: kiểu Boolean, Integer… Kiểu liệu có cấu trúc hay gọi cấu trúc liệu kiểu liệu mà giá trị liệu kết hợp giá trị khác Ví dụ: ARRAY cấu trúc liệu GV: NGUYỄN XUÂN VINH Kiểu liệu – Cấu trúc liệu – Kiểu liệu trừu tượng Một kiểu liệu trừu tượng mô hình toán học với tập hợp phép toán Có thể nói kiểu liệu trừu tượng kiểu liệu định nghĩa mức khái niệm (conceptual), chưa cài đặt cụ thể ngôn ngữ lập trình 29 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Khi cài đặt kiểu liệu trừu tượng ngôn gnữ lập trình cụ thể, phải thực hai nhiệm vụ: Biểu diễn kiểu liệu trừu tượng cấu trúc liệu kiểu liệu trừu tượng khác cài đặt Viết chương trình thực phép toán kiểu liệu trừu tượng mà ta thường gọi cài đặt phép toán GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 30 Tóm tắt Trong chương này, cần phải nắm vững vấn đề sau: Các bước phân tích lập trình để toán thực tế Hiểu rõ khái niệm kiểu liệu, kiểu liệu trừu tượng cấu trúc liệu 31 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP [...]... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông 14 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông 15 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông 16 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC... Kiểu dữ liệu có hai loại: Kiểu dữ liệu sơ cấp là kiểu dữ liệu mà giá trị của nó là đơn nhất Ví dụ: kiểu Boolean, Integer… Kiểu dữ liệu có cấu trúc hay còn gọi là cấu trúc dữ liệu là kiểu dữ liệu mà giá trị dữ liệu của nó là sự kết hợp của các giá trị khác Ví dụ: ARRAY là một cấu trúc dữ liệu GV: NGUYỄN XUÂN VINH Kiểu dữ liệu – Cấu trúc dữ liệu – Kiểu dữ liệu trừu tượng Một kiểu dữ liệu trừu... kiểu dữ liệu trừu tượng + các cấu trúc điều khiển trong ngôn ngữ lập trình mô tả giải thuật Cài đặt giải thuật trong một ngôn ngữ lập trình cụ thể GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 22 Tóm tắt các bước Mô hình toán học Kiểu dữ liệu trừu trượng Cấu trúc dữ liệu Giải thuật không hình thức Chương trình ngôn ngữ giả Chương trình Java, C, Pascal… GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ... nguyên thuỷ Có thể cài đặt một ADT bằng bất kỳ cách nào, chương trình dùng chúng cũng không thay đổi, chỉ có các chương 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU trình con biểu diễn cho các phép toán của ADT là thay đổi GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 28 Kiểu dữ liệu – Cấu trúc dữ liệu – Kiểu dữ liệu trừu tượng Kiểu dữ liệu là một tập hợp các giá trị và một tập hợp các phép toán... Viết các chương trình con thực hiện các phép toán trên kiểu dữ liệu trừu tượng mà ta thường gọi là cài đặt các phép toán GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 30 Tóm tắt Trong chương này, chúng ta cần phải nắm vững các vấn đề sau: Các bước phân tích và lập trình để quyết một bài toán thực tế Hiểu rõ khái niệm về kiểu dữ liệu, kiểu dữ liệu trừu tượng và cấu trúc dữ liệu 31 /XX... NGUYỄN XUÂN VINH Trừu tượng hóa dữ liệu Trừu tượng hóa dữ liệu là định nghĩa các kiểu dữ liệu trừu tượng Một kiểu dữ liệu trừu tượng là một mô hình toán học cùng với một tập hợp các phép toán (operator) trừu tượng được định nghĩa trên mô hình đó 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Ví dụ tập hợp số nguyên cùng với các phép toán hợp, giao, hiệu là một kiểu dữ liệu trừu tượng GV: NGUYỄN XUÂN VINH. .. nói kiểu dữ liệu trừu tượng là một kiểu dữ liệu do chúng ta định nghĩa ở mức khái niệm (conceptual), nó chưa được cài đặt cụ thể bằng một ngôn ngữ lập trình 29 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Khi cài đặt một kiểu dữ liệu trừu tượng trên một ngôn gnữ lập trình cụ thể, chúng ta phải thực hiện hai nhiệm vụ: Biểu diễn kiểu dữ liệu trừu tượng bằng một cấu trúc dữ liệu hoặc một kiểu dữ liệu trừu... thông GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 17 Biểu diễn thuật toán Dùng ngôn ngữ tự nhiên Dùng mã giả (pseudocode) Dùng ngôn ngữ lập trình (Java, C, C++, C#, …) Lưu đồ - sơ đồ khối (flowchart) 18 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH GV: NGUYỄN XUÂN VINH Ngôn ngữ giả & tinh chế từng bước Khi đã có mô hình thích hợp cho bài toán cần hình thức hoá một giải thuật... MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 26 Trừu tượng hóa dữ liệu Ví dụ: giải thuật GREEDY Câu lệnh Mệnh đề hình thức MAKENULL(mauMoi) mauMoi = tập rỗng w=FIRST(mauMoi ) w = đỉnh đầu tiên trong tập mauMoi w=NEXT(w, mauMoi ) w = đỉnh kế tiếp trong tập mauMoi INSERT(v, mauMoi ) Đưa v vào tập hợp mauMoi GV: NGUYỄN XUÂN VINH Trừu tượng hóa dữ liệu Thuận lợi khi dùng ADT: Có thể định nghĩa một kiểu dữ liệu. .. mauMoi = Tập rỗng; MÔN: CẤU TRÚC DỮ LIỆU for mỗi đỉnh v chưa được tô màu thuộc G If v không được nối tới đỉnh nào trong tập mauMoi{ Tô màu mới cho đỉnh v; Đưa v vào tập mauMoi; } 19 /XX 12/3/15 } GV: NGUYỄN XUÂN VINH Ngôn ngữ giả & tinh chế từng bước Sau đó tinh chỉnh từng bước ta có: void Greedy(GRAPH g, SET mauMoi){ int tonTai; int v, w; mauMoi = tập rỗng; MÔN: CẤU TRÚC DỮ LIỆU v = đỉnh chưa tô màu ... đổi, có chương 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU trình biểu diễn cho phép toán ADT thay đổi GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 28 Kiểu liệu – Cấu trúc liệu – Kiểu liệu trừu... Heuristic: Greedy: Bài toán giao thông 16 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 17... Heuristic: Greedy: Bài toán giao thông 14 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: Greedy: Bài toán giao thông 15 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Heuristic: