SlideShare a Scribd company logo
1 of 16
Download to read offline
Cấu trúc dữ liệu và thuật giải
Tìm kiếm
Tìm kiếm
• Tìm kiếm tuần tự
• Thời gian tồi nhất là n
• Chúng tôi có Độ phức tạp O(n)
• Ứng dụng cho mảng (không sắp xếp) và danh
sách liên kết
• Tìm kiếm nhị phân
• Ứng dụng cho dãy đã sắp xếp
• Thời gian thực hiện thuật toán log2 n
• Độ phức tạp tính toán O(log n)
Tìm kiếm – Tìm kiếm nhị phân
• Tạo ra một dãy đã sắp xếp
• Bổ xung vào danh sách liên kết
(AddToCollection)
• Bổ xung giá trị vào các vị trí đúng
• Tìm vị trí c1 log2 n
• Duyệt xuống c2 n
• Tổng quát c1 log2 n + c2 n
Hoặc c2 n
• Mỗi hoạt động gắn với dãy đã sắp xếp O(n)
? Chúng tôi có thể duy trì một dãy đã sắp
xếp với các hoạt động chèn dẻ hơn?
Dominant
term
Cây
• Cây nhị phân
• Bao gồm
• Node
• Các cây con trái và cây con phải
• Cả hai cây con đều là cây nhị phân
Cây
• Cây nhị phân
• Bao gồm
• Node
• Các cây con trái và con phải
• Cả hai đều là cây nhị phân
Chú ý
Định nghĩa
đệ qui!
Mỗi cây con
Là một cây
Nhị phân
Cây – Thủ tục
• Cấu trúc dữ liệu
struct t_node {
void *item;
struct t_node *left;
struct t_node *right;
};
typedef struct t_node *Node;
struct t_collection {
Node root;
……
};
Cây – Thủ tục
• Tìm (Find )
extern int KeyCmp( void *a, void *b );
/* Returns -1, 0, 1 for a < b, a == b, a > b */
void *FindInTree( Node t, void *key ) {
if ( t == (Node)0 ) return NULL;
switch( KeyCmp( key, ItemKey(t->item) ) ) {
case -1 : return FindInTree( t->left, key );
case 0: return t->item;
case +1 : return FindInTree( t->right, key );
}
}
void *FindInCollection( collection c, void *key ) {
return FindInTree( c->root, key );
}
Less,
search
left
Greater,
search right
Cây – Thủ tục
• Find
• key = 22;
if ( FindInCollection( c , &key ) ) ….
n = c->root;
FindInTree( n, &key );
FindInTree(n->right,&key );
FindInTree(n->left,&key );
return n->item;
Cây – hoạt động
• Find
• Cây hoàn toàn
• Chiều cao, h
• Các node di truyển trên một con đường từ gốc đến
một lá
• Số các node, h
• n = 1 + 21 + 22 + … + 2h = 2h+1 - 1
• h = floor( log2 n )
Cây – Hoạt động
• Find
• Cây hoàn toàn
• Vì chúng tôi cần nhiều nhât h+1 phép so sánh,
độ phức tạp O(h+1) hoặc O(log n)
• Giống như tìm kiếm nhị phân
Tổng kết
Arrays
Đơn giản, nhanh
Không mềm dẻo
O(1)
O(n) inc sort
O(n)
O(n)
O(logn)
Tìm kiếm nhị phân
Add
Delete
Find
Linked List
Đơn giản
Mềm dẻo
O(1)
sort -> no adv
O(1) - any
O(n) - specific
O(n)
(không tìm kiếm
nhị phân)
Trees
Vẫn đơn giản
Mềm dẻo
O(log n)
Cây – Bổ xung (Addition)
• Cộng 21 vào cây
• Chúng tôi cần tối đa h+1 phép so sánh
• Tạo một node mới (thời gian là hằng số)
add lấy c1(h+1)+c2 hoặc c log n
• Vì thế việc bổ xung vào một cây cũng chiếm
thời gian là log n
Ignoring
low order
terms
Cây - Addition – thủ tục
static void AddToTree( Node *t, Node new ) {
Node base = *t;
/* If it's a null tree, just add it here */
if ( base == NULL ) {
*t = new; return; }
else
if( KeyLess(ItemKey(new->item),ItemKey(base->item)) )
AddToTree( &(base->left), new );
else
AddToTree( &(base->right), new );
}
void AddToCollection( collection c, void *item ) {
Node new, node_p;
new = (Node)malloc(sizeof(struct t_node));
/* Attach the item to the node */
new->item = item;
new->left = new->right = (Node)0;
AddToTree( &(c->node), new );
}
Cây – Bổ xung (Addition)
• Find c log n
• Add c log n
• Delete c log n
• Hiệu quả rất đáng kể!
• Tuy nhiên vẫn bắt gặp một số trường hợp
………..
Cây – Bổ xung (Addition)
• Lấy danh sách ký tự này và hình thành một
cây
A B C D E F
• ??
Trees - Addition
• Nhận danh sách ký tự này và hình thành
một cây A B C D E F
• Trong trường hợp này:
? Find
? Add
? Delete

