1. Trang chủ
  2. » Công Nghệ Thông Tin

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

129 706 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

Cấu trúc

  • CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040)

  • Giới thiệu

  • Nội dung

  • Một số thuật ngữ căn bản

  • Ngôn ngữ máy

  • Assembly languages

  • Assembler

  • Ngôn ngữ lập trình cấp cao

  • High-level Programming Languages (cont.)

  • Phần mềm ứng dụng và phần mềm hệ thống

  • PROGRAMMING LANGUAGES

  • The C Programming Language

  • The C++ Programming Language

  • Giải thuật

  • PowerPoint Presentation

  • Flowchart symbols

  • Example

  • Algorithms in pseudo-code

  • Loops

  • Giải thuật bằng mã giả

  • Giải thuật bằng ngôn ngữ lập trình

  • So sánh mã giả và NNLT

  • Giải bài toán bằng phần mềm

  • Lập trình hướng đối tượng (OOP)

  • Kiểu trừu tượng

  • Hiện thực và sử dụng

  • Cấu trúc dữ liệu

  • Mối quan hệ của CTDL và thuật toán

  • Kiểu dữ liệu trừu tượng và cấu trúc dữ liệu

  • Đặc điểm của OOP

  • Cấu trúc của đối tượng

  • Khai báo một class trên C++

  • Dùng ghi chú làm rõ nghĩa

  • Dùng ghi chú làm rõ nghĩa – Ví dụ

  • Slide 35

  • Mô tả stack

  • Ví dụ về stack

  • Ứng dụng: Đảo ngược danh sách

  • Đảo ngược danh sách – Ví dụ

  • Đảo ngược danh sách – Mã C++

  • Kiểu trừu tượng (abstract data type)

  • Stack trừu tượng

  • Thiết kế stack

  • Thiết kế các phương thức

  • Hiện thực stack liên tục

  • Khai báo stack liên tục

  • Đẩy một phần tử vào stack

  • Bỏ phần tử trên đỉnh stack

  • Thêm/Bỏ phần tử - Mã C++

  • Lấy giá trị trên đỉnh stack

  • Reverse Polish Calculator

  • Reverse Polish Calculator – Thiết kế chức năng

  • Reverse Polish Calculator – Ví dụ

  • Reverse Polish Calculator – Hàm get_command

  • Reverse Polish Calculator – Giải thuật tính toán với toán tử

  • Reverse Polish Calculator – Mã C++ cho toán tử cộng

  • Reverse Polish Calculator – Chương trình chính

  • Reverse Polish Calculator – Hàm do_command

  • Slide 59

  • Mô tả queue

  • Queue trừu tượng

  • Thiết kế queue

  • Slide 63

  • Mở rộng queue

  • Tính thừa hưởng

  • Queue liên tục

  • Queue là array vòng (circular array)

  • Array vòng với ngôn ngữ C++

  • Điều kiện biên của queue vòng

  • Một số cách hiện thực queue liên tục

  • Hiện thực queue liên tục

  • Khởi tạo và kiểm tra rỗng

  • Thêm một giá trị vào queue

  • Loại một giá trị khỏi queue

  • Thêm/loại một giá trị – Mã C++

  • Ứng dụng: Giả lập phi trường

  • Giả lập phi trường – Hàng đợi

  • Giả lập phi trường – Hạ cánh

  • Giả lập phi trường – Xử lý

  • Giả lập phi trường – Giả lập

  • Slide 81

  • Khái niệm đệ qui

  • Tính giai thừa

  • Thi hành hàm tính giai thừa

  • Trạng thái hệ thống khi thi hành hàm tính giai thừa

  • Bài toán Tháp Hà nội

  • Bài toán Tháp Hà nội – Thiết kế hàm

  • Bài toán Tháp Hà nội – Mã C++

  • Bài toán Tháp Hà nội – Thi hành

  • Bài toán Tháp Hà nội – Cây đệ qui

  • Thiết kế các giải thuật đệ qui

  • Đệ qui đuôi (tail recursion)

  • Khử đệ qui đuôi hàm giai thừa

  • Dãy số Fibonacci

  • Dãy số Fibonacci – Cây thi hành

  • Dãy số Fibonacci – Khử đệ qui

  • Slide 97

  • Danh sách trừu tượng

  • Slide 99

  • Chỉ số các phần tử

  • Phương thức insert và remove

  • Phương thức retrieve và replace

  • Phương thức traverse và tham số hàm

  • Hiện thực danh sách liên tục

  • Thêm vào một danh sách liên tục

  • Giải thuật thêm vào một danh sách liên tục

  • Mã C++ thêm vào một danh sách liên tục

  • Xóa từ một danh sách liên tục

  • Giải thuật xóa từ một danh sách liên tục

  • Giải thuật duyệt một danh sách liên tục

  • Mã C++ duyệt một danh sách liên tục

  • Chuỗi (string)

  • Cây nhị phân

  • Các định nghĩa khác

  • Các định nghĩa khác (tt.)

  • Các tính chất khác

  • Phép duyệt cây

  • Ví dụ về phép duyệt cây NLR

  • Ví dụ về phép duyệt cây LNR

  • Ví dụ về phép duyệt cây LRN

  • Cây liên kết

  • Giải thuật duyệt cây inorder

  • Cây nhị phân tìm kiếm – Binary search tree (BST)

  • Ví dụ BST

  • Các tính chất khác của BST

  • Tìm kiếm trên BST

  • Giải thuật tìm kiếm trên BST

  • Ví dụ tìm kiếm trên BST

  • Slide 129

