ch cÁc phÉp toÁn cƠ bẢn trÊn tẬp hỢp · cÀi ĐẶt tẬp hỢp bẰng vectƠ bit (1)...
TRANSCRIPT
![Page 1: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/1.jpg)
Chương 4CÁC PHÉP TOÁN CƠ BẢN
TRÊN TẬP HỢPN.C.Danh
![Page 2: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/2.jpg)
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
![Page 3: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/3.jpg)
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
![Page 4: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/4.jpg)
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}
![Page 5: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/5.jpg)
KIỂU DỮ LIỆU TRỪU TƯỢNG TẬP HỢPTên hàm/thủ tục Diễn giải
MAKENULLSET(A) Tạo tập A rỗngEMPTY(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 ADELETESET(x, A) Xóa x khỏi tập AASSIGN(A, B) Gán B=AMIN(A) Trả về phần tử nhỏ nhất trong tập hợpEQUAL(A,B) Trả về TRUE nếu A=BUNION(A,B,C) C=A∪BINTERSECTION(A,B,C) C=A∩BDIFFERENCE(A,B,C) C=A\BMERGE(A,B,C) C=A∪B, nhưng có quan tâm thứ tự
![Page 6: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/6.jpg)
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
![Page 7: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/7.jpg)
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à:
![Page 8: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/8.jpg)
CÀI TẬP HỢP ĐẶT BẰNG VECTƠ BIT (2)
• Khai báoconst 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;
}
![Page 9: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/9.jpg)
CÀI ĐẶT TẬP HỢP BẰNG VECTƠ BIT (3)
• Tìm giaovoid 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;
}
![Page 10: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/10.jpg)
CÀI ĐẶT TẬP HỢP BẰNG DSLK(1)
• Khai báotypedef int ElementType;typedef struct Node{ElementType Data;Node * Next;};
typedef Node * Position;typedef Position SET;//LIST//typedef List SET;
![Page 11: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/11.jpg)
CÀI ĐẶT TẬP HỢP BẰNG DSLK(2)Tìm hợpvoid 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);}
}
![Page 12: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/12.jpg)
CÀI ĐẶT TẬP HỢP BẰNG DSLK(3)
• Tìm giaovoid 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);}
}
![Page 13: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/13.jpg)
CÀI ĐẶT TẬP HỢP BẰNG DSLK(4)
• Thêm một phần tử vào tập hợpvoid 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 vaoT=(Node*)malloc(sizeof(Node));T->Data=X;T->Next=P->Next;P->Next=T;
}
![Page 14: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/14.jpg)
CÀI ĐẶT TẬP HỢP BẰNG DSLK(5)
• Xóa một phần tử khỏi tậpvoid 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);
}}
![Page 15: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/15.jpg)
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;}
![Page 16: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/16.jpg)
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
![Page 17: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/17.jpg)
CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (1)
• Khai báo#define MaxLength ... //So phan tu toi datypedef ... ElementType; //Kieu du lieu typedef int Position;typedef struct{ElementType Data[MaxLength];Position Last;
} SET;
![Page 18: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/18.jpg)
CÀI ĐẶT TỪ ĐIỂN BẰNG MẢNG (2)
• Khởi tạo rỗngvoid 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;
}
![Page 19: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/19.jpg)
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;
}elseprintf("\nPhantu da ton tai trong tudien");
}
![Page 20: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/20.jpg)
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}
![Page 21: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/21.jpg)
CÀI ĐẶT TỪ ĐIỂN BẰNG BẢNG BĂM (4)
• BĂM ĐÓNG• BĂM MỞ
![Page 22: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/22.jpg)
BĂM ĐÓNG (1)
19B-1
…266
5344
321
200Chỉsố
H(x)=x%B
![Page 23: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/23.jpg)
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 dungtypedef int ElementType;
typedef int Dictionary [B];
![Page 24: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/24.jpg)
BĂM ĐÓNG (2)• Tạo tự điển rỗng
// Tao tu dien rongvoid MakeNullDic(Dictionary D)for (int i=0 ;i<B; i++)
D[i]=Empty;}
![Page 25: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/25.jpg)
BĂM ĐÓNG (1)Thêm vào giá trị 29
19B-1EE…266E5344E3E2E1200Chỉ
số H(x)=x%B
i=0 H(29) = 9
i=1 H(29) = 0
i=2 H(29)=1
29
![Page 26: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/26.jpg)
BĂM ĐÓNG (1)Thêm vào giá trị 30
19B-1EE…266E5344D3122291200 i=0 H(30) = 0
i=1 H(30) = 1
i=2 H(30)=2
i=3 H(30)=3
30
![Page 27: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/27.jpg)
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) ;}
![Page 28: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/28.jpg)
BĂM ĐÓNG (3)• Thêm phần tử vào tự điểnvoid 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;
} elseprintf("\nPhan tu da ton tai");
}
![Page 29: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/29.jpg)
BĂM ĐÓNG (1)Xóa giá trị 30
19B-1EE…266E5344303122291200 i=0 H(30) = 0
i=1 H(30) = 1
i=2 H(30)=2
i=3 H(30)=3
Deleted
![Page 30: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/30.jpg)
BĂM ĐÓNG (4)• Xóa từ ra khỏi tự điểnvoid 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;
}}
![Page 31: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/31.jpg)
BĂM MỞ (1)• Khai báo
#define B ...typedef ... ElementType;typedef struct Node{ElementType Data;Node* Next;
};typedef Node* Position;
typedef Position Dictionary[B];
![Page 32: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/32.jpg)
BĂM MỞ (2)
• Khởi tạo bảng băm mở rỗngvoid MakeNullSet(Dictionary *D){for(int i=0;i<B;i++)(*D)[i]=NULL;
}
![Page 33: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/33.jpg)
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;}
![Page 34: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/34.jpg)
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;
}}
![Page 35: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/35.jpg)
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);
}}}}
![Page 36: Ch CÁC PHÉP TOÁN CƠ BẢN TRÊN TẬP HỢP · 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,](https://reader034.vdocuments.net/reader034/viewer/2022050715/5e040d48865315658c15c6f9/html5/thumbnails/36.jpg)
Hết chương