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

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

149 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

Thông tin cơ bản

Định dạng
Số trang 149
Dung lượng 7,54 MB

Nội dung

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

LƠỜI N I ĐAẦ U Giáo trình trình bày cấu trúc liệu thuật giải Các kiến thức cấu trúc liệu thuật giải đóng vai trị quan trọng việc đào tạo cử nhân tốn – tin học, cơng nghệ thơng tin Sách hình thành sở giảng cấu trúc liệu thuật giải mà tác giả giảng dạy nhiều năm khoa Toán – Tin học Đại học Khoa Học Tự Nhiên, Đại học Quốc Gia thành phố Hồ Chí Minh khoa Cơng Nghệ Thơng Tin trường bạn Giá trình viết chủ yếu để làm tài liệu tham khảo cho sinh viên ngành Toán – Tin học Cơng nghệ Thơng tin, bổ ích cho độc giả khác cần có hiểu biết đầy đủ cấu trúc liệu thuật giải Tác giả mô tả cài đặt cấu trúc liệu thuật giải ngơn ngữ C, C ngôn ngữ giảng dạy trường đại học, nhiều người biết đến ngôn ngữ sử dụng nhiều để trình bày thuật tốn tài liệu khác Hình ảnh đoạn mã lấy từ http://www.math.hcmus.edu.vn/~ptbao/DataStructure/Book/ Nội dung giáo trình cấu trúc liệu thuật giải tổ chức gồm 04 chương: • Chương 1: Tổng quan o Khái niệm thuật giải o Phân tích thuật giải o Trừu tượng hóa liệu • Chương 2: Tìm kiếm xếp o Tìm kiếm o Sắp xếp • Chương 3: Danh sách liên kết o Cấu trúc mảng o Danh sách liên kết o Danh sách liên kết đơn thao tác o Danh sách liên kết đôi thao tác o Ngăn xếp o Hàng đợi o Ứng dụng mở rộng danh sách liên kết • Chương 4: Cây – Cây nhị phân tìm kiếm o Cây tổng quát o Cây nhị phân o Cây nhị phân tìm kiếm o Cây AVL Mặc dù cố gắng nhiều q trình biên soạn giáo trình, song khơng khỏi cịn nhiều thiếu sót hạn chế Rất mong nhận đóng góp ý kiến quý báu quý thầy cô, bạn sinh viên bạn đọc để giáo trình ngày hồn thiện Tác giả Phạm Thế Bảo Trang i CHƯƠNG 1: I Khái niệm thuật giải II Phân tích thuật giải TOỔ NG QUAN Bảng 1.1 Phân loại độ phức tạp Dạng 𝒪 𝒪(1) 𝒪 log 𝑁 Tên Phân loại Hằng logarit 𝒪(√𝑁) 𝒪( √𝑁) … Căn thức 𝑚 𝒪( √𝑁) 𝒪(𝑁) Tuyến tính 𝒪(𝑁 ) Bậc ba 𝒪(𝑁 𝑚 ) Đa thức 𝒪(𝑁 ) Bình phương Đa thức … 𝒪(𝑐 𝑁 ) với 𝑐 > 𝒪(𝑁!) Mũ Giai thừa Trang Độ phức lớn tạp III Hình 1.1: Đồ thị biểu diễn độ phức tạp thuật toán theo 𝑁 Trừu tượng hóa liệu Trang CHƯƠNG 2: I II Tìm kiếm TIÌM KIEẾ M VẦ SAẮ P XEẾ P Sắp xếp i Thuật toán Interchange Sort (đổi chỗ trực tiếp) Thuật toán Thuật toán InterchangeSort(A,n) Input: Mảng A có n phần tử Output: Mảng A xếp for(i ← to n–2) for(j ← i+1 to n–1) if(A[i]>A[j]) then A[i] ↔ A[j] return; • Ví dụ Cho dãy số 12 Bước 1: Bước 2: Trang 15 Và bước bước thứ n–1 ii Thuật toán Bubble Sort (nổi bọt) Thuật toán Thuật toán BubbleSort(A,n) // nhẹ lên Input: Mảng A có n phần tử Output: Mảng A xếp for(i ← to n–2) for(j ← n–1 to i+1) if(A[j–1] > A[j]) then A[j–1] ↔ A[j] return; Thuật toán BubbleSort1(A,n) // nặng chìm xuống Input: Mảng A có n phần tử Output: Mảng A xếp for(i ← n–1 to 1) for(j ← to i–1) if(A[j] > A[j+1]) then A[j] ↔ A[j+1] return; Thuật toán BubbleSort2(A,n) // kết hợp vừa nặng nhẹ Input: Mảng A có n phần tử Output: Mảng A xếp up ← 0; down ← n–1; while (up < down) for (j ← up to down–1) if(A[j] > A[j+1]) then A[j] ↔ A[j+1] down ← down –1; for(j ← down to up+1) if(A[j–1] > A[j]) then A[j–1] ↔ A[j] up ← up + 1; return; • Ví dụ Trang Cho dãy số 12 Bước 1: Bước 2: Trang 15 Và bước bước thứ n–1 iii Shaker Sort Thuật toán Thuật toán ShakerSort(A,n) Input: Mảng A có n phần tử Output: Mảng A xếp up ← 0; down ← n–1;hv ← 0; while (up < down) for (j ← up to down–1) if(A[j] > A[j+1]) then A[j] ↔ A[j+1]; hv ← j; down ← hv; for(j ← down to up+1) if(A[j–1] > A[j]) then A[j–1] ↔ A[j]; hv ← j; up ← hv; return; • Ví dụ Cho dãy số 12 Bước 1: nhẹ sau đến nặng chìm Trang 6 15 Trang Trang iv Bước 2: thay bắt đầu vị trí có giá trị 12 (vị trí r = 7) bắt đầu vị trí r = phần từ nhẹ lên Rồi sau cho phần tử nặng chìm xuống Các bước tiếp tục l = r dừng Thuật tốn Insertion Sort (chèn trực tiếp) Thuật toán Thuật toán InsertionSort(A,n) Input: Mảng A có n phần tử Output: Mảng A có thứ tự for(i ← to n–1) x ← A[i]; j ← i–1; while (x < A[j] && j ≥ 0) A[j+1] ← A[j]; j ← j–1; A[j+1] ← x; return; • Ví dụ Cho dãy số 12 Bước 1: Trang 15   Trong số trường hợp, dễ dàng thu hẹp phạm vi tìm kiếm cách nhanh chóng cách xác định khóa X cần tìm nằm nhóm nhỏ khóa có đặc tính chung Việc chia khố thành nhóm có đặc điểm chung (khơng có nhóm khác) gọi phép băm 21  Ví dụ:  Trong từ điển Anh-Việt, bạn sinh viên thường dán vào 26 mảnh giấy nhỏ vào trang để đánh dấu trang khởi đầu đoạn chứa từ có chữ đầu Ta nói từ điển “băm” thành 26 nhóm, từ nhóm có chữ  Trên dãy khố số tự nhiên, ta “băm” làm m nhóm, nhóm gồm khố đồng dư theo mơ-đun m 22  Có nhiều cách cài đặt phép băm:  Chia dãy khoá làm đoạn, đoạn chứa khố thuộc nhóm ghi nhận lại vị trí đoạn Để có khố tìm kiếm, xác định cần phải tìm khố đoạn  Chia dãy khố làm m nhóm, nhóm danh sách nối đơn giá trị khoá ghi nhận lại chốt danh sách nối đơn Với khố tìm kiếm, ta xác định phải tìm khố danh sách nối đơn tiến hành tìm kiếm danh sách nối đơn  Chia dãy khố làm m nhóm, nhóm lưu trữ dạng nhị phân tìm kiếm ghi nhận lại gốc nhị phân tìm kiếm 23    Đối với tốn tìm kiếm mà khóa số, tồn thuật tốn tốt dựa tính chất “số” khóa Trong tốn tìm kiếm tổng qt, ta mã hóa khóa thành số cho khóa khác ln mã hóa thành số khác nhau, ta áp dụng thuật tốn nói Lưu ý: phương pháp mã hóa khơng dùng với tốn xếp 24  Mỗi giá trị khoá số X hệ nhị phân có z chữ số (z bits), đánh số từ tới z - từ phải sang trái:  Cây tìm kiếm số học:  Nút gốc có tối đa ▪ Tất khoá có bit cao (bit z-1) nằm trái, ▪ Tất khố có bit cao nằm phải  Đối với hai nút nút gốc, vấn đề tương tự bit z - (bit đứng thứ nhì từ trái sang) 25 26    So với BST, DST khác cách chia hai trái/phải: nút gốc mức d chia dựa bit thứ d tính từ trái sang (bit z - d) khoá Giống BST: Với nút nhánh, giá trị chứa trái nhỏ giá trị chứa phải Các thao tác DST tương tự BST Cấu trúc nút: typedef struct node { int Info; TNode * Left; TNode * Right; } TNode; 27  Thuật tốn tìm khố X DST:  Ban đầu đứng nút gốc, xét bit X từ trái sang phải (từ bit z - tới bit 0), gặp bit rẽ sang nút trái, gặp bit rẽ sang nút phải Quá trình tiếp tục gặp hai tình sau:  Đi tới nút rỗng- trình tìm kiếm thất bại  Đi tới nút mang giá trị X - trình tìm kiếm thành cơng 28  Cài đặt: TNode * DSTSearch(TKey X) { int b = z; TNode * p = Root; //Bắt đầu với nút gốc while ((p!=NULL) && (p->Info!=X)) { b ; //Xét bit b X if then p=p->Left; else p = p->Right; } return p; }  Phép lấy bit b X C: bit = X & (1 b 29  Ta chèn khoá vào cây, thao tác chèn tương tự thao tác tìm kiếm: tìm xem khố có hay chưa,  có bỏ qua,  chưa có ta móc nút chứa khố cần chèn vào tìm kiếm số học mối nối rỗng vừa rẽ sang khiến trình tìm kiếm thất bại 30 Cài đặt: void DSTInsert(TKey X); int b = z; TNode * p = Root; TNode * q; // q chạy theo sau p, cha p if (p == NULL) { // Giá trị X chưa có p = ; if (Root==NULL) Root = p; // Cây rỗng nút thêm trở thành gốc else // Khơng móc p vào mối nối vừa rẽ sang từ q if q->Left = p; else q->Right = p; } }  31  Thuật tốn xố bỏ giá trị khỏi tìm kiếm số học:  trước hết ta tìm nút D chứa giá trị cần xoá  nhánh gốc D nút bất kỳ, chuyển giá trị chứa nút sang nút D xố nút 32 Cài đặt: void DSTDelete(TKey X) { int b = z; TNode * p = Root; TNode * q; // q chạy theo sau p, cha p if (p == NULL) return; // X khơng tìm được, kết thúc TNode * Node = p; // Giữ lại nút chứa khoá cần xoá while ((p->Left!=NULL) || (p->Right!=NULL) { q = p; if (p->Left != NULL) p = p->Left; else p = p->Right; } Node->Info = p->Info; // Chuyển giá trị từ nút p sang nút Node if (Root == p) Root = NULL; // Cây gồm nút gốc, xoá gốc else // Cắt mối nối từ q tới p if (q->Left == p) q->Left = NULL; else q->Right = NULL; free(p); // giải phóng p }  33    Về mặt trung bình, thao tác tìm kiếm, chèn, xố tìm kiếm số học có độ phức tạp O(min(z, logn)) Trường hợp xấu nhất, độ phức tạp thao tác O(z), tìm kiếm số học có chiều cao khơng q z + Cây tìm kiếm số học mở rộng với Kphân, nút có tới K nút 34 Tìm kiếm cơng việc nhanh xếp lại sử dụng nhiều  Bài tốn tìm kiếm thực tế đa dạng: tìm ghi mang khố lớn hay nhỏ khố tìm kiếm, tìm ghi mang khố nhỏ mà lớn khố tìm kiếm…  Tìm kiếm chuỗi ký tự công việc khác sử dụng rộng rãi có giải thuật đặc thù riêng: thuật tốn BRUTE-FORCE, KNUTH- MORRISPRATT, BOYER-MOORE , RABIN-KARP…  Khơng nên đánh giá giải thuật tìm kiếm tốt giải thuật khác phải sử dụng thuật toán phù hợp với yêu cầu cụ thể  35 ... CS CS 123 23 120 421 78 79 69 21 8 23 4 52 120 421 4 52 123 A 120 421 4 52 123 23 78 21 8 79 69 A 21 8 78 69 79 9 69 79 78 Bước 2: sàng theo hàng chục lấy từ sọt mảng CS 120 421 4 52 123 23 78 21 8 79... 69 A 21 8 120 23 123 421 21 8 120 Trang 19 4 52 421 123 23 4 52 69 78 79 CS A Bước 2: sàng theo hàng trăm lấy từ sọt mảng CS 21 8 120 421 123 23 4 52 69 78 79 A CS 23 69 78 79 120 123 21 8 421 4 52 A... 02 mảng B C Trang 16 15 Bước 2: phân chia B thành B1 B2 C thành C1 C2 Bước 3: phân chia:  B1 thành B11 B 12;  B2 thành B21 B 22;  C1 thành C11 C 12;  C2 thành C21 C 22; Bước 4: trộn:  B11 B12

Ngày đăng: 27/02/2022, 14:47

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN