CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN TẬP HỢP

Similar documents
Chương 4 CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP. N.C.Danh

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

Chương 5. Network Layer 19/09/2016 1

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

Hướng dẫn cài đặt FPT

Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

Entity Framework (EF)

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

STACK và QUEUE. Lấy STACK

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

I. Hướng Dẫn Đăng Nhập:

Bài 13: C++11. EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

Tình huống 1: PPPoE với Username và Password

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Mô hình dữ liệu quan hệ (Relational data model)

CẤU TRÚC DỮ LIỆU NÂNG CAO

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

Tài liệu hướng dẫn: Stored Procedure

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Bài 10: Cấu trúc dữ liệu

BELGIUM ONLINE APPOINTMENT

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ. Những hỗ trợ tiên tiến khác của SQL. Đỗ Thanh Nghị

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

HƯỚNG DẪN SỬ DỤNG NHANH MINDJET MIND MANAGER

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

SIEMENS INDUSTRIAL NETWORKS

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

MỤC LỤC. Giáo trình Thiết kế web Trang 1

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

CHAPTER 6: DANH SÁCH LIÊN KẾT (LINKED LISTS)

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

Tạo Project với MPLAB

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

Các kiểu định địa chỉ họ MSC-51

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

Đa ngôn ngữ (Internationalization) trong Servlet

LÂ P TRI NH WEB ASP.NET

Tìm hiểu Group Policy Object và các ví dụ

GV: Phạm Đình Sắc or

SIMULATE AND CONTROL ROBOT

Google Search Engine. 12/24/2014 Google Search Engine 1

HTML DOM - Forms. MSc. nguyenhominhduc

Dọn "rác" Windows 7 vào dịp cuối năm

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

Phần 1: Hướng dẫn sử dụng PictureBox tạo Slide Show

BẢO MẬT TRONG SQL SERVER

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

Lecture 12. Trees (1/2) Nội dung bài học:

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

Nhấn nút New để tạo 1 biến mới Trang 17

KIẾN TRÚC MÁY TÍNH. Giảng viên: ThS. Phan Thanh Toàn. v

Quản trị Linux nâng cao. Tháng 9/2013

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

Bài tập lớn số 1. Giả lập bộ định thời

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN CẤU TRÚC DỮ LIỆU CÂY

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

CHƯƠNG VII CASCADING STYLE SHEET-CSS

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

Mạng máy tính - Computer Network: Hệ. Giao thức - Protocol:

LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC

BÀI LAB ĐỔI TÊN DOMAIN

3 cách Backup Profile trong Windows 7

Time Picker trong Android

- Chạy file cài đặt: kerio-kwf-whql win32.exe. Hộp thoại Choose Setup Language chọn English (United States), chọn

Cấu hình Router FTTH ---X---

CHƯƠNG 5: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG VB.NET

LAB IP SLA Bài 1. Bùi Quốc Kỳ ***

Bài thực hành số 2 QUYỀN và ROLE

// handle of dialog box

Nội dung. Thêm về Java 2. Nguyễn Việt Hà

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

CHƯƠNG 2 CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN (BASIC ABSTRACT DATA TYPES) Nguyễn Công Danh

Virtual LAB Summary (CCNA Routing & Switching)

TỔNG QUAN VỀ.NET VÀ C#

PHÁT TRIỂN ỨNG DỤNG WEB

Cập nhật ResultSet trong JDBC

Bài 7: Các cấu trúc điều khiển

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

Transcription:

CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN TẬP HỢP Đỗ Thanh Nghị dtnghi@cit.ctu.edu.vn

NỘI DUNG Khái niệm tập hợp Phép toán trên tập hợp Cài đặt tập hợp Từ điển Bảng băm 2

