Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 50 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
50
Dung lượng
6,96 MB
Nội dung
C U TRÚC D LI U VÀ THU T TOÁN Data Structures and Algorithms Nguy N C NGH A B mơn Khoa h c Máy tính i h c Bách khoa Hà n i Tel: 0438696121 (Off), 0903210111 (Mob) nghiand@soict.hut.edu.vn Ch ng CÁC KI N TH C C C u trúc d li u thu t toán - N Ngh a B môn KHMT N I DUNG 1.1 Ví d m đ u 1.2 Thu t tốn đ ph c t p 1.3 Ký hi u ti m c n 1.4 Gi ngôn ng 1.5 M t s k thu t phân tích thu t tốn C u trúc d li u thu t toán - N Ngh a B môn KHMT B N Ví d m đ u • Bài tốn tìm dãy l n nh t: Cho dãy s a1, a2, … , an Dãy s ai, ai+1 , …, aj v i ≤ i ≤ j ≤ n đ c g i dãy c a dãy cho ∑jk=i ak đ c g i tr ng l ng c a dãy Bài toán đ t là: Hãy tìm tr ng l ng l n nh t c a dãy con, t c tìm c c đ i giá tr ∑jk=i ak đ n gi n ta g i dãy có tr ng l ng l n nh t dãy l n nh t • Ví d : N u dãy cho -2, 11, -4, 13, -5, c n đ a câu tr l i 20 (là tr ng l C u trúc d ng c a dãy 11, -4, 13) li u thu t toán - N Ngh a B mơn KHMT Thu t tốn tr c ti p • Thu t tốn đ n gi n đ u tiên có th ngh đ gi i tốn đ t là: Duy t t t c dãy có th ai, ai+1 , …, aj v i ≤ i ≤ j ≤ n tính t ng c a m i dãy đ tìm tr ng l • Tr c h t nh n th y r ng, t ng s dãy có th c a dãy cho C(n,2) + n = n2/2 + n/2 C u trúc d ng l n nh t li u thu t tốn - N Ngh a B mơn KHMT Thu t tốn tr c ti p • Thu t tốn có th cài đ t đo n ch ng trình sau: int maxSum = 0; for (int i=0; i T[k], j*=j, i*=(i+j) div + 1, th d*=j*i*+1 = j - (i+j) div j -(i+j-1)/2 - i = (j - i + 1)/2 = d/2 – N u x = T[k], d* = d C u trúc d li u thu t toán - N Ngh a B mơn KHMT Binary-Search (ti p) • V y ln có: d* d/2 • Do vịng l p k t thúc d 1, nên t suy thu t tốn ph i k t thúc • G i dp giá tr c a j - i + l n l p th p d0 = n Khi dp dp-1/2, p • Thu t tốn k t thúc t i b = log n c p n u dp 1, u x y p • V y th i gian tính c a thu t toán O(log n) C u trúc d li u thu t toán - N Ngh a B môn KHMT Các mô t khác c a thu t toán Binary Search Function mid=bsearch1(L,p,q,key) Function mid=bsearch2(L,p,q,key) while q>p mid=floor((p+q)/2); if keyp mid=floor((p+q)/2); if key==L(mid) break break p=mid; if key==L(p) mid=p; else mid=0; end Tìm th y r i d ng?! C u trúc d elseif key 0) { i = n / 2; if (a[i] == x) return true; if (a[i] < x) { /* Ti p t c tìm n a trái */ a = &a[i + 1]; n = n - i - 1; } else /* Ti p t c tìm n a ph i */ n = i; } return false; } C u trúc d li u thu t tốn - N Ngh a B mơn KHMT Câu l nh đ c tr ng • nh ngh a Câu l nh đ c tr ng câu l nh đ c th c hi n th ng xuyên nh t c ng nh b t k câu l nh thu t tốn • N u gi thi t th i gian th c hi n m i câu l nh b ch n b i h ng s th i gian tính c a thu t tốn s c v i s l n th c hi n câu l nh đ c tr ng • => đánh giá th i gian tính có th đ m s l n th c hi n câu l nh đ c tr ng C u trúc d li u thu t tốn - N Ngh a B mơn KHMT Ví d : FibIter function Fibiter(n) begin i:=0; j:=1; for k:=1 to n begin j:= j+i; i:= j-i; end; Fibiter:= j; end; C u trúc d Câu l nh đ c tr ng • S l n th c hi n câu l nh đ c tr ng n • V y th i gian tính c a thu t toán O(n) li u thu t toán - N Ngh a B mơn KHMT Ví d : Thu t tốn ví d m đ u int maxSum =0; for (int i=0; i