More Related Content

Viewers also liked

Bai5 dsachlket
Bai5 dsachlketBai5 dsachlket
Bai5 dsachlketHồ Lợi
 
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2Hồ Lợi
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functionsHồ Lợi
 
Bài tập CTDL và GT 9
Bài tập CTDL và GT 9Bài tập CTDL và GT 9
Bài tập CTDL và GT 9Hồ Lợi
 
Ctdl 2005 chuong 1
Ctdl 2005 chuong 1Ctdl 2005 chuong 1
Ctdl 2005 chuong 1Hồ Lợi
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Hồ Lợi
 
Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Hồ Lợi
 
Bài tập CTDL và GT 6
Bài tập CTDL và GT 6Bài tập CTDL và GT 6
Bài tập CTDL và GT 6Hồ Lợi
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Hồ Lợi
 
Ppresentacion eu
Ppresentacion euPpresentacion eu
Ppresentacion eupak70
 

Viewers also liked (14)

Bai6 stacks
Bai6 stacksBai6 stacks
Bai6 stacks
 
Bai5 dsachlket
Bai5 dsachlketBai5 dsachlket
Bai5 dsachlket
 
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
 
Chuong7
Chuong7Chuong7
Chuong7
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functions
 
Bài tập CTDL và GT 9
Bài tập CTDL và GT 9Bài tập CTDL và GT 9
Bài tập CTDL và GT 9
 
Ctdl 2005 chuong 1
Ctdl 2005 chuong 1Ctdl 2005 chuong 1
Ctdl 2005 chuong 1
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13
 
Bài tập CTDL và GT 7
Bài tập CTDL và GT 7Bài tập CTDL và GT 7
Bài tập CTDL và GT 7
 
Bài tập CTDL và GT 6
Bài tập CTDL và GT 6Bài tập CTDL và GT 6
Bài tập CTDL và GT 6
 
Bài tập CTDL và GT 3
Bài tập CTDL và GT 3Bài tập CTDL và GT 3
Bài tập CTDL và GT 3
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Ppresentacion eu
Ppresentacion euPpresentacion eu
Ppresentacion eu
 

Similar to Bai7 timkiemnhiphan

Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xepquang
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xepquang
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cayhiep0109
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cayutteoteo
 
Ctdl C10
Ctdl C10Ctdl C10
Ctdl C10giang
 
Ctdl C07
Ctdl C07Ctdl C07
Ctdl C07giang
 
Ctdl C11
Ctdl C11Ctdl C11
Ctdl C11giang
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
Chuong 5 cau truc du lieu cay
Chuong 5   cau truc du lieu cayChuong 5   cau truc du lieu cay
Chuong 5 cau truc du lieu caysathuan
 

Similar to Bai7 timkiemnhiphan (12)

Baigiang ctdl
Baigiang ctdlBaigiang ctdl
Baigiang ctdl
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xep
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xep
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cay
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cay
 
Ctdl C10
Ctdl C10Ctdl C10
Ctdl C10
 
Ctdl C07
Ctdl C07Ctdl C07
Ctdl C07
 
Ctdl C11
Ctdl C11Ctdl C11
Ctdl C11
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Chuong 5 cau truc du lieu cay
Chuong 5   cau truc du lieu cayChuong 5   cau truc du lieu cay
Chuong 5 cau truc du lieu cay
 

More from Hồ Lợi

Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cHồ Lợi
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignmentHồ Lợi
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhHồ Lợi
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Hồ Lợi
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++Hồ Lợi
 
Epc assignment
Epc assignmentEpc assignment
Epc assignmentHồ Lợi
 
Epc test practical
Epc test practicalEpc test practical
Epc test practicalHồ Lợi
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --thHồ Lợi
 

More from Hồ Lợi (20)

Xu ly chuoi
Xu ly chuoiXu ly chuoi
Xu ly chuoi
 
Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của c
 
T4
T4T4
T4
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignment
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Gtrinh oop
Gtrinh oopGtrinh oop
Gtrinh oop
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++
 
File trong c_
File trong c_File trong c_
File trong c_
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --th
 
Dethi c++ -lt
Dethi c++ -ltDethi c++ -lt
Dethi c++ -lt
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
D05 stl
D05 stlD05 stl
D05 stl
 
Cpl test3
Cpl test3Cpl test3
Cpl test3
 
Cpl test2
Cpl test2Cpl test2
Cpl test2
 

