SlideShare una empresa de Scribd logo
1 de 29
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 7: Tìm kiếm
Khái niệm tìm kiếm ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bản ghi và khóa ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bản ghi và khóa trên C++ class  Key { public:  //  Add any constructors and methods for key data. private: //  Add declaration of key data members here. } ; bool operator  == ( const  Key &x , const  Key &y) ; bool operator  > ( const  Key &x , const  Key &y) ; bool operator  < ( const  Key &x , const  Key &y) ; bool operator  >= ( const  Key &x , const  Key &y) ; bool operator  <= ( const  Key &x , const  Key &y) ; bool operator  != ( const  Key &x , const  Key &y) ; class  Record{ public: operator  Key( ) ; //  implicit conversion from Record to Key . //  Add any constructors and methods for Record objects. private: //  Add data components. } ;
Hàm tìm kiếm ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tìm tuần tự (sequential search) 5 Target key 7 13 5 21 6 2 8 15 position = 2 return success Số lần so sánh: 3 0 1 2 3 4 5 6 7
Tìm tuần tự - không tìm thấy 9 Target key 7 13 5 21 6 2 8 15 return not_present Số lần so sánh: 8 0 1 2 3 4 5 6 7
Tìm tuần tự - Mã C++ Error_code sequential_search( const  List<Record> &the_list ,  const  Key &target , int  &position) / *  Post:  If an entry in the_list has key equal to target, then return success and the output parameter position locates such an entry within the list. Otherwise return not_present and position becomes invalid. * / { int  s = the_list . size( ) ; for  (position = 0 ;  position < s ;  position++) { Record data ; the_list . retrieve(position ,  data) ; if  (data == target)  return  success ; } return  not_present ; }
Tìm tuần tự - Đánh giá ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tìm trên danh sách có thứ tự ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Quản lý danh sách có thứ tự ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Thêm vào danh sách có thứ tự - Giải thuật Algorithm  Insert Input : x là giá trị cần thêm vào Output : danh sách đã thêm x vào và vẫn có thứ tự // Đi tìm vị trí position mà khóa của x nằm giữa khóa của các phần từ  // tại vị trí position – 1 và position.  1.  for   position = 0  to  size 1.1.  list_data = phần tử tại vị trí position 1.2.  if   x nhỏ hơn hoặc bằng list_data 1.2.1.  thêm  vào tại vị trí này 1.2.2.  ngừng lại End  Insert
Thêm vào danh sách có thứ tự  - Mã C++ Error_code Ordered_list  ::  insert( const  Record &data) / *  Post:  If the Ordered_list is not full, the function succeeds: The Record data is inserted into the list, following the last entry of the list with a strictly  lesser key (or in the rst list position if no list element has a lesser key). Else: the function fails with the diagnostic Error_code overflow. * / { int  s = size( ) ; int  position ; for  (position = 0 ;  position < s ;  position++) { Record list_data ; retrieve(position ,  list_data) ; if  (data <= list_data)  break; } return  List<Record>  ::  insert(position ,  data) ; }
Thêm vào danh sách (viết đè) - Giải thuật ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tìm nhị phân (binary search) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tìm nhị phân – Cách 2 10 Target key 2 5 8 10 12 13 15 18 21 24 position = 3 return success Số lần so sánh: 7 Khóa cần tìm không bằng Khóa cần tìm nhỏ hơn Khóa cần tìm lớn hơn Khóa cần tìm bằng 0 1 2 3 4 5 6 7 8 9 bottom top middle
Tìm nhị phân – Giải thuật 2 Algorithm  Binary_search2 Input : target là khóa cần tìm, bottom và top là giới hạn danh sách Output : position là vị trí nếu tìm thấy 1.  if  bottom > top 1.1.  return  not_present 2.  if  bottom <= top 2.1.  list_data = phần tử tại vị trí mid = (bottom + top)/2 2.2.  if  x == list_data 2.2.1.  position = mid 2.2.2.  return  success 2.3.  if   x < list_data 2.3.1.  call  Binary_search2 với đoạn bên trái (bottom, mid-1) 2.4.  else 2.4.1.  call  Binary_search2 với đoạn bên phải (mid+1, top) End  Binary_search2
Tìm nhị phân 2 – Mã C++ Error_code recursive_binary_2( const  Ordered_list &the list , const  Key &target , int  bottom , int  top , int  &position) { Record data ; if  (bottom <= top) { int  mid = (bottom + top)/2 ; the_list . retrieve(mid ,  data) ; if  (data == target) { position = mid ; return  success ; } else if  (data < target) return  recursive_binary_2(the list ,  target ,  mid + 1 ,  top ,  position) ; else return  recursive_binary_2(the list ,  target ,  bottom ,  mid − 1 ,  position) ; } else return  not_present ; }
Tìm nhị phân – Cách 1 10 Target key 2 5 8 10 12 13 15 18 21 24 position = 3 return success Số lần so sánh: 4 Khóa cần tìm nhỏ hơn hoặc bằng Khóa cần tìm lớn hơn Khóa cần tìm bằng 0 1 2 3 4 5 6 7 8 9 bottom top middle
Tìm nhị phân – Giải thuật 1 Algorithm  Binary_search1 Input : target là khóa cần tìm, bottom và top là giới hạn danh sách Output : position là vị trí nếu tìm thấy 1.  if  bottom == top 1.1.  if   x == phần tử tại vị trí bottom 1.1.1.  position = bottom 1.1.2.  return  success 2.  if  bottom > top 2.1.  return not_present 3.  if  bottom < top 3.1.  if   x < phần tử tại vị trí mid = (bottom + top)/2 3.1.1.  call  Binary_search1 với đoạn bên trái (bottom, mid-1) 3.2.  else 3.2.1.  call  Binary_search1 với đoạn bên phải (mid, top) End  Binary_search1
Tìm nhị phân 1 – Mã C++ Error_code recursive_binary_1( const  Ordered_list &the_list ,  const  Key &target , int  bottom , int  top , int  &position) { Record data ; if  (bottom < top) {  //  List has more than one entry. the_list . retrieve((bottom + top)/2 ,  data) ; if  (data < target)  return  recursive_binary_1(the list ,  target ,  mid + 1 ,  top ,  position) ; else //  Reduce to bottom half of list. return  recursive_binary_1(the list ,  target ,  bottom ,  mid ,  position) ; }  else if  (top < bottom) return  not_present ; //  List is empty. else  { position = bottom ; the_list . retrieve(bottom ,  data) ; if  (data == target)  return  success ; else return  not_present ; } }
Cây so sánh của giải thuật 1
Cây so sánh của giải thuật 2
Tìm nhị phân – Đánh giá
So sánh trong trường hợp trung bình các giải thuật
Đánh giá độ phức tạp của giải thuật ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Độ phức tạp tính bằng tiệm cận
Độ tăng của các hàm chung
Ký hiệu Big-O Thứ tự tăng dần về độ lớn: O (1)  O (lg n)  O (n)  O (n lg n)  O (n 2 )  O (n 3 )  O (2 n ) a  ≠ 0 hoặc là ∞  ≥  : lớn hơn hoặc bằng Ω (g(n)) a  ≠ 0 =  : bằng Θ (g(n)) a ≤  : nhỏ hơn hoặc bằng O (g(n)) 0 <  : nhỏ hơn hẳn o (g(n)) lim n-> ∞  (f(n)/g(n) Bậc của f so với g f(n)  

Más contenido relacionado

La actualidad más candente

ctdl&amp;gt 04-list_don
ctdl&amp;gt 04-list_donctdl&amp;gt 04-list_don
ctdl&amp;gt 04-list_donkikihoho
 
Chuong 4 danh sach lien ket
Chuong 4   danh sach lien ketChuong 4   danh sach lien ket
Chuong 4 danh sach lien ketHoàng Đức
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cayhiep0109
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Hồ Lợi
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 
Ctdl+va+gt chuong+5 8
Ctdl+va+gt chuong+5 8Ctdl+va+gt chuong+5 8
Ctdl+va+gt chuong+5 8Do Ngoc Tuan
 
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTBài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTMasterCode.vn
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)iwanttoit
 
Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếmCây nhị phân tìm kiếm
Cây nhị phân tìm kiếmkikihoho
 
Cac ham excel co ban va nang cao
Cac ham excel co ban va nang caoCac ham excel co ban va nang cao
Cac ham excel co ban va nang caoNguyen Van Hien
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTMasterCode.vn
 
Cac ham thong dung trong excel
Cac ham  thong dung trong excelCac ham  thong dung trong excel
Cac ham thong dung trong excelsnoosy
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02giang
 
Ctdl C04
Ctdl C04Ctdl C04
Ctdl C04giang
 

La actualidad más candente (20)

ctdl&amp;gt 04-list_don
ctdl&amp;gt 04-list_donctdl&amp;gt 04-list_don
ctdl&amp;gt 04-list_don
 
Chuong 4 danh sach lien ket
Chuong 4   danh sach lien ketChuong 4   danh sach lien ket
Chuong 4 danh sach lien ket
 
Ctdl c4-cay
Ctdl c4-cayCtdl c4-cay
Ctdl c4-cay
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
Hsbd van tri
Hsbd van triHsbd van tri
Hsbd van tri
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
Cây Nhị Phân
Cây Nhị PhânCây Nhị Phân
Cây Nhị Phân
 
Giao an tin hoc 11
Giao an tin hoc 11Giao an tin hoc 11
Giao an tin hoc 11
 
Ctdl+va+gt chuong+5 8
Ctdl+va+gt chuong+5 8Ctdl+va+gt chuong+5 8
Ctdl+va+gt chuong+5 8
 
Hsbd van tri
Hsbd van triHsbd van tri
Hsbd van tri
 
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTBài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
 
Cây nhị phân tìm kiếm
Cây nhị phân tìm kiếmCây nhị phân tìm kiếm
Cây nhị phân tìm kiếm
 
Ham excel
Ham excelHam excel
Ham excel
 
Gtga trị
Gtga trịGtga trị
Gtga trị
 
Cac ham excel co ban va nang cao
Cac ham excel co ban va nang caoCac ham excel co ban va nang cao
Cac ham excel co ban va nang cao
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
 
Cac ham thong dung trong excel
Cac ham  thong dung trong excelCac ham  thong dung trong excel
Cac ham thong dung trong excel
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02
 
Ctdl C04
Ctdl C04Ctdl C04
Ctdl C04
 

Destacado

Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03giang
 
Ctdl c1-tong quan
Ctdl c1-tong quanCtdl c1-tong quan
Ctdl c1-tong quanhiep0109
 
Chuong 2 - CSDL phân tán
Chuong 2 - CSDL phân tánChuong 2 - CSDL phân tán
Chuong 2 - CSDL phân tánduysu
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xeptran0phu
 
Slide 01
Slide 01Slide 01
Slide 01son468
 
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngGiáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngShin Nosuke
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01giang
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcSlide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcLoc Tran
 
System hacking_Athena
System hacking_AthenaSystem hacking_Athena
System hacking_AthenaHuynh Khang
 
Phần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhPhần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhHuy Rùa
 
Chuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánChuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánduysu
 
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp
 

Destacado (18)

Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03
 
Ctdl c1-tong quan
Ctdl c1-tong quanCtdl c1-tong quan
Ctdl c1-tong quan
 
Baigiang bai2 lop12_tiet2
Baigiang bai2 lop12_tiet2Baigiang bai2 lop12_tiet2
Baigiang bai2 lop12_tiet2
 
Ctdl 01 t_quan
Ctdl 01 t_quanCtdl 01 t_quan
Ctdl 01 t_quan
 
Chuong 2 - CSDL phân tán
Chuong 2 - CSDL phân tánChuong 2 - CSDL phân tán
Chuong 2 - CSDL phân tán
 
Bai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xepBai giang thuat toan tim kiem va sap xep
Bai giang thuat toan tim kiem va sap xep
 
Bai giang thiet_ke_mang
Bai giang thiet_ke_mangBai giang thiet_ke_mang
Bai giang thiet_ke_mang
 
Slide 01
Slide 01Slide 01
Slide 01
 
Dh Uml1
Dh Uml1Dh Uml1
Dh Uml1
 
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàngGiáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
Giáo trình cấu trúc dữ liệu và giải thuật của lê minh hoàng
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn LộcSlide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
Slide báo cáo cuối kì system hacking-Trần Nguyễn Lộc
 
System hacking_Athena
System hacking_AthenaSystem hacking_Athena
System hacking_Athena
 
Phần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trìnhPhần 1: Các khái niệm cơ bản về lập trình
Phần 1: Các khái niệm cơ bản về lập trình
 
Avl
AvlAvl
Avl
 
Chuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tánChuong 1 - CSDL phân tán
Chuong 1 - CSDL phân tán
 
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
Security Bootcamp 2013 - Giải pháp phát hiện xâm nhập mạng không dây - WIDS -...
 

Similar a Ctdl C07

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
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTMasterCode.vn
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 
1. Algorithms_ Giải thuật.ppt
1. Algorithms_ Giải thuật.ppt1. Algorithms_ Giải thuật.ppt
1. Algorithms_ Giải thuật.pptNynonBi
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdfNguynVnTun74
 
THCS_W11_BaiDocThem
THCS_W11_BaiDocThemTHCS_W11_BaiDocThem
THCS_W11_BaiDocThemCNTT-DHQG
 
Bai7 timkiemnhiphan
Bai7 timkiemnhiphanBai7 timkiemnhiphan
Bai7 timkiemnhiphanHồ Lợi
 
Trí tueeuj nhân tạo
Trí tueeuj nhân tạoTrí tueeuj nhân tạo
Trí tueeuj nhân tạoThuần Phong
 

Similar a Ctdl C07 (18)

Giáo trình excel nâng cao tud
Giáo trình excel nâng cao   tudGiáo trình excel nâng cao   tud
Giáo trình excel nâng cao tud
 
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
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Ctdl c2
Ctdl c2Ctdl c2
Ctdl c2
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
CHƯƠNG 4.pdf
CHƯƠNG 4.pdfCHƯƠNG 4.pdf
CHƯƠNG 4.pdf
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
1. Algorithms_ Giải thuật.ppt
1. Algorithms_ Giải thuật.ppt1. Algorithms_ Giải thuật.ppt
1. Algorithms_ Giải thuật.ppt
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
 
THCS_W11_BaiDocThem
THCS_W11_BaiDocThemTHCS_W11_BaiDocThem
THCS_W11_BaiDocThem
 
Bai7 timkiemnhiphan
Bai7 timkiemnhiphanBai7 timkiemnhiphan
Bai7 timkiemnhiphan
 
Trí tueeuj nhân tạo
Trí tueeuj nhân tạoTrí tueeuj nhân tạo
Trí tueeuj nhân tạo
 
Tablists help
Tablists helpTablists help
Tablists help
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
 

Ctdl C07

  • 1. CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Chương 7: Tìm kiếm
  • 2.
  • 3.
  • 4. Bản ghi và khóa trên C++ class Key { public: // Add any constructors and methods for key data. private: // Add declaration of key data members here. } ; bool operator == ( const Key &x , const Key &y) ; bool operator > ( const Key &x , const Key &y) ; bool operator < ( const Key &x , const Key &y) ; bool operator >= ( const Key &x , const Key &y) ; bool operator <= ( const Key &x , const Key &y) ; bool operator != ( const Key &x , const Key &y) ; class Record{ public: operator Key( ) ; // implicit conversion from Record to Key . // Add any constructors and methods for Record objects. private: // Add data components. } ;
  • 5.
  • 6. Tìm tuần tự (sequential search) 5 Target key 7 13 5 21 6 2 8 15 position = 2 return success Số lần so sánh: 3 0 1 2 3 4 5 6 7
  • 7. Tìm tuần tự - không tìm thấy 9 Target key 7 13 5 21 6 2 8 15 return not_present Số lần so sánh: 8 0 1 2 3 4 5 6 7
  • 8. Tìm tuần tự - Mã C++ Error_code sequential_search( const List<Record> &the_list , const Key &target , int &position) / * Post: If an entry in the_list has key equal to target, then return success and the output parameter position locates such an entry within the list. Otherwise return not_present and position becomes invalid. * / { int s = the_list . size( ) ; for (position = 0 ; position < s ; position++) { Record data ; the_list . retrieve(position , data) ; if (data == target) return success ; } return not_present ; }
  • 9.
  • 10.
  • 11.
  • 12. Thêm vào danh sách có thứ tự - Giải thuật Algorithm Insert Input : x là giá trị cần thêm vào Output : danh sách đã thêm x vào và vẫn có thứ tự // Đi tìm vị trí position mà khóa của x nằm giữa khóa của các phần từ // tại vị trí position – 1 và position. 1. for position = 0 to size 1.1. list_data = phần tử tại vị trí position 1.2. if x nhỏ hơn hoặc bằng list_data 1.2.1. thêm vào tại vị trí này 1.2.2. ngừng lại End Insert
  • 13. Thêm vào danh sách có thứ tự - Mã C++ Error_code Ordered_list :: insert( const Record &data) / * Post: If the Ordered_list is not full, the function succeeds: The Record data is inserted into the list, following the last entry of the list with a strictly lesser key (or in the rst list position if no list element has a lesser key). Else: the function fails with the diagnostic Error_code overflow. * / { int s = size( ) ; int position ; for (position = 0 ; position < s ; position++) { Record list_data ; retrieve(position , list_data) ; if (data <= list_data) break; } return List<Record> :: insert(position , data) ; }
  • 14.
  • 15.
  • 16. Tìm nhị phân – Cách 2 10 Target key 2 5 8 10 12 13 15 18 21 24 position = 3 return success Số lần so sánh: 7 Khóa cần tìm không bằng Khóa cần tìm nhỏ hơn Khóa cần tìm lớn hơn Khóa cần tìm bằng 0 1 2 3 4 5 6 7 8 9 bottom top middle
  • 17. Tìm nhị phân – Giải thuật 2 Algorithm Binary_search2 Input : target là khóa cần tìm, bottom và top là giới hạn danh sách Output : position là vị trí nếu tìm thấy 1. if bottom > top 1.1. return not_present 2. if bottom <= top 2.1. list_data = phần tử tại vị trí mid = (bottom + top)/2 2.2. if x == list_data 2.2.1. position = mid 2.2.2. return success 2.3. if x < list_data 2.3.1. call Binary_search2 với đoạn bên trái (bottom, mid-1) 2.4. else 2.4.1. call Binary_search2 với đoạn bên phải (mid+1, top) End Binary_search2
  • 18. Tìm nhị phân 2 – Mã C++ Error_code recursive_binary_2( const Ordered_list &the list , const Key &target , int bottom , int top , int &position) { Record data ; if (bottom <= top) { int mid = (bottom + top)/2 ; the_list . retrieve(mid , data) ; if (data == target) { position = mid ; return success ; } else if (data < target) return recursive_binary_2(the list , target , mid + 1 , top , position) ; else return recursive_binary_2(the list , target , bottom , mid − 1 , position) ; } else return not_present ; }
  • 19. Tìm nhị phân – Cách 1 10 Target key 2 5 8 10 12 13 15 18 21 24 position = 3 return success Số lần so sánh: 4 Khóa cần tìm nhỏ hơn hoặc bằng Khóa cần tìm lớn hơn Khóa cần tìm bằng 0 1 2 3 4 5 6 7 8 9 bottom top middle
  • 20. Tìm nhị phân – Giải thuật 1 Algorithm Binary_search1 Input : target là khóa cần tìm, bottom và top là giới hạn danh sách Output : position là vị trí nếu tìm thấy 1. if bottom == top 1.1. if x == phần tử tại vị trí bottom 1.1.1. position = bottom 1.1.2. return success 2. if bottom > top 2.1. return not_present 3. if bottom < top 3.1. if x < phần tử tại vị trí mid = (bottom + top)/2 3.1.1. call Binary_search1 với đoạn bên trái (bottom, mid-1) 3.2. else 3.2.1. call Binary_search1 với đoạn bên phải (mid, top) End Binary_search1
  • 21. Tìm nhị phân 1 – Mã C++ Error_code recursive_binary_1( const Ordered_list &the_list , const Key &target , int bottom , int top , int &position) { Record data ; if (bottom < top) { // List has more than one entry. the_list . retrieve((bottom + top)/2 , data) ; if (data < target) return recursive_binary_1(the list , target , mid + 1 , top , position) ; else // Reduce to bottom half of list. return recursive_binary_1(the list , target , bottom , mid , position) ; } else if (top < bottom) return not_present ; // List is empty. else { position = bottom ; the_list . retrieve(bottom , data) ; if (data == target) return success ; else return not_present ; } }
  • 22. Cây so sánh của giải thuật 1
  • 23. Cây so sánh của giải thuật 2
  • 24. Tìm nhị phân – Đánh giá
  • 25. So sánh trong trường hợp trung bình các giải thuật
  • 26.
  • 27. Độ phức tạp tính bằng tiệm cận
  • 28. Độ tăng của các hàm chung
  • 29. Ký hiệu Big-O Thứ tự tăng dần về độ lớn: O (1) O (lg n) O (n) O (n lg n) O (n 2 ) O (n 3 ) O (2 n ) a ≠ 0 hoặc là ∞ ≥ : lớn hơn hoặc bằng Ω (g(n)) a ≠ 0 = : bằng Θ (g(n)) a ≤ : nhỏ hơn hoặc bằng O (g(n)) 0 < : nhỏ hơn hẳn o (g(n)) lim n-> ∞ (f(n)/g(n) Bậc của f so với g f(n) 