Element_Type; //Kieu du lieu typedef int Position; typedef struct {Element_Type Data[Max_Length]; Position Last; } Dictionary;.
Trang 3KHÁI NI M T P H P Ệ Ậ Ợ
• T p h p các thành viên (members) ho c ph n t ậ ợ ặ ầ ử (elements) nh khái ni m toán h c ư ệ ọ
• Các ph n t c a t p h p ph i khác nhau ầ ử ủ ậ ợ ả
• T p h p có th t ho c không có th t ậ ợ ứ ự ặ ứ ự
• Ở đây ta s xét t p h p có th t , 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 ớ ọ ế
Trang 5và 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}
Trang 6CÁC PHÉP TOÁN TRÊN T P H P Ậ Ợ
Phép toán Di n gi i ễ ả
Make_Null_Set(S) T o t p h p S r ngạ ậ ợ ỗ
Empty_Set(S) Ki m tra xem t p h p S có r ng?ể ậ ợ ỗ
Member(X,S) Ki m tra xem X có thu c S?ể ộ
Insert_Set(X,S) Thêm ph n t X vào t p h p Sầ ử ậ ợ
Delete_Set(X,S) Xoá ph n t X trong t p h p Sầ ử ậ ợ
Union(A, B,C) C=A∪B
Intersection(A, B, C) C=A∩B
Difference(A,B,C) C=A\B
Trang 7CÀ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 Ặ Ằ Ế
Trang 8CÀ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 0 n-1 Khi đó ta s dùng 1 m ng các ố ị ừ ẽ ả bit có kích th ướ c n đ l u tr t p h p ể ư ữ ậ ợ
Trang 9CÀI T P H P Đ T B NG VECT BIT (2) Ậ Ợ Ặ Ằ Ơ
• Khai báo
const Max_Length = 100; // giá tr ph n t l n nh t ị ầ ử ớ ấ
typedef int Set [Max_Length];
void Set_Union (Set a,Set b,Set &c){
for (int i=0; i<Max_Length; i++) if((a[i]==1)||(b[i]==1)) c[i]=1;
Trang 10CÀI Đ T T P H P B NG VECT BIT (3) Ặ Ậ Ợ Ằ Ơ
• T o giao c a 2 t p h p ạ ủ ậ ợ
void Set_Intersection(Set a,Set b,Set &c){
for (int i=0; i<Max_Length; i++)
if ((a[i]==1)&&(b[i]==1)) c[i]=1;
else c[i]=0;
}
• T o hi u c a hai t p h p ạ ệ ủ ậ ợ
void Set_Difference(Set a,Set b,Set &c){
for (int i=0; i< Max_Length; i++)
if ((a[i]==1)&& (b[i]==0)) c[i]=1;
else c[i]=0;
}
Trang 11CÀI Đ T T P H P B NG VECT BIT (3) Ặ Ậ Ợ Ằ Ơ
• Xét xem m t ph n t có thu c m t t p h p ộ ầ ử ộ ộ ậ ợ hay không?
int Member (int i, Set a) {
if (i<0) || (i>Max_Length-1) return 0;
return a[i]==1;
}
Trang 12CÀI Đ T T P H P B NG VECT BIT (3) Ặ Ậ Ợ Ằ Ơ
• Cài đ t H p c a 2 t p h p b ng cách dùng ặ ợ ủ ậ ợ ằ hàm member
void Set_Union (Set a,Set b,Set &c){
Trang 13CÀI Đ T T P H P B NG VECT BIT (3) Ặ Ậ Ợ Ằ Ơ
• Xen m t ph n t i vào trong t p h p a ộ ầ ử ậ ợ void Insert_Set (int i, Set &a){
if ((i<0) || (i>Max_Length-1))
printf(“Gia tri khong hop le\n”);
else a[i]=1;
}
Trang 14CÀI Đ T T P H P B NG VECT BIT (3) Ặ Ậ Ợ Ằ Ơ
Trang 15ĐÁNH GIÁ PH ƯƠ NG PHÁP CÀI Đ T Ặ
Trang 16CÀI Đ T T P H P B NG DSLK(1) Ặ Ậ Ợ Ằ
• Khai báo
typedef int Element_Type;
typedef struct Node
{ Element_Type Data;
Node * Next;
};
typedef Node * Position;
typedef Position Set;
Trang 23ĐÁNH GIÁ PH ƯƠ NG PHÁP CÀI Đ T Ặ
Trang 25– 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 (Tươ ng t cài đ t danh sách b ng m ng) ự ặ ằ ả
– Bả ng băm
Trang 26CÀI Đ T T ĐI N B NG M NG (1) Ặ Ừ Ể Ằ Ả
• Khai báo
#define Max_Length //So phan tu toi da typedef Element_Type; //Kieu du lieu typedef int Position;
typedef struct
{Element_Type Data[Max_Length];
Position Last;
} Dictionary;
Trang 28CÀI Đ T T ĐI N B NG M NG (3) Ặ Ừ Ể Ằ Ả
• Hàm ki m tra 1 ph n t có trong t đi n không ể ầ ử ừ ể
int Member(Element_Type X, Dictionary D){
Trang 29CÀI Đ T T ĐI N B NG M NG (4) Ặ Ừ Ể Ằ Ả
• Thêm 1 ph n t vào t đi n: ầ ử ừ ể
void Insert_Dictionary(Element_Type X, Dictionary &D){
Trang 30}
Trang 31ĐÁNH GIÁ PH ƯƠ NG PHÁP CÀI Đ T Ặ
Trang 32CÀI Đ T T ĐI N B NG B NG BĂM Ặ Ừ Ể Ằ Ả
• BĂM ĐÓNG
• BĂM MỞ
Trang 33BĂM ĐÓNG (1)
• Đ nh nghĩa: Là m ng m t chi u có B ph n ị ả ộ ề ầ
t M i ph n t đ ử ỗ ầ ử ượ c g i là m t bucket ọ ộ
Ng ườ i ta l u tr d li u trong các bucket ư ữ ữ ệ
• Đ phân ph i d li u vào trong các bucket, ể ố ữ ệ
ng ườ i ta dùng Hàm băm.
• Có nhi u cách đ xác đ nh hàm băm, cách ề ể ị thông d ng nh t là h(x) = x % B ụ ấ
• Giá tr d li u x s đ ị ữ ệ ẽ ượ ư c l u trong T[h(x)]
Trang 356 20
Trang 37CÀI Đ T T ĐI N B NG BĂM ĐÓNG Ặ Ừ Ể Ằ
//Gia dinh gia tri cho o chua su dung
typedef int Element_Type;
typedef Element_Type Dictionary[B];
Trang 38CÀI Đ T T ĐI N B NG BĂM ĐÓNG (2) Ặ Ừ Ể Ằ
Trang 39CÀI Đ T T ĐI N B NG BĂM ĐÓNG (3) Ặ Ừ Ể Ằ
Trang 40• Thêm ph n t vào t ầ ử ừ đi n ể
void Insert_Dictionary(Element_Type X, Dictionary &D){
Trang 41CÀI Đ T T ĐI N B NG BĂM ĐÓNG Ặ Ừ Ể Ằ
(5)
• Xóa t ra kh i t ừ ỏ ừ đi n ể
void Delete_Dictionary(ElementType X, Dictionary &D){
if (Empty_Dictionary(D))
printf("\nTu dien rong!");
else { // tìm X và n u tìm th y m i xoá (đ t ph n t = Deleted)ế ấ ớ ặ ầ ử
int Found =0;
int i=0, init =H(X);
while ((i<=B-1)&&(D[(i+init)%B]!=Empty) && (!Found))
Trang 43Bài t p ậ
• Cài đ t hàm Full_Dictionary và ặ Empty_Dictionary
Trang 44B NG BĂM M Ả Ở
• Đ nh nghĩa: Là m t m ng m t chi u có B ph n t M i ị ộ ả ộ ề ầ ử ỗ
ph n t là m t con tr , tr đ n m t danh sách liên k t l u ầ ử ộ ỏ ỏ ế ộ ế ư
tr d li u M i danh sách liên k t đ ữ ữ ệ ỗ ế ượ c g i là m t bucket ọ ộ
•
Trang 45CÀI Đ T T ĐI N B NG BĂM M (1) Ặ Ừ Ể Ằ Ở
Node* Next;
};
typedef Node* Position;
typedef Position Dictionary[B];
Trang 46CÀI Đ T T ĐI N B NG BĂM M (2) Ặ Ừ Ể Ằ Ở
Trang 47CÀI Đ T T ĐI N B NG BĂM M (3) Ặ Ừ Ể Ằ Ở
//Duyet tren ds duoc tro boi D[H(X)]
while((P->Next!=NULL) && (!Found))
if (P->Next->Data==X) Found=1;
else P=P->Next;
return Found;
}
Trang 48CÀI Đ T T ĐI N B NG BĂM M (4) Ặ Ừ Ể Ằ Ở
• Thêm m t ph n t vào t đi n (xen v ộ ầ ử ừ ể ào đ u ầ lô)
void Insert_Dictionary(Element_Type X, Dictionary &D){
Trang 49CÀI Đ T T ĐI N B NG BĂM M (4) Ặ Ừ Ể Ằ Ở
Trang 50CÀI Đ T T ĐI N B NG BĂM M (5) Ặ Ừ Ể Ằ Ở
void Delete_Dictionary(Element_Type X, Dictionary &D){
Trang 52Thank you