Bai7 timkiemnhiphan

  • 1. Cấu trúc dữ liệu và thuật giải Tìm kiếm
  • 2. Tìm kiếm • Tìm kiếm tuần tự • Thời gian tồi nhất là n • Chúng tôi có Độ phức tạp O(n) • Ứng dụng cho mảng (không sắp xếp) và danh sách liên kết • Tìm kiếm nhị phân • Ứng dụng cho dãy đã sắp xếp • Thời gian thực hiện thuật toán log2 n • Độ phức tạp tính toán O(log n)
  • 3. Tìm kiếm – Tìm kiếm nhị phân • Tạo ra một dãy đã sắp xếp • Bổ xung vào danh sách liên kết (AddToCollection) • Bổ xung giá trị vào các vị trí đúng • Tìm vị trí c1 log2 n • Duyệt xuống c2 n • Tổng quát c1 log2 n + c2 n Hoặc c2 n • Mỗi hoạt động gắn với dãy đã sắp xếp O(n) ? Chúng tôi có thể duy trì một dãy đã sắp xếp với các hoạt động chèn dẻ hơn? Dominant term
  • 4. Cây • Cây nhị phân • Bao gồm • Node • Các cây con trái và cây con phải • Cả hai cây con đều là cây nhị phân
  • 5. Cây • Cây nhị phân • Bao gồm • Node • Các cây con trái và con phải • Cả hai đều là cây nhị phân Chú ý Định nghĩa đệ qui! Mỗi cây con Là một cây Nhị phân
  • 6. Cây – Thủ tục • Cấu trúc dữ liệu struct t_node { void *item; struct t_node *left; struct t_node *right; }; typedef struct t_node *Node; struct t_collection { Node root; …… };
  • 7. Cây – Thủ tục • Tìm (Find ) extern int KeyCmp( void *a, void *b ); /* Returns -1, 0, 1 for a < b, a == b, a > b */ void *FindInTree( Node t, void *key ) { if ( t == (Node)0 ) return NULL; switch( KeyCmp( key, ItemKey(t->item) ) ) { case -1 : return FindInTree( t->left, key ); case 0: return t->item; case +1 : return FindInTree( t->right, key ); } } void *FindInCollection( collection c, void *key ) { return FindInTree( c->root, key ); } Less, search left Greater, search right
  • 8. Cây – Thủ tục • Find • key = 22; if ( FindInCollection( c , &key ) ) …. n = c->root; FindInTree( n, &key ); FindInTree(n->right,&key ); FindInTree(n->left,&key ); return n->item;
  • 9. Cây – hoạt động • Find • Cây hoàn toàn • Chiều cao, h • Các node di truyển trên một con đường từ gốc đến một lá • Số các node, h • n = 1 + 21 + 22 + … + 2h = 2h+1 - 1 • h = floor( log2 n )
  • 10. Cây – Hoạt động • Find • Cây hoàn toàn • Vì chúng tôi cần nhiều nhât h+1 phép so sánh, độ phức tạp O(h+1) hoặc O(log n) • Giống như tìm kiếm nhị phân
  • 11. Tổng kết Arrays Đơn giản, nhanh Không mềm dẻo O(1) O(n) inc sort O(n) O(n) O(logn) Tìm kiếm nhị phân Add Delete Find Linked List Đơn giản Mềm dẻo O(1) sort -> no adv O(1) - any O(n) - specific O(n) (không tìm kiếm nhị phân) Trees Vẫn đơn giản Mềm dẻo O(log n)
  • 12. Cây – Bổ xung (Addition) • Cộng 21 vào cây • Chúng tôi cần tối đa h+1 phép so sánh • Tạo một node mới (thời gian là hằng số) add lấy c1(h+1)+c2 hoặc c log n • Vì thế việc bổ xung vào một cây cũng chiếm thời gian là log n Ignoring low order terms
  • 13. Cây - Addition – thủ tục static void AddToTree( Node *t, Node new ) { Node base = *t; /* If it's a null tree, just add it here */ if ( base == NULL ) { *t = new; return; } else if( KeyLess(ItemKey(new->item),ItemKey(base->item)) ) AddToTree( &(base->left), new ); else AddToTree( &(base->right), new ); } void AddToCollection( collection c, void *item ) { Node new, node_p; new = (Node)malloc(sizeof(struct t_node)); /* Attach the item to the node */ new->item = item; new->left = new->right = (Node)0; AddToTree( &(c->node), new ); }
  • 14. Cây – Bổ xung (Addition) • Find c log n • Add c log n • Delete c log n • Hiệu quả rất đáng kể! • Tuy nhiên vẫn bắt gặp một số trường hợp ………..
  • 15. Cây – Bổ xung (Addition) • Lấy danh sách ký tự này và hình thành một cây A B C D E F • ??
  • 16. Trees - Addition • Nhận danh sách ký tự này và hình thành một cây A B C D E F • Trong trường hợp này: ? Find ? Add ? Delete