Giáo trình Nhập môn cấu trúc dữ liệu và giải thuật cung cấp cho người học những kiến thức như: Tổng quan về cấu trúc dữ liệu và giải thuật; đệ qui và giải thuật đệ qui; danh sách; các phương pháp sắp xếp cơ bản;... Mời các bạn cùng tham khảo!
UỶ BAN NHÂN DÂN TỈNH ĐỒNG THÁP TRƯỜNG CAO ĐẲNG NGHỀ ĐỒNG THÁP GIÁO TRÌNH NHẬP MƠN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT MÔN HỌC/ MÔ ĐUN: MĐ 11 NGÀNH, NGHỀ: THIẾT KẾ ĐỒ HỌA TRÌNH ĐỘ: CAO ĐẲNG/TRUNG CẤP (Ban hành kèm theo Quyết định số /QĐ-CĐCĐ ngày tháng năm 2017 Hiệu trưởng trường Cao đẳng Nghề Đồng Tháp) Đồng Tháp, năm 2017 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm CHƢƠNG I: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT I Khái niệm giải thuật đánh giá độ phức tập giải thuật Khái niệm Khái niệm giải thuật hay thuật giải mà nhiều gọi thuật toán dùng để phƣơng pháp hay cách thức (method) để giải vấn đề Giải thuật đƣợc minh họa ngơn ngữ tự nhiên (natural), sơ đồ (flow chart) mã giả (pseudo code) Trong thực tế giải thuật thƣờng đƣợc minh họa hay thể mã giả tựa hay số ngơn ngữ lập trình (thƣờng ngơn ngữ mà ngƣời lập trình chọn để cài đặt thuật toán), chẳng hạn nhƣ C, Pascal, … Khi xác định đƣợc cấu trúc liệu thích hợp, ngƣời lập trình bác đầu tiến hành xây dựng giải thuật tƣơng ứng theo yêu cầu toán đặt sở cấu trúc liệu đƣợc chọn Đề giải vấn đề có nhiều phƣơng pháp, lựa chọn phƣơng pháp phù hợp việc mà ngƣời lập trình phải cân nhắc tính tốn Sự lựa chọn góp phần đáng kể việc giảm bớt cơng việc ngƣời lập trình việc cài đặt thuật tốn ngơn ngữ cụ thể Đánh giá độ phức tạp giải thuật Các tiêu chuẩn đánh giá cấu trúc liệu Đánh giá cấu trúc liệu ta thƣờng dựa vào số tiêu chí sau: • Cấu trúc liệu phải tiết kiệm tài nguyên (bộ nhớ trong) • Cấu trúc liệu phải phản ánh thực tế tốn • Cấu trúc liệu phải dể dàng thao tác liệu Đánh giá độ phức tạp thuật toán Việc đánh giá độ phức tạp tốn khơng dễ chút Ở ƣớc lƣợng thời gian thực toán T(n) để có so sánh tƣơng đối thuật toán với Trong thực tế, thời gian thực thuật tốn cịn phụ thuộc nhiều vào điều kiện khác nhƣ cấu tạo máy tính, liệu đƣa vào, …, xem xét mức độ lƣợng liệu đƣa vào ban đầu cho thuật toán thực Để ƣớc lƣợng thời gian thực thuật tốn xem xét thời gian thực thuật toán hai trƣờng hợp: • Trong trƣờng hợp tốt nhất: T(min) • Trong trƣờng hợp xấu nhất: T(max) Từ ƣớc lƣợng thời gian thực trung bình T(avg) II Các kiểu liệu Khái niệm kiểu liệu Cấu trúc liệu Giải thuật Kiểu liệu T hết hợp thành phần: • Miền giá trị mà kiểu liệu T lƣu trữ: V • Tập hợp phép toán để thao tác liệu: O T = Mỗi kiểu liệu thƣờng đƣợc biểu diễn tên (biệt danh) Mỗi phần tử liệu có kiểu T có giá trị miền V đƣợc thực phép toán thuộc tập hợp phép toán O Để lƣu trữ phần tử liệu thƣờng phải tốn số byte(s) nhớ, số byte(s) gọi kích thƣớc kiểu liệu Các kiểu liệu sở Hầu hết ngôn ngữ lập trình có cung cấp kiểu liệu sở Tùy vào loại ngôn ngữ mà kiểu liệu sở có tên gọi khác song lại có loại kiểu liệu sở nhƣ sau: TT Kiểu liệu (T) Số nguyên Số thực Ký tự Chuỗi ký tự Luận lý Kích thƣớc Các phép toán thực (V) (O) byte +, -, *, /, DIV, MOD, , =, =, … bytes bytes bytes +, -, *, /, , =, =, … bytes 10 bytes byte +, -, , =, =, ORD, bytes CHR, … Tùy thuộc vào +, , , =, =, ngôn ngữ Length, Trunc, … lập trình NOT, AND, OR, XOR, , byte =, =, … Một số kiểu liệu ngơn ngữ lập trình C TT Kiểu liệu Kích thƣớc Miền giá trị (Type) (Length) (Range) Khoa Công Nghệ Thông Tin Cấu trúc liệu Giải thuật 10 11 unsigned char char enum unsigned int short int int unsigned long long float double long double byte byte bytes bytes bytes bytes bytes bytes bytes bytes 10 bytes đến 255 – 128 đến 127 – 32,768 đến 32,767 đến 65,535 – 32,768 đến 32,767 – 32,768 đến 32,767 đến 4,294,967,295 – 2,147,483,648 đến 2,147,483,647 3.4 * 10–38 đến 3.4 * 1038 1.7 * 10–308 đến 1.7 * 10308 3.4 * 10–4932 đến 1.1 * 104932 III Các kiểu liệu trừu tƣợng Các kiểu liệu có cấu trúc Kiểu liệu có cấu trúc kiểu liệu đƣợc xây dựng sở liệu có (có thể kiểu liệu có cấu trúc khác) Tùy vào ngơn ngữ lập trình, song thƣờng có loại sau: • Kiểu mảng hay cịn gọi dãy: kích thƣớc tổng kích thƣớc phần tử • Kiểu bảng ghi hay cấu trúc: kích thƣớc tổng kích thƣớc thành phần (File) Kiểu liệu trỏ Các ngơn ngữ lập trình thƣờng cung cấp cho kiểu liệu đặt biệt để lƣu trữ địa nhớ, trỏ (Pointer) Kiểu liệu tập tin Tập tin (File) xem kiểu liệu đặc biệt, kích thƣớc tối đa tập tin tùy thuộc vào không gian đĩa nơi lƣu trữ tập tin IV Các cấu trúc liệu Có thề nói khơng có chƣơng trình máy tính mà khơng có liệu để xử lý Dữ liệu liệu đƣa vào (input data), liệu trung gian hoạc liệu đƣa (output data) Do việc tổ chức lƣu trữ liệu phục vụ cho chƣơng trình có ý nghĩa quan trọng tồn hệ thống chƣơng trình Việc xây dựng cấu trúc liệu định lớn đến chất lƣợng nhƣ cơng sức ngƣời lập trình việc thiết kế cài đặt chƣơng trình V Mối quan hệ cấu trúc liệu giải thuật Mối quan hệ cấu trúc liệu giải thuật minh họa đẳng thức: Cấu trúc liệu + Giải thuật = Chƣơng trình Nhƣ vậy, có cấu trúc liệu, nắm vững giải thuật thực việc thể chƣơng trình ngôn ngữ cụ thể vấn đề thời gian Khi có cấu trúc liệu mà Khoa Cơng Nghệ Thông Tin Cấu trúc liệu Giải thuật chƣa tìm giải thuật khơng thể có chƣơng trình ngƣợc lại khơng thể có thuật giải chƣa có cấu trúc liệu Một chƣơng trình máy tính đƣợc hồn thiện có đầy đủ Cấu trúc liệu Giải thuật xử lý liệu toán theo yêu cầu đặt Câu hỏi Trình bày tầm quan trọng Cấu trúc liệu Giải thuật ngƣời lập trình? Các tiêu chuẩn để đánh giá Cấu trúc liệu Giải thuật? Khi xây dựng Giải thuật có cần thiết phải quan tân tới Cấu trúc liệu hay không? Tại sao? Liệt kê cá kiểu liệu sở, kiểu liệu có cấu trúc C, Pascal? Khoa Công Nghệ Thông Tin Cấu trúc liệu Giải thuật CHƢƠNG II: ĐỆ QUI VÀ GIẢI THUẬT ĐỆ QUI I Khái niệm đệ qui Bất hàm triệu gọi hàm khác, nhƣng hàm tự triệu gọi Kiểu hàm nhƣ đƣợc gọi hàm đệ qui Vậy chƣơng trình đệ qui chƣơng trình gọi đến Phƣơng pháp đệ qui thƣờng dùng phổ biến ứng dụng mà cách giải đƣợc thể việc áp dụng liên tiếp giải pháp cho tập hợp toán Một chƣơng trình đệ qui định nghĩa đệ qui khơng thể gọi đến mãi mà phải có điểm dừng đến trƣờng hợp đặc biệt đó, mà ta gọi trƣờng hợp suy biến (degenerate case) Ví dụ: Cho số tự nhiên n, ta định nghĩa n! nhƣ sau: n! = n*(n-1) 0!1 II Giải thuật đệ qui chƣơng trình đệ qui Phương pháp thiết kế giải thuật đệ qui a Tham số hố tốn b Phân tích trƣờng hợp chung (đƣa toán dƣới dạng toán loại nhƣng có phạm vi giải nhỏ theo nghiã tiến đến trƣờng hợp suy biến) c Tìm trƣờng hợp suy biến Ví dụ 1: tính n! n! = 1*2*3*…*(n-2)*(n-1)*n với n >= 0! = Viết hàm tính giai thừa khơng đệ qui Chƣơng trình Kết qua in nàm hình Khoa Cơng Nghệ Thông Tin Cấu trúc liệu Giải thuật /* Ham tinh giai thua */ #include #include void main(void) { int in; long giaithua(int); printf("Nhap vao so n: "); scanf("%d", &in); printf("%d! = %ld.\n", in, giaithua(in)); getch(); } long giaithua(int in) { int i; long ltich = 1; if (in == 0) return (1L); else { for (i = 1; i d(u) + w(u,v) then d(v) = d(u) + w(u,v) p(v) = u Until (T=V) Ví dụ : 74 Khoa Cơng Nghệ Thông Tin Cấu trúc liệu Giải thuật 75 Khoa Công Nghệ Thông Tin Cấu trúc liệu Giải thuật Lập bảng để giải tốn tìm đƣờng ngắn Nhận xét bảng kết thu đƣợc 1/ Độ dài đƣờng ngắn từ A đến đỉnh ->B: ->C: ->D: ->E: ->Z: 11 2/ Để vẽ đƣờng ngắn từ A đến đỉnh Z, sử dụng cách ngƣợc từ Z A Cụ thể Z