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

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

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

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

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

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

ĐỌ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 PLESK PANEL

Entity Framework (EF)

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

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

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#

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

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

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

STACK và QUEUE. Lấy STACK

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

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

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

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

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

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?

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

BELGIUM ONLINE APPOINTMENT

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

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ì?

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:

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

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

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

HTML DOM - Forms. MSc. nguyenhominhduc

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

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

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

SIEMENS INDUSTRIAL NETWORKS

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)

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.

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.

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

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

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ị

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

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

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

SIMULATE AND CONTROL ROBOT

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.

Tạo Project với MPLAB

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ỉ

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

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

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;

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

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

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

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

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

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

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

Ô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)

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

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

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

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

BẢO MẬT TRONG SQL SERVER

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

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

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

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

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

LÂ P TRI NH WEB ASP.NET

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

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

CHƯƠNG VII CASCADING STYLE SHEET-CSS

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

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

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

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT. Bài giảng 3. Trang1. Khoa Khoa Học Và Kỹ Thuật Máy Tính

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

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

Chapter 4 Menus, Functions And Common Dialog

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

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

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

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

3 cách Backup Profile trong Windows 7

Parallels Cloud Server 6.0

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

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

Cập nhật ResultSet trong JDBC

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

- 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

METAPOST. 1.1 Cấu trúc file Metapost. 1.2 Cấu trúc trong Preamble. beginfig(...) endfig;... extra_beginfig(...) extra_endfig... begingraph(...

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

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

BÀI LAB ĐỔI TÊN DOMAIN

B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có 3 thư mục con:

Time Picker trong Android

Transcription:

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

NỘI DUNG SẼ HỌC Khái niệm tập hợp Các kiểu dữ liệu trừu tượng trên tập hợp Cài đặt tập hợp Từ điển Bảng băm

KHÁI NIỆM TẬP HỢP Làtập hợp các thành viên (members) hoặc phần tử (elements) 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, tức là trên tập hợp S có các quan hệ < thỏa mãn: Với mọi a, b trong S thì a<b hoặc b<a Với mọi a, b, c trong S, nếu a<b và b<c thì a<c

BIỂU DIỄN TẬP HỢP 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 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

KIỂU DỮ LIỆU TRỪU TƯỢNG TẬP HỢP Tên hàm/thủ tục Diễn giải MAKENULLSET(A) EMPTY(A) Tạo tập A rỗng 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) DELETESET(x, A) ASSIGN(A, B) MIN(A) EQUAL(A,B) UNION(A,B,C) INTERSECTION(A,B,C) DIFFERENCE(A,B,C) MERGE(A,B,C) Thêm x vào tập A Xóa x khỏi tập A Gán B=A Trả về phần tử nhỏ nhất trong tập hợp Trả về TRUE nếu A=B C=A B C=A B C=A\B 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

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 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 mng có tối đa 10 phần tử. Mô hình cho A={2,5,7,9 là:

CÀI TẬP HỢP ĐẶT BẰNG VECTƠ BIT (2) Khai báo const maxlength = 100; // 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; Tìm hợp void SET_union (SET a,set b,set c){ int i; for (i=0;i<maxlength;i++) if((a[i]==1) (b[i]==1))c[i]=1; else c[i]=0;

CÀI ĐẶT TẬP HỢP BẰNG VECTƠ BIT (3) Tìm giao void SET_intersection(SET a,set b,set c){ int i; for (i=0;i<maxlength;i++) if((a[i]==1)&&(b[i]==1)) c[i]=1; else c[i]=0; Tìm hiệu void SET_difference(SET a,set b,set c){ int i; for (i=0;i<maxlength;i++) if((a[i]==1)&&!(b[i]==1)) c[i]=1; else c[i]=0;

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

CÀI ĐẶT TẬP HỢP BẰNG DSLK(2) Tìm hợp void UnionSET(SET A, SET B, SET *C) { Position p; MakeNullSET(C); p=first(a); while (p!=endset(a)) { InsertSET (Retrieve(p,A),*C); p=next(p,a); p=first(b); while (p!=endset (B)) { if (Member(Retrieve(p,B),*C)==0) InsertSET (Retrieve(p,B),*C); p=next(p,b);

CÀI ĐẶT TẬP HỢP BẰNG DSLK(3) Tìm giao void IntersectionSET(SET A, SET B, SET *C) { Position p; MakeNullSET(C); p=first(a); while (p!=endset(a)) { if (Member(Retrieve(p,A),B)==1) InsertSET (Retrieve(p,A),&(*C)); p=next(p,a);

CÀI ĐẶT TẬP HỢP BẰNG DSLK(4) Thêm một phần tử vào tập hợp void InsertSET(ElementType X, SET L) { Position T,P; int finish=0; P=L; while ((P->Next!=NULL)&&(finish==0)) if (P->Next->Data<=X) P=P->Next; else finish=1; // P dang luu tru vi tri de xen phan tu X vao T=(Node*)malloc(sizeof(Node)); T->Data=X; T->Next=P->Next; P->Next=T;

CÀI ĐẶT TẬP HỢP BẰNG DSLK(5) Xóa một phần tử khỏi tập void DeleteSET(ElementType X, SET L) { Position T,P=L; int finish=0; while ((P->Next!=NULL)&& (finish==0)) if (P->Next->Data<=X) P=P->Next; else finish=1; if ((finish==1) && (P->Next->Data==X)){ T=P->Next; P->Next=T->Next; free(t);

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

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

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;

CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (2) Khởi tạo rỗng void MakeNullSET(SET *L){ (*L).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-1]) == X) Found = 1; else P++; return Found;

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 *L) { if (FullSET(*L)) printf("tap hop day"); else if (Member(X,*L)==0) { (*L).Last++; (*L).Data[(*L).Last-1]=X; else printf("\nphantu da ton tai trong tudien");

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 *L) { if (EmptySET(*L)) printf("tap hop rong!"); else{ Position Q=1; while((q<=(*l).last)&&((*l).data[q-1]!=x)) Q++; if ( (*L).Data[Q-1]==X){ (*L).Data[Q-1]=(*L).Data[(*L).Last-1]; (*L).Last--; //if

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

BĂM ĐÓNG (1) Chỉ số 0 1 2 3 4 5 6 20 34 26 H(x)=x%B B-1 19

BĂM ĐÓNG (1) Khai báo #define B 100 #define Deleted 1000 //Gia dinh gia tri cho o da bi xoa #define Empty 1000 //Gia dinh gia tri cho o chua su dung typedef int ElementType; typedef int Dictionary [B];

BĂM ĐÓNG (2) Tạo tự điển rỗng // Tao tu dien rong void MakeNullDic(Dictionary D) for (int i=0 ;i<b; i++) D[i]=Empty;

BĂM ĐÓNG (1) Thêm vào giá trị 29 Chỉ số 0 1 20 E29 H(x)=x%B 2 E 3 E 4 5 6 34 E 26 i=0 H(29) = 9 i=1 H(29) = 0 E E i=2 H(29)=1 B-1 19

BĂM ĐÓNG (1) Thêm vào giá trị 30 0 1 2 3 4 5 6 B-1 20 29 12 D30 34 E 26 E E 19 i=0 H(30) = 0 i=1 H(30) = 1 i=2 H(30)=2 i=3 H(30)=3

BĂM ĐÓNG (2) Kiểm tra sự tồn tại của phần tử trong tự điển int Member(ElementType X, Dictionary L) {Position P=H(X); int Found = 0,i=0; while ((i<l.last)) && (Found == 0)) if (L.Data[(P+i)%B]==X) (L.Data[(P+i)%B]==Empty) Found = 1; else i++; return (L.Data[(P+i)%B] == X) ;

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

BĂM ĐÓNG (1) Xóa giá trị 30 0 1 2 3 4 5 6 B-1 20 29 12 30 Deleted 34 E 26 E E 19 i=0 H(30) = 0 i=1 H(30) = 1 i=2 H(30)=2 i=3 H(30)=3

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,init =H(X); while ((i<b)&& (D[(i+init)%B]!=X)&& (D[(i+init)%B]!=Empty)) i++; if ( D[(i+init)%B]==X) D[(i+init)%B]=Deleted;

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

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

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) { int Bucket; Position P; if (!Member(X,*D)){ Bucket=H(X); P=(*D)[Bucket]; //Cap phat o nho moi cho *D[Bucket] (*D)[Bucket]=(Node*)malloc(sizeof(Node)); (*D)[Bucket]->Data=X; (*D)[Bucket]->Next=P;

BĂM MỞ (5) Xoá một phần tử trong từ điển void DeleteSet(ElementType X,Dictionary *D) { int Bucket, Done; Position P,Q; Bucket=H(X); if((*d)[bucket]!=null)//danh sach ton tai { if ((*D)[Bucket]->Data==X) //X dau dsach { Q=(*D)[Bucket]; (*D)[Bucket]=(*D)[Bucket]->Next; free(q); else // Tim X { Done=0; P=(*D)[Bucket]; while ((P->Next!=NULL) && (!Done)) if (P->Next->Data==X) Done=1; else P=P->Next; if(done) // Neu tim thay { Q=P->Next; //Xoa P->Next P->Next=Q->Next; free(q);

Hết chương