Nội dung

A C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) B F D E G K H Giới thiệu Môn học giới thiệu: Các cấu trúc liệu Các giải thuật điển hình cấu trúc liệu Dùng phương pháp hướng đối tượng Ngôn ngữ lập trình minh hoạ: Mã giả (pseudocode) C++ (không giảng dạy thức môn học) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Nội dung Chương Tổng quan Chương Stack Chương Queue Chương Đệ qui Chương List String Chương Cây nhị phân Chương Tìm kiếm Chương Sắp xếp ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Một số thuật ngữ Một chương trình máy tính (computer program) tập câu lệnh để điều khiển máy tính sinh kết cụ thể Viết chương trình máy tính gọi lập trình máy tính (computer programming) Ngôn ngữ để tạo chương trình máy tính gọi ngôn ngữ lập trình Software chương trình hay tập hợp chương trình Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Ngôn ngữ máy Cấp thấp Các chương trình bao gồm 0, Lập trình ngôn ngữ máy điều khiển trực tiếp đến phần cứng máy tính Ví dụ 00101010 000000000001 000000000010 10011001 000000000010 000000000011 Instruction part address parts (địa nhớ (opcode – tác vụ liệu thực hiện)Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Assembly languages Thực nhiệm vụ ngôn ngữ máy sử dụng tên tượng trưng cho opcode toán tử thay 1, LOAD BASEPAY ADD OVERPAY STORE GROSSPAY Chương trình ngôn ngữ assembly phải dịch sang ngôn ngữ máy trước thực thi máy tính Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Assembler Assembly language program Translation program (assembler) Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Machine language program Giới thiệu môn học Ngôn ngữ lập trình cấp cao Sử dụng câu lệnh dễ hiểu Các chương trình sử dụng ngônn ngữ cấp cao phải dịch sang ngôn ngữ cấp thấp cách sử dụng chương trình gọi compiler Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học High-level Programming Languages (cont.) Cho phép người lập trình viết câu lệnh câu tiếng Anh kí hiệu toán học thông dụng Mỗi dòng chương trình ngôn ngữ mức cao gọi câu lệnh Example: Result = (First + Second)*Third Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học Phần mềm ứng dụng phần mềm hệ thống loại chương trình máy tính Application software bao gồm chương trình viết để thực thi nhiệm vụ cụ thể yêu cầu user • System software tập chươg trình phải sẵn sàng đến hệ thống máy tính cho vận hành (hệ điều hành, chuyển đổi ngôn ngữ) Programming Fundamentals ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin 10 Giới thiệu môn học 10 Các định nghĩa khác (tt.) Node trước, sau, cha, con: Node x trước node y (node y sau node x), đường đến y có x Node x cha node y (node y node x), đường đến y node x nằm trước node y Node lá, trung gian: Node node Node trung gian không node gốc hay node ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 115 Các tính chất khác Cây nhị phân đầy đủ, gần đầy đủ: Đầy đủ: node nằm mức cao nút không nút có đầy đủ nhánh Gần đầy đủ: Giống node nằm mức cao (hoặc trước mức) lấp đầy từ bên trái sang bên phải mức cao Chiều cao có n node: Trung bình h = [lg n] + Đầy đủ h = lg (n + 1) Suy biến h = n Số phần tử mức i nhiều 2i ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 116 Phép duyệt Duyệt qua node (mỗi node lần) Cách duyệt: Chính thức: NLR, LNR, LRN, NRL, RNL, RLN Chuẩn: NLR (preorder), LNR (inorder), LRN (postorder) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 117 Ví dụ phép duyệt NLR A B C D E H I N J F G K O L M P Kết quả: A B D H I N E J O K C F L P G M ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 118 Ví dụ phép duyệt LNR A B C D E H I N J F G K O L M P Kết quả: H D N I B J O E K A F P L C M G ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 119 Ví dụ phép duyệt LRN A B C D E H I N J F G K O L M P Kết quả: H N I D O J K E B P L F M G C A ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 120 Cây liên kết ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 121 Giải thuật duyệt inorder Algorithm recursive_inorder Input: subroot trỏ node gốc hàm visit Output: kết phép duyệt if (cây không rỗng) 1.1 Call recursive_inorder với nhánh trái subroot 1.2 Duyệt node subroot hàm visit 1.3 Call recursive_inorder với nhánh phải subroot End recursive_inorder ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 122 Cây nhị phân tìm kiếm – Binary search tree (BST) Một nhị phân tìm kiếm (BST) nhị phân rỗng node có đặc tính sau: Khóa node gốc lớn (hay nhỏ) khóa tất node bên trái (hay bên phải) Các (bên trái, phải) BST Tính chất: Chỉ cần đặc tính đủ Duyệt inorder danh sách có thứ tự ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 123 Ví dụ BST 25 10 37 18 12 29 20 13 50 35 41 32 Duyệt inorder: 10 12 13 18 20 25 29 32 35 37 41 50 ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 124 Các tính chất khác BST Node cực trái (hay phải): Xuất phát từ node gốc Đi sang trái (hay phải) đến không Khóa node cực trái (hay phải) nhỏ (hay lớn nhất) BST BST nhị phân có tính chất: Khóa node gốc lớn (hay nhỏ) khóa node cực trái (hay cực phải) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 125 Tìm kiếm BST Chọn hướng tìm theo tính chất BST: So sánh với node gốc, tìm thấy Tìm bên nhánh trái (hay phải) khóa cần tìm nhỏ (hay lớn hơn) khóa node gốc Giống phương pháp tìm kiếm nhị phân Thời gian tìm kiếm Tốt trung bình: O(lg n) Tệ nhất: O(n) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 126 Giải thuật tìm kiếm BST Algorithm BST_search Input: subroot node gốc target khóa cần tìm Output: node tìm thấy if (cây rỗng) 1.1 return not_found if (target trùng khóa với subroot) 2.1 return subroot if (target có khóa nhỏ khóa subroot) 3.1 Tìm bên nhánh trái subroot else 4.1 Tìm bên nhánh phải subroot End BST_search ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 127 Ví dụ tìm kiếm BST 25 10 37 18 12 29 20 13 50 35 41 32 Node Giống gốc nhỏ lớn Khác Tìm kiếm 13 ĐH Bách Khoa Tp.HCM Tìm thấy Khoa Công nghệ Thông tin Số node duyệt: Số lần so sánh: Giới thiệu môn học 128 Ví dụ tìm kiếm BST 25 10 37 18 12 29 20 13 50 35 41 32 Khác Node gốc lớn nhỏ hơn Tìm kiếm 14 ĐH Bách Khoa Tp.HCM Không tìm thấy Khoa Công nghệ Thông tin Số node duyệt: Số lần so sánh: 10 Giới thiệu môn học 129 [...]... trình • • • • Cấu trúc dữ liệu cụ thể: chọn giải thuật Giải thuật cụ thể: chọn cấu trúc dữ liệu Khi có cấu trúc dữ liệu tốt và giải thuật phù hợp thì xây dựng chương trình chỉ phụ thuộc thời gian Một chương trình máy tính chỉ hoàn thiện khi có đầy đủ cấu trúc dữ liệu và giải thuật ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 28 Kiểu dữ liệu trừu tượng và cấu trúc dữ liệu Abstract data... nhật các tế bào cùng lúc } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 34 A C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) B F D E Chương 2: Stack G K H Mô tả stack Một stack là một cấu trúc dữ liệu mà việc thêm vào và loại bỏ được thực hiện tại một đầu (gọi là đỉnh – top của stack) Là một dạng vào sau ra trước – LIFO (Last In First Out) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới... Thông tin Giới thiệu môn học 28 Kiểu dữ liệu trừu tượng và cấu trúc dữ liệu Abstract data type: ,ột định nghĩa mức cao các kiểu dữ liệu Tập các dữ liệu Tập các thao tác trên dữ liệu hoặc tập con dữ liệu Không thể hiện cách hiện thực bên trong Cấu trúc dữ liệu: Cụ thể hơn, một kỹ thuật hay chiến slược để hiện thực abstract data type Ví dụ: abstract stack (push, pop, isEmpty, size) Sử dụng array hay danh... 26 Cấu trúc dữ liệu (1) Là một cách tổ chức và lưu trữ dữ liệu hợp lý để sử dụng một cách hiệu quả, (2) Tập các thao tác để truy cập các thành phần dữ liệu Ví dụ: Mảng (Array) Danh sách liên kết (Linked List) Ngăn xếp (Stack) Hàng đợi (Queue) Cây (Tree) … ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 27 Mối quan hệ của CTDL và thuật toán 28 CTDL +Thuật toán =Chương trình • • • • Cấu. .. nghệ Thông tin Giới thiệu môn học 14 Giải thuật (Algorithm) 15 Các tính chất quan trọng của giải thuật là: 􀂾 Hữu hạn (finiteness): giải thuật phải luôn luôn kết thúc sau một số hữu hạn bước 􀂾 Xác định (definiteness): mỗi bước của giải thuật phải được xác định rõ ràng và phải được thực hiện chính xác, nhất quán 􀂾 Hiệu quả (effectiveness): các thao tác trong giải thuật phải được thực hiện trong một lượng... của OOP Tính bao đóng: Che dấu cấu trúc dữ liệu bên trong Che dấu cách thức hiện thực đối tượng Kế thừa: Định nghĩa thêm các dữ liệu và phương thức cần thiết từ một class có sẵn Cho phép override/overload Cho phép dùng thay thế và khả năng dynamic biding Bao gộp: Một đối tượng chứa nhiều đối tượng khác ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 30 Cấu trúc của đối tượng Internal data... Tp.HCM Khoa Công nghệ Thông tin 13 Giới thiệu môn học 13 Giải thuật Dùng C++ để diễn tả?  có vấn đề Có thể diễn tả giải thuật bằng cách sử dụng flowchart Flow chart thể hiện nét phát thảo cấu trúc căn bản và tính logic của chương trình Một cách khác để diễn tả giải thuật là sử dụng mã giả pseudocode Giả lập, thường là dễ hiểu, không chi tiết đến các kỹ thuật lập trình Ở cấp độ hết sức tổng quát: gần ngôn... So sánh mã giả và NNLT Nhận xét: Mã giả 1: gần với cách trao đổi của con người nhất nhưng khó lập trình nhất Mã giả 2: dễ lập trình hơn Phương pháp: Đầu tiên: cách giải quyết vấn đề bằng máy tính số (giải thuật bằng mã giả) Sau đó: ngôn ngữ lập trình cụ thể Học: Nhớ giải thuật (mã giả) Dùng NNLT cụ thể để minh chứng ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Giới thiệu môn học 22 Giải bài toán bằng... No NUM> 9? Yes    Print NUM, SQNUM NUM ← NUM + 1 while (NUM

Ngày đăng: 06/09/2016, 11:03

TỪ KHÓA LIÊN QUAN

w