void UNION SET a,SET b,SET& c... while Acurrent!=NULL && Bcurrent!=NULL {... ElementType; // Kieu du lieu trong tu dien typedef int Position; int MEMBERElementType X, SET L{ for Position
Trang 1Ch ng 4: T P H P
Trang 2t
Trang 3• Th t c ASSIGN(A,B) gán A cho B ( t c là B:=A )
• Hàm MIN(A) cho ph n t bé nh t trong t p A
• Hàm EQUAL(A,B) cho k t qu TRUE n u A=B ng c l i cho k t
qu FALSE
Trang 4CÀI T T P
– Khi toàn th t p h p là t p h p con c a m t
t p h p các s nguyên n m trong ph m vi
nh t 1 n ch ng h n
– Dùng m t m ng ki u Boolean có n ph n t
đ cài đ t t p h p (ta g i là vect bít),
thu c t p h p
KHÔNG thu c t p h p
Trang 5• Ch ng h n t p h p A={1,3,5,8} đ c bi u di n trong m ng có 10 ph n t nh sau:
0 0 1 0 0 1 0 1 0 1
10 9
8 7 6 5 4 3 2 1
const maxlength = 100;
// giá tr ph n t l n nh t trong t p h p s nguyên không âm
typedef int SET [maxlength];
Trang 6void UNION (SET a,SET b,SET& c)
Trang 7Cài đ đ t b ng danh sách liên k t
• T p h p có th cài đ t b ng danh sách liên k t, trong đó m i ph n t c a danh sách là m t
thành viên c a t p h p
không quan tr ng nh ng n u m t danh sách liên k t
danh sách
• Ch ng h n n u t p h p A đ c bi u di n b ng m t danhsách có th t t ng thì hàm MEMBER(x,A) có th th c hi n
vi c so sánh x m t cách tu n t t đ u danh sách cho đ n khi g p m t ph n t y ≥ x ch không c n so sánh v i t t c các ph n t trong t p h p
Trang 8• A = {1 3 5 6 7 9 10 }
Trang 9• Tìm giao c a hai tâp h p
– N u ds không có th t
for (m i x thu c A ) { Duy t danh sách B xem x có thu c B không N u có thì x thu c giao c a hai t p h p A và B;
Trang 10• 1 3 5 8 9 10
Trang 11typedef Cell* SET;
Th t c INTERSECTION(A,B,C) trong tr ng h p cài
Trang 12while ((Acurrent!=NULL) && (Bcurrent!=NULL)) {
Trang 13• Phép toán hop, hi u có th vi t t ng t (xem
Trang 14Thêm ph n t vào t p h p t ch c nh danh sách có
// P dang luu tru vi tri de xen phan tu X vao
if (P->next!=NULL) && (P->next->element!=x){
Trang 15free(T);
}
}
Trang 16Ki m tra s hi n di n c a ph n t trong t p h p (ds không có th t )
int MEMBER(ElementType X, SET L){
Trang 18Cài đ đ t t đ đ i n b ng m ng
Khai báo
#define MaxLength // So phan tu toi da
typedef ElementType; // Kieu du lieu trong tu dien
typedef int Position;
int MEMBER(ElementType X, SET L){
for (Position P=1; P <= L.Last; P++)
if (L.Data[P-1] == X) return 1;
return 0;
Trang 19printf ("\nPhan tu da ton tai trong tu dien");
for (Position Q=1; (Q<=L.Last)&& (L.Data[Q-1]!=X); Q++) ;
//xóa b ng cách gán ph n t cu i vào ph n t b xóa
if ( L.Data[Q-1]==X) {
L.Data[Q-1]=L.Data[L.Last-1];
L.Last ;
}
Trang 20• Cài đ t t đi n b ng m ng đòi h i t n n phép so sánh đ
hay không thông qua hàm MEMBER
Trang 21B ng b m
Trang 22INTERNET 7
8
6
WINDOWS XP 5
WINWORD
4 3 2 1 0
NETWORK s n m đâu?
Trang 24+++++ 4
3 2 1 0
a b
d
Tim e biet h(e)=3
c
Trang 25typedef Node* Position;
typedef Position Dictionary[B];
Trang 26• Ki m tra m t thành viên trong t đi n đ c cài b ng b ng b m m
– tính đ a ch c a nó trong b ng b m, t c là ph i tính h(x)
– Duy t danh sách c a bucket đ c tr b i D[h(x)] Gi i thu t nh sau:
int MEMBER(ElementType X, Dictionary D){
Trang 27void INSERT_SET(ElementType X, Dictionary& D)
Trang 28void DELETE_SET(ElementType X, Dictionary& D){
int Bucket, Done;
Trang 29}
Trang 30Cài đ đ t b ng b m đ óng
ph i xét dãy các bucket h(x),h1(x),h2(x), cho đ n khi tìm th y x ho c tìm th y m t v trí tr ng.
– n u hk(x) là v trí tr ng đ c g p đ u tiên thì x không th đ ctìm g p m t v trí nào xa h n n a (đi u đó ch đúng v i tr ng
h p ta không h xoá đi m t ph n t nào trong b ng b m)
– N u chúng ta ch p nh n phép xoá thì chúng ta qui c r ng
ph n t b xóa s đ c thay b i m t giá tr đ c bi t, g i là
Deleted, giá tr Deleted không b ng v i b t k m t ph n t nàotrong t p h p đang xét vào nó c ng ph i khác giá tr Empty
– Empty c ng là m t giá tr đ c bi t cho ta bi t ô tr ng
Trang 31Khai báo
#define B 101
#define Deleted "++++++++++ »
#define Empty "**********"
typedef char* ElementType;
typedef ElementType Dictionary [B];
Ki m tra s t n t i c a ph n t trong t đi n
int MEMBER(ElementType x, Dictionary A){
Trang 32Thêm ph n t vào t đi n
void INSERT_SET(ElementType x,Dictionary& A){
Trang 33552 52501552516
1246
134 34600134689
0367
181 ho c 81629181604
5402
h(x) g m 3 s gi a
x2
x
Trang 34nh g p gi y, các ch s cùng
n m t i m t v trí sau khi g p
d c x p l i th ng hàng v inhau r i có th c ng l i r i áp
d ng ph ng pháp chia (mod)
đ cho k t qu b m
• Ví d : khoá 17046329 g p haibiên vào ta có
923046710
C ng l i ta có 1679 1679 mod1000= 679 là k t qu b m
khoá đã cho
Trang 35HÀNG U TIÊN (priority queue)
– INSERT đ thêm ph n t vào hàng u tiên và
– DELETEMIN đ xoá ph n t ra kh i hàng v i ph n t đ c xóa có
đ u tiên bé nh t.
Trang 36bình phân n a danh sách.
• KHÔNG th cài đ t hàng u tiên b ng b ng
b m
Trang 38• th c hi n DELETEMIN ta ch
vi c tr ra nút g c c a cây và lo i
b nút này Tuy nhiên n u lo i b
nút này ta ph i xây d ng l i cây
Trang 39Thêm m t ph n t vào cây
• t o m t nút m i là lá n m m c cao nh t và
ngay bên ph i các lá đang có m t trên m c này.
ta thêm nút m i vào bên trái nh t m c m i
• Cho nút này "n i d n lên" b ng cách đ i ch nó
v i nút cha c a nó n u nút cha có đ u tiên l n
h n
Trang 40thêm nút 4 vào cây
Trang 41}
Trang 42Thêm m t ph n t vào hàng u tiên hay thêm m t nút vào cây có
Trang 43// Tim nut be nhat trong hai nut con cua i
if ((p(L.Data[2*i])<p(L.Data[2*i+1])) || (2*i==L.Last)) j=2*i;
Trang 44for (int i=1;i<=n ; i++){
printf("nhap phan tu thu %d ",i);
Trang 45Bài t p ch ng