Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
3,1 MB
Nội dung
9/15/2018 Nội dung Vai trò CTDL& GT CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Data Structures & Algorithms Các tiêu chuẩn đánh giá CTDL Kiểu liệu Tổng Quan CTDL GT Thuật toán độ phức tạp Các khái niệm Khái niệm Chương trình máy tính, phần mềm (Computer Chương trình máy tính Software): Danh sách câu lênh, thị Lập trình (Programming) (Instruction) để máy tính thực chức Ngơn ngữ lập trình (Programming language) Trình thơng dịch (Interpreter) Trình biên dịch (compiler) TƯ DUY LẬP TRÌNH ? NGƠN NGỮ LẬP TRÌNH VS NGÔN NGỮ MÁY? Phương pháp giải tốn máy tính 9/15/2018 NGƠN NGỮ MÁY? NGƠN NGỮ LẬP TRÌNH? • Ngơn ngữ máy (machine language) thị dạng nhị phân, can thiệp trực tiếp vào mạch điện tử • Chương trình viết ngơn ngữ máy thực không cần qua bước trung gian • Progamming language ngơn ngữ dùng để viết chương trình cho máy tính • Cũng ngơn ngữ thơng thường, NNLT có từ vựng, cú pháp ngữ nghĩa NGÔN NGỮ MÁY • Ngôn ngữ máy (machine language) thị dạng nhị phân, can thiệp trực tiếp vào mạch điện tử • Chương trình viết ngơn ngữ máy thực không cần qua bước trung gian Machine Language Language directly understood by the computer binary code 10 NGÔN NGỮ CẤP THẤP – HỢP NGỮ • VD: • Hợp ngữ (assembly language) thiết kế để máy tính trở nên thân thiện với người sử dụng • Các câu lệnh bao gồm hai phần: phần mã lệnh (viết tựa tiếng Anh) phép toán cần thực phần tên biến địa chứa toán hạng phép tốn Machine Language Language directly understood by the computer Symbolic Language English-like abbreviations representing elementary computer operations Tuy nhiên chương trình viết ngơn ngữ máy dễ sai sót, cồng kềnh khó đọc, khó hiểu tồn số binary code 11 assembly language 12 9/15/2018 NGÔN NGỮ CẤP THẤP – HỢP NGỮ • VD • Ngơn ngữ cấp cao (High level language): ngôn ngữ tạo phát triển nhằm phản ánh cách thức người lập trình nghĩ làm • Ngơn ngữ cấp cao gần với ngơn ngữ người (Anh ngữ) xác ngơn ngữ toán học Machine Language Language directly understood by the computer Ðể máy thực chương trình viết hợp ngữ chương trình phải dịch sang ngôn ngữ máy Công cụ thực việc dịch gọi Assembler binary code Symbolic Language English-like abbreviations representing elementary computer operations assembly language High-level Language Close to human language Example: a = a + b [add values of a and b, and store the result in a, replacing the previous value] C, C++, Java, Basic 13 14 Các lớp ngơn ngữ lập trình Khái niệm Natural Language Lập trình (programming): viết chương trình cho máy artificial intelligence ORACLE, SEQUEL, INGRES, C/C++, Pascal, Java, Hợp ngữ - Assembler tính 5GLs Lập trình viên (programer): người sử dung ngơn 4GLs ngữ lập trình để biên soạn chương trình High level languages Assembler languages Machine language 9/15/2018 thuonghtt@uit.edu.vn 15 Khái niệm Mã nguồn: chương trình thể NNLT Mã máy: chương trình ngơn ngữ Máy Khái niệm Chương trình đích: dịch chương trình từ mã nguồn thành ngơn ngữ cấp thấp hơn- thường ngơn ngữ máy 9/15/2018 THƠNG DỊCH(interpreted) Khi chương trình chạy đến dịng lệnh chuyển thành mã máy đến để máy tính thực thi Bộ thơng dịch thực q trình thơng dịch gọi interpreter 19 BIÊN DỊCH (compiled) Compiled vs interpreted Chương trình dịch tồn thành mã máy tiến hành thực thi Bộ biên dịch thực trình biên dịch gọi compiler Compiled vs interpreted Giải Bài Toán Trên Máy Tính 24 9/15/2018 DỮ LIỆU VS THƠNG TIN DỮ LIỆU (DATA) • Theo từ điển Tiếng Việt: số liệu, tư liệu có, dựa vào để giải vấn đề • Tin học: Biểu diễn thông tin từ giới thực cần thiết cho tốn đưa vào máy tính THƠNG TIN (INFORMATION) 28 Vấn đề - Bài Tốn VAI TRỊ CỦA CTDL & GT • Biểu diễn vấn đề-bài tốn • A→B • A: Giả thiết, điều kiện ban đầu • B: Kết luận, mục tiêu cần đạt • Giải vấn đề-bài tốn • Từ A dùng số hữu hạn bước suy luận có lý hành động thích hợp để đạt B • Trong Tin học, A đầu vào (input), B đầu (output) 29 9/15/2018 VAI TRÒ CỦA CTDL & GT MỐI QUAN HỆ GIỮA CTDL & GT Tổ chức biểu diễn đối tượng thực tế Nhận định: Dữ liệu người đa dạng liệu máy hạn chế đơn giản biểu diễn liệu người lên máy tính? CTDL + Giải thuật = Chương trình Người LTphải thực việc thiết kế, xây dựng cấu trúc thích hợp để biểu diễn liệu xây dựng CTDL cho toán Xây dựng thao tác xử lý liệu Từ yêu cầu xử lý thực tế, xác định trình tự thao tác máy tính phải thi hành kết mong muốn xây dựng giải thuật cho toán Cấu trúc liệu: (có thể hiểu là) cách tổ chức liệu, cách mơ tả tốn dạng NNLT Giải thuật: quy trình để thực cơng việc xác định Ngồi CTDL & GT đóng vai trị thể giải pháp CTDL Là ? Các Tiêu chuẩn CTDL Cấu trúc liệu Phản ánh thực tế: phải biểu diễn đầy đủ thông tin, thể xác đối tượng thực tế Các mơ hình liệu, tổ chức liệu (khai báo, lưu trữ liệu) để biểu diễn liệu trừu tượng hóa Hiệu lưu trữ: tiết kiệm tài nguyên hệ thống Hiệu xử lý: đáp ứng việc thiết kế hiệu quả, phải phù hợp với thao tác đó, phù hợp với điều kiện cho phép NNLT Mơ hình: • Diễn đạt tốn học • Diễn đạt sơ đồ, biểu đồ Biểu diễn kiểu liệu Các thuộc tính kiểu liệu T = V = {Tập giá trị} O = {Tập thao tác xử lý} • Tên KDL • Miền giá trị • Kích thước lưu trữ • Tập tốn tử tác động lên KDL Ví dụ: Kiểu liệu số nguyên int ngôn ngữ C T = int V = {-32768, 32767} O = {+, -, *, /, %} 35 9/15/2018 Kiểu liệu phần cứng (hardware data type) Các Kiểu Dữ Liệu Cơ Bản Ở cấp phần cứng máy tính: Xây dựng sẵn tập kiểu liệu phần cứng (sơ cấp): bit, byte, kiểu số nhị phân, kiểu ký tự, … Kiểu liệu phần cứng Cơ chế điều khiển: rẽ nhánh Kiểu liệu Các tác vụ phần cứng: cộng số địa chị nhớ khác lưu kết địa khác, dời byte, … Kiểu liệu có cấu trúc Kiểu liệu trừu tượng phù hợp cho máy không phù hợp với người Các kiểu liệu (basic data type) Các kiểu liệu (basic data type) Loại liệu đơn giản, khơng có cấu trúc, giá trị liệu đơn Các NNLT xây dựng sẵn thành phần ngôn ngữ (kiểu liệu định sẵn) Tùy NNLT, kiểu liệu khác đôi chút Cơ chế điều khiển: - Tuần tự - Chọn lựa/rẽ nhánh (if, if/else, switch) - Lặp (for, while, …while) Các tác vụ cài đặt NNLT: hàm thư viện, chương trình (hàm/thủ tục) Bao gồm: - Kiểu có thứ tự rời rạc: số nguyên, ký tự, boolean, liệt kê, … - Kiểu không rời rạc: số thực Khi dịch chương trình viết NNLT, kiểu dl tác vụ chuyển dịch kiểu dl sơ cấp tác vụ phần cứng để máy tính thực thi Ví du basic data type Data type char Size byte unsigned char byte signed char byte int bytes Kiểu liệu có cấu trúc Value range -128 đến 127 đến 255 (Ký tự dạng mã ASCII) • Do người dùng định nghĩa đến 255 -128 đến 127 -32,768 đến 32,767 -2,147,483,648 đến 2,147,483,647 unsigned int đến 65,535 bytes đến 4,294,967,295 short unsigned short long unsigned long bytes bytes bytes bytes -32,768 đến 32,767 đến 65,535 -2,147,483,648 đến 2,147,483,647 đến 4,294,967,295 • Gom nhóm/liên kết thành phần liệu có kiểu liệu định nghĩa thành kiểu liệu phức hợp nhiều thành phần 41 9/15/2018 Kiểu liệu có cấu trúc Chuỗi ký tự (string) Kiểu liệu trừu tượng (Abstract data type - ADT) • Thơng tin ngồi trạng thái tĩnh (dữ liệu) cịn ngầm định hoạt tính (tác vụ) Mảng (array) Cấu trúc (struct) Con trỏ (pointer) Tập tin (file) VD: Phân/số , Tác vụ nhân • Để xây dựng kiểu liệu phức tạp người ta dùng công cụ gọi trừu tượng hóa Kết q trình trừu tượng hóa hình thành kiếu liệu gọi kiểu liệu trừu tượng Kiểu liệu trừu tượng (Abstract data type - ADT) Kiểu liệu trừu tượng (Abstract data type - ADT) Trừu tượng hóa • Mỗi kiểu liệu trừu tượng có mơ tả liệu tác vụ liện quan Ý niệm vật, tượng sau thu thập chắt lọc thơng tin có nghĩa, loại bỏ thơng tin khơng cần thiết, khơng quan trọng • Vấn đề cài đặt thành CTDL đoạn chương trình • Các kiểu trừu tượng CTDL thơng dụng: • Trừu tượng hóa liệu • Trừu tượng hóa chức Kiểu liệu trừu tượng (Abstract data type - ADT) - Ngăn xếp (stack) hàng đợi (queue) - danh sách (list) (tree) - bảng băm (hash table) đồ thị (graph) Các bước xây dựng chương trình Thực CT • ADT kiểu liệu ta định nghĩa mức khái niệm, chưa cài đặt cụ thể NNLT • Khi cài đặt ADT NNLT cụ thể, phải làm động tác: Chạy thử Lỗi cách sửa: Lỗi cú pháp, Lỗi ngữ nghĩa Xây dựng liệu test Hiệu chỉnh CT Cài đặt thành CTDL, đoạn CT cụ thể Diễn tả thuật toán theo NNLT chọn Cài đặt chương trình 1.Biểu diễn kiểu liệu = CTDL ADT khác cài đặt Dùng cơng cụ trừu tượng hóa xây dựng ADT thuật toán 2.Viết CT thực phép tốn tên kiểu liệu Mơ hình giải thuật hình thức Xây dựng ADT thuật tốn Biểu diễn bằng: Ngôn ngữ tự nhiên Lưu đồ - Sơ đồ khối Mã giả Lựa chọn phương pháp giải Xây dựng mơ hình tốn Phân tích Xác định vấn đề đặt tả vấn đề 9/15/2018 Thuật toán - Algorithm Là tập hợp (dãy) hữu hạn thị (hành động) định nghĩa rõ ràng nhằm giải tốn cụ thể Thuật toán để giải toán dãy hữu hạn thao tác xếp theo trình tự xác định cho sau thực dãy thao tác đó, từ Input tốn, ta nhận Output cần tìm Các tính chất - u cầu thuật tốn • Tính xác/đúng: • Q trình tính tốn hay thao tác máy tính thực xác • Khi kết thúc, giải thuật phải cung cấp kết đắn • Tính phổ dụng/tổng qt: • Có thể áp dụng cho lớp tốn có đầu vào tương tự • Tính kết thúc/hữu hạn: • Thuật tốn phải dừng sau số bước hữu hạn Các tính chất - yêu cầu thuật toán Đặc tả thuật toán • Tính rõ ràng/hiệu quả: Các câu lệnh minh bạch xếp theo thứ tự định Tối ưu mặt thời gian khơng gian • Tính khách quan/xác định: • Được viết nhiều người máy tính kết phải • Trong điều kiện hai xử lý thực hiện, thuật toán phải cho kết giống Đặc tả thuật tốn • Dữ liệu vào • Điều kiện ràng buộc (nếu có) Các phương pháp biểu diễn thuật tốn Dùng ngơn ngữ tự nhiên Dùng mã giả (pseudocode) • Các sản phẩm ,kết (xuất) • Các yêu cầu sản phẩm, kết Dùng lưu đồ - sơ đồ khối (flowchart) Ngôn ngữ lập trình (chương trình) 9/15/2018 Dùng ngơn ngữ tự nhiên Dùng ngơn ngữ tự nhiên • Sử dụng ngôn ngữ thường ngày để liệt kê bước thuật tốn • Phương pháp biểu diễn khơng u cầu người viết thuật tốn người đọc thuật tốn phải nắm quy tắc • Tuy vậy, cách biểu diễn này: • Thường dài dịng, • Khơng thể rõ cấu trúc thuật tốn, • Đơi lúc gây hiểu lầm khó hiểu cho người đọc • Gần khơng có quy tắc cố định việc thể thuật tốn ngơn ngữ tự nhiên Đầu vào: a, b thuộc R Đầu ra: nghiệm phương trình ax + b = Nhập số thực a b Nếu a = 2.1 Nếu b = 2.1.1 Phương trình vơ số nghiệm 2.1.2 Kết thúc thuật tốn 2.2 Ngược lại 2.2.1 Phương trình vơ nghiệm 2.2.2 Kết thúc thuật tốn Ngược lại 3.1 Phương trình có nghiệm 3.2 Giá trị nghiệm x = -b/a 3.3 Kết thúc thuật toán Dùng mã giả Dùng mã giả • Ngơn ngữ tựa ngơn ngữ lập trình: •Đầu VD: Giải vào: phương a, btrình thuộc ax+b=0 R Đầu ra: nghiệm phương trình ax + b = If a = Then Begin If b = Then Xuất “Phương trình vơ số nghiệm” Else Xuất “Phương trình vơ nghiệm” End Else Xuất “Phương trình có nghiệm x = -b/a” Dùng cấu trúc chuẩn hóa, chẳng hạn tựa Pascal, C Dùng ký hiệu toán học, biến, hàm • Ưu điểm: Đỡ cồng kềnh • Nhược điểm: Không trực quan 57 Dùng lưu đồ Dùng lưu đồ Là phương thức để biểu diễn thuật tốn thơng qua Bắt đầu ký hiệu hình học Đọc a,b Đ S a= Đ S Tính x = -b/a b= Xuất “VSN” Xuất “VN” Xuất x Kết thúc 60 10 9/15/2018 Thuật toán - Algorithm Đánh giá độ phức tạp thuật tốn Qui trình thiết kế thuật tốn • Khảo sát, phân tích • Thiết kế (CTDL, thuật tốn) • Mã hóa, viết chương trình • Kiểm tra • Thực • Bảo trì, phát triển Kỹ thuật thiết kế thuật toán Vét cạn Đệ qui Chia để trị Quy hoạch động Đánh giá độ phức tạp thuật toán Đánh giá độ phức tạp thuật tốn • Là cơng việc ước lượng thời gian thực thuật toán để so sánh tương đối thuật toán với Phương pháp thực nghiệm (thời gian) Làm ước lượng thời gian thực thuật toán? Phương pháp xấp xỉ (số bước thực hiện) Đánh giá độ phức tạp thuật tốn • Cài thuật tốn chọn liệu thử nghiệm • Thống kê thơng số nhận chạy liệu Đánh giá độ phức tạp thuật toán Đơn vị đo thời gian thực = số lệnh thực máy tính lý tưởng • Đơn vị đo: giờ, phút, giây • Ưu điểm: Dễ thực • Nhược điểm: Chịu hạn chế ngơn ngữ lập trình Ảnh hưởng trình độ người lập trình Chọn liệu thử đặc trưng cho tất tập liệu vào VD: Tính tổng số nguyên dương từ 1n int Tong (int n){ int S=0; for (int i = 1; i coi đoạn chương trình có độ phức tạp tính tốn O(f(n)) Quy tắc tổng quát Ví dụ Mỗi lệnh gán, cout, cin : O(1) Một chuỗi lệnh : qui tắc cộngthời gian thi hành lệnh lâu Cấu trúc IF: thời gian lớn thực lệnh sau IF sau ELSE thời gian kiểm tra điều kiện (thường O(1)) Vòng lặp: tổng (trên tất lần lặp) thời gian thực thân vòng lặp Nếu thời gian thực thân vịng lặp khơng đổi thời gian thực vịng lặp tích số lần lặp với thời gian thực thân vịng lặp 75 Ví dụ Ví dụ 13 9/15/2018 Ví dụ Ví dụ Ví dụ Ví dụ Bài tập Khái niệm vai trị quan trọng CTDL thuật tốn việc xây dựng chương trình máy tính? Các tiêu chuẩn CTDL? Thuật tốn ? Các tính chất thuật toán ? Vẽ flow chart tốn tìm số lớn hai số theo ba cách Khái niệm ý nghĩa “độ phức tạp” đề cập đến thuật tốn Cách tính độ phức tạp thuật toán Nộp Course – Xem thông báo moddle 84 14 ... hợp để đạt B • Trong Tin học, A đầu vào (input), B đầu (output) 29 9 /15 /2 018 VAI TRÒ CỦA CTDL & GT MỐI QUAN HỆ GIỮA CTDL & GT Tổ chức biểu diễn đối tượng thực tế Nhận định: Dữ liệu người đa... từ 1? ??n int Tong (int n){ int S=0; for (int i = 1; i