KHÁI NIỆM TẬP HỢP Là tập hợp các thành viên hoặc phần tử Các phần tử của tập hợp phải khác nhau Các phần tử của tập hợp có quan hệ tuyến tính Liệt kê các phần tử trong cặp dấu ngoặc { x S : x là một thành viên của tập hợp S x S : x không là một thành viên của tập hợp S : tập hợp rỗng, không có thành viên VD: A={1,2 B= {1,2,3 3

BIỂU DIỄN TẬP HỢP Cho hai tập hợp A và B: A là 1 bộ phận của B, kí hiệu A B: nếu mọi thành viên của A đều là thành viên của B VD: A B Tập hợp A và B bằng nhau, kí hiệu A = B: nếu A B và B A Hợp của hai tập hợp: A B={x x A hoặc x B Giao của hai tập hợp: A B={x x A và x B Hiệu của hai tập hợp: A\B={x x A và x B 4

5 PHÉP TOÁN TẬP HỢP Tên hàm/thủ tục Diễn giải MAKENULLSET(A) Tạo tập A rỗng EMPTY(A) Kiểm tra xem tập A có rỗng? MEMBER(x, A) Kiểm tra xem x có thuộc A? INSERTSET(x, A) Thêm x vào tập A DELETESET(x, A) Xóa x khỏi tập A ASSIGN(A, B) Gán B=A MIN(A) Trả về phần tử nhỏ nhất trong tập hợp EQUAL(A,B) Trả về TRUE nếu A=B UNION(A,B,C) C=A B INTERSECTION(A,B,C) C=A B DIFFERENCE(A,B,C) C=A\B MERGE(A,B,C) C=A B, nhưng có quan tâm thứ tự

CÀI ĐẶT TẬP HỢP CÀI ĐẶT BẰNG VECTƠ BIT CÀI ĐẶT BẰNG DANH SÁCH LIÊN KẾT CÀI ĐẶT BẰNG TỪ ĐIỂN CÀI ĐẶT BẰNG BẢNG BĂM 6

CÀI ĐẶT TẬP HỢP BẰNG VECTƠ BIT (1) Thường được dùng khi tập hợp của ta là 1 tập con của tập số nguyên, có giá trị từ 1..n. Khi đó ta sẽ dùng 1 mảng kiểu boolean có kích thước n để lưu trữ tập hợp Phần tử thứ i của mảng có giá trị TRUE nếu i thuộc tập hợp VD: muốn lưu trữ các tập có giá trị phần tử từ 1..10. Ta dùng mảng có tối đa 10 phần tử. Mô hình cho A={2,5,7,9 là: 7

8 CÀI TẬP HỢP ĐẶT BẰNG VECTƠ BIT (2) Khai báo #define maxlength...; // giá trị phần tử lớn nhất typedef int SET[maxlength]; Tạo tập hợp rỗng: void MakeNull(SET a) { int i; for(i=0; i<maxlength; i++) a[i]=0;

9 CÀI TẬP HỢP ĐẶT BẰNG VECTƠ BIT (2) Kiểm tra thành viên int Member(int x, SET a) { return (a[x] == 1) Phép hợp void Union(SET a, SET b, SET c) { int i; for (i=0;i<maxlength;i++) if(member(i, a) Member(i, b)) c[i]=1; else c[i]=0;

CÀI ĐẶT TẬP HỢP BẰNG VECTƠ BIT (3) Phép giao void Intersection(SET a, SET b, SET c) { int i; for (i=0;i<maxlength;i++) if(member(i, a) && Member(i, b)) c[i]=1; else c[i]=0; Phép hiệu void Difference(SET a, SET b, SET c) { int i; for (i=0;i<maxlength;i++) if(member(i, a) &&!Member(i, b)) c[i]=1; else c[i]=0; 10

CÀI ĐẶT TẬP HỢP BẰNG DSLK(1) Khai báo typedef int ElementType; typedef struct Node* NodeType; struct Node { ElementType Data; NodeType Next; ; typedef NodeType Position; typedef Position SET; 11

CÀI ĐẶT TẬP HỢP BẰNG DSLK(2) Khởi tạo tập hợp rỗng void MakeNull(SET *A) { (*A)=(NodeType)malloc(sizeof(struct Node)); (*A)->Next= NULL; - Các phép toán cơ bản như DSLK: Retrieve(p, A), First(A), End(A), Next(p, A),... 12

13 CÀI ĐẶT TẬP HỢP BẰNG DSLK (3) Kiểm tra X có thuộc tập A không? int Member(ElementType X, SET A) { Position P; int Found = 0; P = First(A); while ((P!= End(A)) && (Found == 0)) if (Retrieve(P, A) == X) Found = 1; else P = Next(P, A); return Found;

14 CÀI ĐẶT TẬP HỢP BẰNG DSLK(4) Thêm một phần tử X vào đầu tập A void Insert(ElementType X, SET *A) { Position T; T=(NodeType)malloc(sizeof(struct Node)); T->Data=X; T->Next=(*A)->Next; (*A)->Next=T;

CÀI ĐẶT TẬP HỢP BẰNG DSLK(4) Phép hợp void Union(SET A, SET B, SET *C) { Position p; MakeNull(C); p=first(a); while (p!=end(a)) { Insert(Retrieve(p, A), C); p=next(p,a); p=first(b); while (p!=end(b)) { if (!Member(Retrieve(p, B), *C)) Insert(Retrieve(p, B), C); p=next(p,b); 15

16 CÀI ĐẶT TẬP HỢP BẰNG DSLK(5) Phép giao void Intersection(SET A, SET B, SET *C) { Position p; MakeNull(C); p=first(a); while (p!=end(a)) { if (Member(Retrieve(p,A),B)) Insert(Retrieve(p,A), C); p=next(p,a);

17 CÀI ĐẶT TẬP HỢP BẰNG DSLK(6) Phép hiệu void Difference(SET A, SET B, SET *C) { Position p; MakeNull(C); p=first(a); while (p!=end(a)) { if (!Member(Retrieve(p,A),B)) Insert(Retrieve(p,A), C); p=next(p,a);

TỪ ĐIỂN Khái niệm: là một tập hợp đơn giản với các phép toán INSERT, DELETE và MEMBER Có thể cài đặt từ điển bằng: Véctơ-bít Danh sách đặc (mảng) Danh sách liên kết có thứ tự hoặc không thứ tự Mảng có kích thước cố định với con nháy chỉ đến vị trí cuối cùng: Khuyết điểm: kích thước không thể lớn tùy ý xóa một phần tử chậm dùng bộ nhớ không hiệu quả Tương tự cài đặt danh sách bằng mảng 18

CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (1) Khai báo #define MaxLength... //So phan tu toi da typedef... ElementType; //Kieu du lieu typedef int Position; typedef struct { ElementType Data[MaxLength]; Position Last; SET; 19

CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (2) Khởi tạo rỗng void MakeNullSET(SET *A) { A->Last=0; Hàm kiểm tra 1 phần tử có trong từ điển không: int Member(ElementType X, SET L) { Position P=1, Found=0; while ((P <= (L.Last)) && (Found == 0)) if ((L.Data[P]) == X) Found = 1; else P++; return Found; 20

CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (2) Thêm 1 phần tử vào từ điển: void InsertSET(ElementType X, SET *A) { if (FullSET(*A)) printf("tap hop day"); else if (Member(X,*A)==0) { A->Last++; A->Data[A->Last]=X; else printf("\nphan tu da ton tai trong tu dien"); 21

CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (3) Xóa 1 phần tử khỏi từ điển: void DeleteSET(ElementType X, SET *A) { if (EmptySET(*A)) printf("tap hop rong!"); else { Position Q=1; while((q<= A->Last)&&(A->Data[Q]!=X)) Q++; if (A->Data[Q]==X) { //int i; //for (i=q; i<a->last; i++) // A->Data[i]=A->Data[i+1]; A->Data[Q] = A->Data[A->Last]; A->Last--; 22

CÀI ĐẶT TỪ ĐIỂN BẰNG BẢNG BĂM (4) BĂM ĐÓNG BĂM MỞ 23

BĂM ĐÓNG (1) Khai báo #define B 100 #define Deleted 1000 #define Empty 1000 typedef int ElementType; typedef int Position; typedef ElementType Dictionary[B]; 24

BĂM ĐÓNG (2) Tạo tự điển rỗng void MakeNullDic(Dictionary D) { for (int i=0 ;i<b; i++) D[i]=Empty; Kiểm tra sự tồn tại của phần tử trong tự điển int Member(ElementType X, Dictionary D) { Position P = H(X); // ham bam int i=0, Found = 0; while ((i < B) && (D[P]!=Empty) && (!Found)) if ((D[P]) == X) Found = 1; else {P=(P+1)%B; i++; return Found; 25

Thêm phần tử vào tự điển BĂM ĐÓNG (3) void InsertDic(ElementType X, Dictionary D){ Position P; if (FullDic(D)) printf("bang bam day"); else if (!Member(X,D)){ P = H(X); int i = 0; while((i<b)&& (D[P]!=Empty)&& (D[P]!=Deleted)) {i++; P=(P+1)%B; D[P]=X; else printf("\nphan tu da ton tai"); 26

BĂM ĐÓNG (4) Xóa từ ra khỏi tự điển void DeleteDic(ElementType X, Dictionary D) { if (EmptyDic(D)) printf("\nbang bam rong!"); else { int i=0; Position P = H(X); while ((i<b) && (D[P]!=X) && (D[P]!=Empty)) {i++; P=(P+1)%B; if (D[P]==X) D[P]=Deleted; 27

BĂM MỞ (1) Khai báo #define B... typedef... ElementType; typedef struct Node* NodeType; struct Node { ElementType Data; NodeType Next; ; typedef NodeType Position; typedef NodeType Dictionary[B]; 28

BĂM MỞ (2) Khởi tạo bảng băm mở rỗng void MakeNullSet(Dictionary *D) { int i; for(i=0; i<b; i++) (*D)[i]=NULL; 29

30 BĂM MỞ (3) Kiểm tra một thành viên trong từ điển int Member(ElementType X, Dictionary D) { Position P; int Found=0; P=D[H(X)]; //Tim o muc H(X) //Duyet tren ds thu H(X) while((p!=null) && (!Found)) if (P->Data==X) Found=1; else P=P->Next; return Found;

BĂM MỞ (4) Thêm một phần tử vào từ điển void InsertSet(ElementType X, Dictionary *D){ if (!Member(X,*D)){ NodeType temp; temp =(NodeType)malloc(sizeof(struct Node)); temp->data = X; temp-> Next = (*D)[H(X)]; (*D)[H(X)] = temp; 31

BĂM MỞ (5) Xoá một phần tử trong từ điển void DeleteSet(ElementType X, Dictionary *D) { Position P, Q; if((*d)[h(x)]!=null) { if ((*D)[H(X)]->Data==X) { Q=(*D)[H(X)]; (*D)[H(X)]=(*D)[H(X)]->Next; free(q); else { int Found = 0; P=(*D)[H(X)]; while ((P->Next!=NULL) && (!Found)) if (P->Next->Data==X) Found=1; else P=P->Next; if(found) { Q=P->Next; P->Next=Q->Next; free(q); 32