Đề cương cấu trúc dữ liệu và giải thuật

56 467 0
Đề cương cấu trúc dữ liệu và giải thuật

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tr ng HSP Thỏi Nguyờn Nội dung ôn thi tốt nghiệp Mụn : Ngnh: C u trỳc d li u v gi i thu t S ph m Tin-K39 I-Quan h : Quan h v bi u di n quan h Quan h ng c v quan h h p thnh Quan h t ng ng Bao úng b c c u c a quan h Thu t toỏn xõy d ng bao úng b c c u c a quan h II-Phõn tớch v thi t k thu t toỏn Khỏi ni m thu t toỏn Thi t k thu t toỏn: Cỏc chi n l c chia tr , thi t k t trờn xu ng, thi t k t d i lờn v tinh ch nh t ng b c Phõn tớch thi t k thu t toỏn: ph c t p c a thu t toỏn, xỏc nh ph c t p c a tho t toỏn t t nh t, trung bỡnh, x u nh t M t s cỏc bi toỏn cú ph c t p a th c, hm m , v n h b c ph c t p c a bi toỏn III- quy v thu t toỏn quy: Khỏi ni m v quy, thu t toỏn quy Thi t k thu t toỏn quy, ng d ng c a thu t toỏn quy Thu t toỏn quay lui v ng d ng IV-Danh sỏch liờn k t Danh sỏch liờn k t n: Khỏi ni m , ci t danh sỏch liờn k t n.Cỏc phộp toỏn x lý, ng d ng Danh sỏch liờn k t kộp, danh sỏch n i vũng: Ci t cỏc danh sỏch liờn t, cỏc phộp toỏn x lý v i m i lo i danh sỏch ú Stack v queue liờn k t : Khỏi ni m cỏc cỏch bi u di n, cỏc phộp toỏn x lý, ng d ng V-S p x p v tỡm ki m Cỏc ph ng phỏp s p x p n gi n( l a ch n, chốn, n i b t): í t ng a ph ng phỏp.VD minh h a thu t toỏn, ỏnh giỏ ph c t p c a th õt toỏn Cỏc ph ng phỏp s p x p hi n i: (Phõn n, vung ng, ho nh p): í t ng, VD minh ho thu t toỏn, ph c t p c a thu t toỏn Tỡm ki m tu n t , nh phõn: Ph ng phỏp thuõt toỏn, ỏnh giỏ ph c p c a thu t toỏn VI-Cõy nh ngh a v cỏc khỏi ni m Cõy t ng quỏt: Cỏc ph ng phỏp bi u di n cõy nh phõn trờn mỏy tớnh, cỏc phộp t cõy, cỏc phộp x lý cõy tỡm ki m nh phõn ng ng a cõy VIIth nh ngh a v cỏc khỏi ni m bi u di n th Chu trỡnh Euler, thu t toỏn tỡm chu trỡnh v ng i Euler Chu trỡnh Haminton v ng i Haminton Duy t th , tỡm ki m theo chi u sõu, tỡm ki m theo chi u r ng Cõy khung v cõy khung v i giỏ tr c c ti u, thu t toỏn Kruskal Bi toỏn bao úng truy n ng, s p x p topo v ng d ng ng i ng n nh t, thu t toỏn Dijstra, thu t toỏn floyd Tr n c Nam C NG C U TRC D LI U V GI I THU T I-Quan hệ: 1.Quan hệ biểu diễn quan hệ: a)Định nghĩa: Cho tập A B , tích đề A B AxB= {(a,b)/ a A ,b B} phân biệt thứ tự Một tập R AxB gọi quan hệ A B -Nếu B A ta nói R quan hên A, R AxA VD: Cho hai tâp hợp: A={ a, b, c} ;B= { 1, 2} AxB= {(a,1), (a,2), (b,1), (b,2), (c,1), (c,2)} R= {(a,1), (b,2), (c,2)} AxB -Khi (a, b) R ta nói aRb (hay a có quan hệ R với b) -Khi (a, b) R a quan hệ R với b b)Biểu diễn quan hệ:Quan hệ R AxB ta biểu diễn quan hệ cách sau: -Liệt kê: Liệt kê phần tử R -Xác định tính chất: VD: A={1, 2, 3, 4, 5, 6} R={(a,b) | a, bA: a-b= 2k, kZ} -Ph-ơng pháp đồ thị: R AxA A={a11, a21, ,an} ta t-ơng ứng phần tử R với đỉnh đồ thị -Ph-ơng pháp ma trận quan hệ: R= AxB, A={a11, a21, ,am} B={b11, b21, ,bn} + Ta dựng ma trận: MR=(mij)nxm mij= R bj , mij = Neu Rbi c)Một số tính chất quan hệ: Xét R AxA có tính chất sau: (1) Phản xa : a A : a R a (2) Đối xứng: (a, b) R, (b, a ) R aRb bRa aRb a=b bR a (3) Phản xứng: a,b A Ta có: aRb bRc (4) Bắc cầu: a,b A.Ta có: aRc 2.Quan hệ ng-ợc quan hệ hợp thành.(Ch-a bit) Tr n c Nam 3.Quan hệ t-ơng đ-ơng: -R AxA đ-ợc gọi quan hệ t-ơng đ-ơng A có tính chất: +Phản xạ: a A : aRa (a, b) R aRb bRa (b , a ) R aR b +Bắc cầu: => aRc bR c +Đối xứng: -Phân hoạch t-ơng đ-ơng tập hợp: Một hệ thống tập A1, A2 Ak A.Có tính chất: Ai I Aj = i j A1 U A2 U Ak đ-ợc gọi phân hoạch t-ơng đ-ơng tập A 4.Quan hệ bao đóng bắc cầu: -Giả sử R quan hệ A, R có tích chất bắc cầu không chứa R S quan hệ bắc cầu, R S -Quan hệ bắc cầu nhỏ A chứa R đ-ợc gọi bao đóng bắc cầu cảu quan hệ R.Ký hiệu [ R ] Nhân xét:+ Nếu thân R có tính chất bắc cầu bao đóng bắc cầu trùng R không phải thêm vài phần tử vào tập R để trở thành bắc cầu VD: A={a, b, c}, R={(a,b), (b,c)} [ R ] ={(a,b), (b,c), (a,c)} +Bao đóng bắc cầu đ-ợc gọi bao đóng truyền ứng 5.Thuật toán xây dựng bao đóng bắc cầu -Ta lần l-ợt tìm ma trận MR , tính: M R =M R = M R M R 2 M R3 = M R2 M R = M R3 M Rn = M Rn = M Rn1 M R => M [ R] = M R1 *)Cộng bít: ( ) 1 = 1 = 1 = 00 = *)Nhân bit:( ): M R2 M Rn 1 = 1 = 0 = -Đặt biệt: 00 = Tr n c Nam 1=0 =1 *)Xét A B : A=(aij); B=(bij) với kích th-ớc : A B = (aij bij ) : Lấy phần tử t-ơng ứng cộng lại A B = (aij bij ) C = A B C ij = a i1 b1 j a i b2 j a in bnj *)Thuật toán: Procedure Baodongbaccau(MR:Matran quan he R) Begin A := M R B := A For i:=2 to n Begin A := A M R B := B A End; End; VD1: Cho A={a, b, c} R={ (a,a), (a,c), (b.b), (c,a), (c,b)} Dùng thuật toán tìm bao đóng bắc cầu:R 1 1 1 1 M = M R= R ; M R = = M [ R] 1 1 1 1 VD2: Cho A={1, 2, 3, 4, 5, 6} R= {(a,b)/ a, b A: a-b=3k, kZ} 1)Chỉ R t-ơng đ-ơng? 2)Tìm phân hoạch t-ơng đ-ơng? Giải: 1)R t-ơng đ-ơng vì: +R có tính phản xạ:aA: a-a=3kú 0=3k =>k= 0,k Z +R có tính đối xứng:a, b A: a-b=3k=>b-a= -3k (kZ) +R có tính bắc cầu : a, b, c A: a b = 3k1 (k1 , k2 Z ) a c = 3(k1 + k ) =3k (kZ) b c = 3k2 -Theo định nghĩa quan hệ t-ơng đ-ơng điều chứng tỏ quan hệ R quan hệ t-ơng đ-ơng tập A 2)Tìm phân hoạch t-ơng đ-ơng: Tr n c Nam MR= 0 0 0 0 0 => Tập phân hoạch t-ơng đ-ơng là: 0 0 0 0 0 A1= {1, 4}, A2={3, 6}, A3= {2, 5} II-Phân tích thiết kế thuật toán 1.Khái niệm thuật toán: Thuật toán dãy hữu hạn b-ớc, b-ớc mô tả xác thao tac cần đ-ợc thực để giải toán.Và sau hữu hạn b-ớc đó, từ input toán ta đ-ợc output toán VD: Thuật toán tìm UCLN số nguyên d-ơng a b -Phân tích: Lặp r = a mod b a=b; b=r; Dừng r=0 ; (a,b)=a ; -Thuật toán: +B1: Input: a,bZ+ Output: UCLN(a,b) +B2: a= b ; b = r; +B3: Nếu r=0 UCLN(a,b)=a Nếu r quay B1 2.Thiết kế thuật toán: -Các toán phức tạp đa dạng việc giải ma trận khó khăn.Tuy nhiên toán lớn hay toán phức tạp ta phân chia toán lớn thành toán nhỏ hơn(modul ch-ơng trình nhỏ hơn) Ta lại chia toán nhỏ thành modul nhỏ ứng với phần việc mà ta biết cách giảI quyết, nh- việc tổ chức lời giải Của toán đ-ợc thực theo cấu trúc phân cấp nh- sau: A B E C F G D H I Chiến thuật giải toán theo tinh thần nh- chiến thuật Chia để trị ->Để thực đ-ợc chiến thuật ng-ời ta dùng cách thiết kế từ xuống sử dụng ph-ơng pháp từ d-ới lên(Up-down) Tr n c Nam a)Chiến l-ợc thiết kế thuật toán từ xuống: -Nếu trình b-ớc triển khai chi tiết hoá ch-ơng trình ngày vào chiều sâu ph-ơng pháp giải toán đ-ợc gọi từ xuống *)ý t-ởng: Giả sử ta giải toán lớn T ta chia toán T thành toán Nếu toán ch-a có thuật giải ta lại cỏ thể chia toán thành modul nhỏ ứng với phần việc mà ta biết cách giải quyểt -Thiết kế giải thuật top-down việc giải quyyết toán đ-ợc định h-ớng rõ ràng tránh đ-ợc việc xa đà vào chi tiết phụ quản lý đối t-ợng rõ ràng.Đây tảng lập trình có cấu trúc hay gọi h-ớng thủ tục.Bài toán đ-ợc chia thành nhiều modul t-ơng đối độc lập nhiều ng-ời tham gia giải ảnh h-ởng lẫn giải thuật phức tạp - Ph-ơng pháp hạn chế nh- quản lý độ phức tạp, quản lý phát triển hệ thống b)Chiến l-ợc thiết kế thuật toán từ d-ới lên: -Ph-ơng pháp đến lời gíải toán, ng-ời lập trình tr-ớc hết nghiên cứu ngôn ngữ lập trình sẵn có kết hợp thị thành thủ tục hàm đơn giản thành nhóm tiêu biểu cho toán cần giải Sau thủ tục, hàm đ-ợc sử dụng thủ tục hay hàm cấp cao hơn.Ph-ơng pháp đ-ợc gọi từ d-ới lên ( từ d-ới độ sâu lệnh máy nguyên thuỷ đến toán cao ) *)ý t-ởng: Để giải toán đó, ta cần chọn số ch-ơng trình biết, số modul( đoạn ch-ơng trình con) Mỗi modul thực số chức định.Việc chọn modul đ-ơc xác định suy nghĩ khác nhau: Sự dễ hiểu chức mà modul cần thực hiện, kích th-ớc đoạn ch-ơng trình, cấu trúc diệu, giống có với công việc khả chuyển cho ,modul biết nhiệm vụ Mỗi modul cần xác định mối liên hệ liệu vào liệu Việc lập trình kiểm thử đ-ợc tiến hành theo modul Sau modul đ-ợc hợp nhật vào đơn vi lớn sở mối liên hệ định tr-ớc Các đơn vị lại đ-ợc kiểm thử, sửa chữa thiếu sót, bất hợp lý xuất trình hợp cuối có lại đ-ợc hợp ch-ong trình chung để giải toán đặt -Một ứng dụng hay dùng kỹ thuật sửa chữa ch-ơng trình, đoạn ch-ơng trình, ch-ơng trình có lời giải toán biết để đ-ợc ch-ơng trình giải toán c)Tinh chỉnh b-ớc, làm mịn dần -Tinh chỉnh b-ớc ph-ơng pháp thiết kế thuật giải găn liền với lập trình Nó phản ánh tinh thần trình modul hoá toán thiết kế kiểu top-down.Thoạt đầu ch-ơng trình thể giải thuật đ-ợc trình bày Tr n c Nam ngôn ngữ tự nhiên phản ánh ý công việc cần làm.Càng b-ớc sau lời lẽ đặc tả công việc xử lý đ-ợc thay dần câu lệnh h-ớng tới lệnh ngôn ngữ lập trình, ta gọi b-ớc tinh chỉnh Nh- nghĩa trình thiết kế giải thuật phát triển ch-ơng trình đ-ợc thể từ dạng ngôn ngữ tự nhiên, qua giả ngôn ngữ đến ngôn ngữ lập trình từ mức làm đến mức làm , ngày sát với chức với câu lệnh ngôn ngữ lập trình chọn - Trong trình xây dựng thuật giải, ban đầu thuật giải đ-ợc viết d-ới dạng dễ nhận biết.Theo thuật giải này, b-ớc gặp khó khăn mã hoá, ch-ơng trình chạy nhiều thời gian có vi phạm đến tính hiệu thuật giải, ta tìm cách cải tiến, chi tiết hoá b-ớc đó.Ta chi tiết thêm cải tiến để thuật giải tốt hơn, số thao tác mà máy thực tiết kiệm nhớ l-u trữ liệu Ta bám theo trình máy tính thực ch-ơng chình để thấy đ-ợc chỗ bất hợp lý không cần thiết mà điều chỉnh thuật giải cho tốt 3.Phân tích thuật toán: a)Độ phức tạp thuật toán: -Khi nói đến độ phức tạp thuật toán ng-ời ta th-ờng đề cập đến độ phức tạp thời gian độ phức tạp dung l-ợng nhớ -Khi thiết kế thuật toán th-ờng ta dung hoà tiêu chí theo nghĩa thuật toán vừa chạy nhanh vừa tốn nhớ Tuy nhiên ng-ời ta th-ờng đề cập tới độ phức tạp thời gian - Thời gian thực thuật toán phụ thuộc vào nhiều yếu tố: Trình độ ng-ời lập trình, đặc điểm liệu vào, phần cứng, ngôn ngữ lập trình *)Định nghĩa: Một hàm f(n) đ-ợc xác định O(g(n)) f(n)=O(g(n)) đ-ợc gọi có cấp g(n) tồn số c n0 cho: f(n) cg(n) n n0 Nghĩa f(n) bị chặn số nhân với g(n), giá trị n từ điểm đó.Ki hiệu:T(n) VD: Cho hàm : T(n)= n2+3n+2.Suy ra: T(n)= n2+3n+2 n2+3n2+2n2 T(n) 6n2 n T(n)=O(n2) Độ phức tạp bình ph-ơng(f(n)=n2, c=6, n0=1) b) Các quy tắc đánh giá độ phức tạp thuật toán: -Để đánh giá độ phức tạp thuật toán ng-ời ta sử dụng quy tắc: Quy tắc cộng quy tắc nhân *)Quy tắc cộng: Giả sử có đoạn ch-ơng trình P1 P2 thực tuần tự, có độ phức tạp t-ớng ứng lần luợt là: T1(n)= O(f(n)) T2(n)= O(g(n) Khi độ phức tạp đoạn ch-ơng trình bao gồm P1 P2 là: T(n)= O(max(f(n), g(n))) Tr n c Nam VD: Nếu g(n) f(n) n n0 O(f(n)+ g(n))= O(f(n) Chẳng hạn: O(n4 +n2)= O(n4) O(n +nlog2n)= O(n) *)Quy tắc nhân: Giả sử có đoạn ch-ơng trình P1, P2 thực hiẹn lồng nhau, có độ phức tạp lần l-ợt là:T1(n)= O(f(n)) T2(n)= O(g(n)) Khi độ phức tạp đoạn ch-ơng trình gồm P1, P2 là: T(n)= O(f(n).g(n)) +VD: for i:= to n for j:=1 to n x:= x+1 Thời gian thực thuật toán là: O(n.n)= O(n2) -Ng-ời ta đánh giá độ phức tạp thuật toán tr-ờng hợp: Tốt nhât (Tmin(n)), xấu (Tmax(n)), trung bình (TTB(n)).Khi phân tích thời gian thực giải thuật ta phải xét tới: liệu vào có kicks th-ớc n T(n) tr-ờng hợp thuận lợi tốt nh- nào? Rồi T(n) tr-ờng hợp xấu nhất? Và T(n) trung bình?Nh-ng ng-ời ta th-ờng đánh giá giải thuật qua giá trị xấu T(n), mà tr-ờng hợp T(n) trung bình khó xác định c) M t s cỏc bi toỏn cú ph c t p a th c, hm m , v n h b c ph c t p c a bi toỏn: -Thông th-òng ta chia toán thành lớp: +1-Lớp toán giải đ-ợc có đọ phức tạp đa thức +2-Lớp toán np đầy đủ +3-Lớp toán giải đ-ợc thuật toán có độ phức tạp hàm mũ -Lớp toán (2) (3) : Các toán bất khả thi, chúng khó thực máy tính điện tử thời gian thực lớn.Khi ta cần chia chúng thành lớp riêng biệt đ-a lớp lớp toán có độ phức tạp đa thức -Lớp bài toán có độ phức tạp đa thức, ta cố gắng giảm số mũ k xuống: +Cấu trúc liệu phù hợp +Sử dụng ngôn ngữ lập trình gần ngôn ngữ máy *)Độ phức tạp thuật toán th-ờng tiệm cận đến hàm sau đây: Dạng đánh giá Tên gọi O(1) Hàm O(lglgn) Log log O(logn) Logarithm O(n) Tuyến tính O(nlogn) Tuyến tính logarithm O(n ) Bình ph-ơng Tr n c Nam O(n3) Lập ph-ơng k Đa thức O(n ) k2 n O(2 ) Hàm mũ O(n!) Giai thừa Bảng -Cách đánh giá độ phức tạp thông dụng Theo bảng độ phức tạp thuật toán đ-ợc liệt kê theo thứ tự tăng dần từ xuống III-Đệ quy thuật toán đệ quy: 1.Khái niệm đệ quy, thuật toán đệ quy: a)Khái niệm đệ quy: Ta nói đối t-ợng đệ quy bao gồm nh- phận đ-ợc định nghĩa d-ới dạng *)VD: +Số tự nhiên : a) số tự nhiên b) x số tự nhiên x-1 số tự nhiên + Hàm n giai thừa: n! a)0!=1 b)Nếu n> n!= n(n-1)! b)Thuật toán đệ quy: Nếu lời giải cảu toán T đ-ợc thực toán , có dạng nh- T lời giải đệ quy.Giải thuật chứa lời giả đệ quy gọi giải thuật đệ quy -Một thủ tục gọi thủ tục đệ quy thủ tục có lời gọi cách trực tiếp hay gián tiếp VD1: Dùng thủ tục hàm đệ quy f(n)=n! Fuction GT(n:byte): Longint; Begin If n=0 then GT:=1 Else GT:= n*GT(n-1); End; VD2: Hãy tính số hạng thứ n dãy Fibonaci {1, 1, 2, 3, 5, 8, 13, 21, } Function F(n: byte): Longint; Begin If n= then F:= Else if n= then F:=2 Else F:= F(n-1)+F(n-2); End; 1+ -Độ phức tạp :T(n)= O( n ) với = VD3: Bài toán tháp Hà Nội: A B N= 1: A B (n 1) : A C N> 1: 1: A B (n 1) : C B Tr n c Nam 10 C -Độ dài đ-ờng ( path length) số nút đ-ờng trừ Ví dụ với (T): Độ dài từ A tới M 3, độ dài từ D đến K e)Nếu thứ tự nút đ-ợc coi trọng xét có thứ tự (ordered tree), ng-ợc lại thứ tự (unordered tree) f)Đối với nút khái niệm cha- ng-ời ta mở rộng sang khái niệm khác theo quan hệ nh- gia tộc Ví dụ (T) A, D, H đựoc gọi tiền bối L; E, G, K đ-ợc gọi hậu sinh A ; Các nút G, H, I, J nút anh em 2.Cây nhị phân, tổng quát: 2.1.Cây nhị phân: a)Định nghĩa: Cây nhị phân dạng quan trọng cấu trúc cây.Nó có đặc điểm: nút có tối đa Đối với nút phân biệt trái phải Nh- nhị phân có thứ tự b)Tính chất: *)Bổ đề: - Số l-ợng tối đa nút mức i nhị phân 2i-1 (i 1) -Số l-ợng tối đa nút nhị phân có chiều cao h : 2h - (h1) *)Đặc điểm: -Số l-ợng nút mức thứ i 2i - Số l-ợng nút lá: 2h, h độ cao -Độ cao h [log2(số nút cây)] -Số nút 2(h +1) -1 c) Cài đặt: - Sử dụng trỏ cài đặt nỗi nút biến động Khai báo: Type Tree= ^Node; Node= record Info: integer; Left, right: Tree; End; d)Biểu diễn nhị phân máy: *)L-u trữ kế tiếp: -Xét nhị phân đầy đủ, ta dễ dàng đánh số cho nút theo thứ tự lần l-ợt từ mức trở lên, hết mức đến mức khác từ trái sang phải nút mức Tr n c Nam 42 -với cách đánh số cha có số thứ tự i rõ ràng có số thứ tự 2i 2i + Hoặc ng-ợc lại: có thứ tự j cha có số thứ tự [j/2 ] ( [x] số nguyên d-ới x ví dụ [2,25]= 2) - Nh- ta l-u trữ nhị phân véc tơ l-u trữ V, theo nguyên tắc nút thứ i đ-ợc l-u trữ V[i] Và với cách l-u trữ biết phần tử chứa nút cha suy phần tử chứa nút ng-ợc lại Ta minh hoạ cách nh- sau : A B V[1] V[2] C D E F G H I J V[3] V[4] V[5] V[6] V[7] V[8] V[9] V[10] Đối với cách l-u trữ thích hợp với nhị phân đầy đủ hoàn chỉnh Còn nhị phân dạng theo quy tắc dánh số nêu (để đảm bảo luật tính số (địa chỉ) nh- nêu) xuất nhiều phần tử l-u trữ V phải trống, gây lãng phí nhớ Ví dụ: A V[1] V[2 B V[3] V[4] V[5] A B V[6] V[7] C C {Kí hiệu nghĩa trống} *) u tr múc n i: õy l d ng l u tr thớch h p cho m i d ng cõy nh phõn, m i nỳt trờn cõy c l u tr b i m t ph n t cú quy cỏch nh sau: LPTR INFO RPTR -Trong ú tr ng INFO ch -Tr ng LPTR ch a a ch -Tr ng RPTR ch a a ch Vớ d : Cõy nh phõn T cú d a cỏc thụng tin (d li u) c a nỳt c a nỳt g c cõy trỏi (tr t i cõy trỏi) c a nỳt g c cõy ph i ( tr t i cõy ph i) ng l u tr múc n i T A B C D Tr n c Nam E 43 F truy c p vo cỏc nỳt trờn cõy c n cú m t tr T, tr t i nỳt g c c a cõy ú ( a ch nỳt g c) -Ng i ta quy c n u cõy r ng thỡ T= Null Rừ rng v i cỏch l u tr ny s ph n t l u tr , ng v i s nỳt cú trờn cõy (dự cõy cú d ng th no c ng y) Nh ng vi c truy c p vo cỏc nỳt thỡ ch cú th th c hi n c t nỳt cha, t c l bi t nỳt cha thỡ bi t a ch nỳt con, cũn ng c l i thỡ khụng th c e) Cỏc phộp t cõy: phộp t cõy, c nh ngh a quy *)Duy t theo th t tr c( Preorder) - N u cõy r ng thỡ khụng lm gỡ - N u cõy khụng r ng thỡ: + Th m g c +Duy t cõy trỏi theo th t tr c +Duy t cõy ph i theo th t tr c Procedure Preorder(T: Tree); Var P: Tree; Begin P:= T; If T Nil then Begin Write(P^.info); Preorder(P^.Left); Preorder(P^.Right); End; End; *)Duy t theo th t gi a ( Inorder) - N u cõy r ng thỡ khụng lm gỡ - N u cõy khụng r ng thỡ: +Duy t cõy trỏi theo th t gi a + Th m g c +Duy t cõy ph i theo th t gi a Procedure Inorder(T: Tree); Var P: Tree; Begin P:= T; If T Nil then Begin Inorder(P^.Left); Write(P^.info); Inorder(P^.Right); End; End; *)Duy t theo th t sau ( Posorder) - N u cõy r ng thỡ khụng lm gỡ - N u cõy khỏc r ng thỡ: Tr n c Nam 44 +Duy t cõy trỏi theo th t sau +Duy t cõy ph i theo th t sau + Th m g c Procedure Posorder(T: Tree); Var P: Tree; Begin P:= T; If T Nil then Begin Posorder(P^.Left); Posorder(P^.Right); Write(P^.info); End; End; f)Cỏc phộp x lý cõy tỡm ki m nh phõn: *) nh ngh a cõy tỡm ki m nh phõn: -Cõy tỡm ki m nh phõn l cõy nh phõn ú tho cỏc tớnh ch t sau: +Giỏ tr khoỏ c a m i nỳt thu c cõy trỏi nh h n giỏ tr c a nỳt g c +Giỏ tr khoỏ c a nỳt g c nh h n giỏ tr khoỏ c a m i nỳt thu c cõy ph i Cõy trỏi v cõy ph i c ng ph i l cõy nh phõn tỡm ki m *)Chốn nỳt vo cõy nh phõn tỡm ki m: -Thờm nỳt X , tr ng thụng tin l X vo cõy T, sau thờm vo cõy v n ph i l cõy nh phõn Procedure Insert(x: integer; T: Tree); Var P: Tree; Begin If T= Nil then Begin New(P); P^.info:= x; P^.Left:= Nil; P^.Right:= Nil; T:= P End Else If x< T^.info then Insert(x, T^.Left) Else Insert(x, T^.Right) End; ph c t p : +TMin(n)= O(1) X y x l nỳt g c +TMax(n)= TTB(n)= O(log2n) *)Tỡm m t nh x cõy nh phõn tỡm ki m: tỡm giỏ tr khoỏ x cõy , ta so sỏnh x v i nỳt g c v tỡnh hu ng x y ra: (1) Cõy r ng (T= Nil) , x khụng cú trờn cõy, ph p tỡm ki m khụng tho (2) X nh h n h n nỳt g c: Tỡm ki m c th c hi n cõy trỏi c a g c Tr n c Nam 45 (3) X l n h n nỳt g c: Tỡm ki m c th c hi n t ag c (4) X b ng nỳt g c : Phộp tỡm ki m tho ng t v i cõy ph i Procedure TimKiem( x: integer; T: Tree); Var P: Tree; Begin P:= T; If T< > Nil then Begin If x< T^.info then TimKiem(x, T^.Left) Else if x>T^.info then TimKiem(x, T^.Right) Else write( Tim thay x ); End; Else Write( Khong tim thay ); End; *)Lo i b m t ph n t x cõy: -Thu t toỏn: +Tỡm n nỳt mu n xoỏ, nỳt sau xoỏ xong ta ph i tỡm c nỳt thay th thớch h p s a l i tr , tr c õy ó tr t i nỳt b xoỏ v cỏc tr nỳt thay th +Ta th y cú cỏc kh n ng sau: u nỳt b lo i l nỳt lỏ thỡ khụng ph i tỡm nỳt thay th n a M i n i tr c õy tr t i nú, s c thay th b i nil u nỳt b lo i ch cú m t cõy thỡ nỳt thay th nú chớnh l g c c a cõy ny M i n i c tr c õy tr t i nú, bõy gi s tr t i nỳt thay th ny u nỳt b lo i cú c hai thỡ nỳt thay th cú th ho c l nỳt ng i s nh h n sỏt nú( nỳt c c ph i c a cõy trỏi nú), ho c l nỳt ng v i s l n h n sỏt nú( nỳt c c trỏi c a cõy ph i nú) Procedure Delete(Var T: Tree); Var P,Q: Tree; X: integer; Begin If T^.Left= Nil then {T chi co cay phai} Begin P:= T; T:= T^.Right; End Else if T^.Right= Nil then {T chi co trai} Begin P:= T; T:= T^.Left; End Tr n c Nam 46 Else { T co ca trai, phai} Begin P:= T^.Left; If P^.Right= Nil then Begin T^.info:= P^.info; T^.Left:= P^.Left; End else Begin Repeat Q:= P; P:= P^.Right; Until P^.Rignt= Nil; T^.info:= P^.info; Q^.Right:= P^.Left; End; End; Dispose(P); End; ph c t p: T(n)= O(log2n) 3) ng d ng c a cõy VIIth nh ngh a v cỏc khỏi ni m bi u di n th -M t th G(V, E) l m t t p bao g m t p con: + T p h u h n V , khụng r ng c a cỏc ph n t ta g i l nh( vertices) +T p h u h n E, c a cỏc c p nh, m m i c p ta g i l cung(edge) VD: M ng mỏy tớnh c a cụng ty , s m nh n c a m t chung c , u trỳc phõn t c a cỏc h p ch t h u c v v t t c u cú d ng th -N u u v v l hai nh trờn th m th t oc phõn bi t t ng p , ngh a l (u,v) khỏc v i (v, u) thỡ ũ th c g i l th cú ng(directed graph) Khi ú (u, v) oc g i l cung t u t i v cũn (v,u) c g i l cung t v t i u -N u th t hai nh c a cung khụng c coi tr ng thỡ th cg i l th vụ h ng( undirected graph) v (u, v) c g i l cung gi a u v v ho c cung gi a gi a v v u - N u trờn th G(V, E) cú m t cung i t u t i v thỡ ta núi: v l nh lõn n c a u hay nh k (adjacent) c a u -M t ng i (part) t nh u t i v l m t dóy cỏc nh: x0, x1, x2, , xnng), ú :u= x0, v= xn ( v xi, xi+1) v i i= , 1, xn (n l s nguyờn d 1, 2, n-1 l cỏc cung thu c E U g i l nh u, V g i l nh cu i S ng cỏc cung trờn ng i c g i l di c a ng i( Parth length) -M t ng i n (simple parth) l ng i m m i nh trờn ú, tr nh u v nh cu i, u khỏc Tr ng h p nh u trựng v i nh cu i ta g i l chu trỡnh( cycle) Tr n c Nam 47 Vớ d : Cho th G ta cú: ng i 1, 2, 3, l ng i cú di b ng ng i 1, 4, 2, 3, l m t chu trỡnh cú di b ng -M t th g i l liờn thụng ( connected) n u luụn cú ng i gi a nh 2.Chu trỡnh Euler, thu t toỏn tỡm chu trỡnh Euler 2.1.Chu trỡnh Euler: -Xột m t th vụ h ng G= (V, E), ng i t nh u t i nh v c i l ng i n n u m i c p c nh c a ng i i qua c nh th G khụng quỏ l n - Xột m t th G= (V, E) liờn thụng: +) M t ng i t u v c g i l ng i Euler n u nh ng i ny l ng i n v i theo m i c nh c a th G +) M t ng i Euler m m u v m cu i trựng thỡ ta g i l chu trỡnh Euler +) M t th m cú chu trỡnh Euler c g i l th Euler *) nh lý Euler1: N u G l a th y nú l th Euler v ch nú liờn thụng v v i m i nh u cú b c ch n *) nh lý Euler 2: M t th G liờn thụng cú ng i Euler t nh u v v ch c u v v u cú b c l , cỏc nh khỏc u cú b c ch n 2.2.Thu t toỏn v ch chu trỡnh Euler: - Xu t phỏt t nh u v ch cỏc chu trỡnh T, T1, T2, v ỏnh d u cỏc c nh a T, T1, T2, b i cỏc s 0, 1, t ng ng, v ch chu trỡnh Euler theo nguyờn t c m i i kh i m t nh no ú thỡ i theo cỏc c nh ỏnh s cao nh t t t c cỏc c nh ch a dựng cho n quay l i nh xu t phỏt m khụng th i ti p c n a Ta th y m i nh u cú b c ch n nh v y ph i cú chu trỡnh Euler B B BGCBAEGFEDGHCDB o o Tr n c Nam 48 2.3.Thu t toỏn Fleury tỡm ng i Euler: - Xu t phỏt t nh bc c a G tuõn theo quy t c sau: (1) M i i qua c nh no ú thỡ xoỏ nú i sau ú xoỏ nh cụ l p n u cú (2) Khụng bao gi i qua c u tr khụng cũn cỏch i no khỏc ũng i v chu trỡnh Haminton 3.1 nh ngh a: - Cho m t th G= (V, E), ng i Haminton l ng i b t u t nh u i qua m i nh c a G m i nh ỳng l n r i v v - Chu trỡnh Haminton : Tr ng h p v u ng i Haminton g i l chu trỡnh Haminton th Haminton l th cú chu trỡnh Haminton ngh a l t n t i chu trỡnh i qua m i nh c a G, m i nh ỳng l n 3.2.M t s nh lý v chu trỡnh Haminton: *) nh lý 1< nh lý Dirac- 1952>: -N u G l m t th cú n nh v v i m i nh c a G u cú b c khụng nh n/2 thỡ l th Haminton -H qu : N u G l th cú n nh v m i nh cú b c khụng nh h n (n-1)/2 thỡ G ch a ng i Haminton *) nh lý 2< nh lý Ore-1960>: -N u G l th cú n nh v b t k nh no khụng k c ng cú ng s b c khụng nh h n n thỡ G l th Haminton *) nh lý 3: - N u G l th phe v i t p nh v1 v v2 cú s nh b ng v c c a m i nh l n h n n/2 thỡ õy l th Haminton 3.3.Quy t c tỡm chu trỡnh Haminton - N u th G t n t i nh cú b c deg(v) thỡ khụng cú chu trỡnh Haminton - N u nh v no y cú b c deg(v) = thỡ c nh liờn thu c nh ny thỡ cú c nh thu c chu trỡnh Haminton - Trong chu trỡnh Haminton khụng ch a b t k chu trỡnh th c s no - Trong quỏ trỡnh xỏc nh chu trỡnh Haminton sau ó l y c nh t i nh v vo chu trỡnh Haminton thỡ m i c nh khỏc i t i v khụng l y c n a ú cú th xoỏ i Duy t th , tỡm ki m theo chi u sõu, tỡm ki m theo chi u r ng -Khi bi t g c c a cõy ta cú th th c hi n phộp t cõy ú th m cỏc nỳt c a cõy theo th t no y V i th thỡ v n t c ng nh v y, xột th khụng nh h ng G(V, E) v nh v V(G), ta c n th m t c cỏc nh thu c G m cú th v i t i ct nh v( ngh a l th m i nỳt liờn thụng v i v) Ta cú hai cỏch gi i quy t sau c n c chỳ ý: Tr n c Nam 49 4.1.Tỡm ki m theo chi u sõu( Depth first search) Tỡm ki m theo chi u sõu i v i th khụng nh h ng c th c hi n nh sau: - nh xu t phỏt v c th m Ti p theo ú nh w ch a c th m, m l lõn c n c a v , s c ch n v m t phộp tỡm ki m theo chi u sõu xu t phỏt wl i c th c hi n - Khi nh u ó c v i t i m m i nh lõn c n c a nú u ó c th m i, thỡ ta s quay ng c lờn nh cu i cựng v a c th m ( m cũn cú nh w lõn c n v i nú ch a c th m), v m t phộp tỡm ki m theo chi u sõu xu t phỏt t w l i c th c hi n Phộp tỡm ki m s k t thỳc khụng cũn nỳt no ch a c th m m v n cú th v i t i c t nỳt ó c th m Vớ d : Cho th G nh hỡnh v v nh xu t phỏt l V1 thỡ dóy cỏc nh c th m t nh sau: Tho t u V1, r i t i V2 (t t nhiờn cú th l V3) r i V4, V8, V5, ; V5 ch a cú lõn c n no ch a c th m nờn ph i quay l i V8 th m ti p V6 r i V3, V7 Gi i Thu t: Procedure DFS(v); {cho th khụng nh h ng G(V, E) v i n nh v vecto VISITED(n) g m n ph n t tho t u cú giỏ tr b ng Gi i thu t ny c th c hi n vi c th m m i nh v i t i ct nh v i v i th t c ny G v VISITED khụng ph i l cb } 1)VISITED(v):= 1; { õy VISITED dựng dỏnh d u cỏc c p nh ó c th m} 2) for i nh w lõn c n c a v If VISITED(w)= then call DFS(W); 3) return *) ph c t p: - Tr ng h p G c bi u di n b i m t danh sỏch lõn c n thỡ nh w lõn c n a v s nh xỏc nh b ng cỏch d a vo danh sỏch múc n i ng v i v T(n)= O(e) -N u G c bi u di n b i ma tr n lõn c n thỡ th i gian xỏc nh m i nh lõn c n c a v l O(n) Vỡ t i a cú n nh c th m, nờn t i gian tỡm ki m t ng quỏt l: T(n)= O(n ) 4.1.Tỡm ki m theo chi u r ng ( Breadth first search) - nh xu t phỏt v c ng oc th m u tiờn, nh ng cú khỏc v i DFS ch l: Sau ú cỏc nh ch a c th m m l lõn c n c a v s c th m k ti p nhau, r i m i n cỏc nh ch a c th m l lõn c n l n l t c u cỏc nh Tr n c Nam 50 ny v c t ng t nh v y.Vớ d hỡnh v trờn thỡ V1 c th m r i V2, V3, ti p theo l V4, V5, V6 , V7, V8 Gi i thu t: Procedure BFS(v); {Phộp tỡm ki m theo chi u r ng i v i G c th c hi n b t u b ng nh v M i nh I c th m s c ỏnh d u v i VISITED(i):= 1, tho t u VISITED(i) cú giỏ tr u b ng i v i th t c ny G v VISITED khụng ph i l c c b gi i thu t ny ng i ta dựng Queue k ti p cú kớch th c n, v i F v R tr t i l i tr c v l i sau.Th t c INSERT, DELETE s c d ng ho c lo i b ph n t 1)VISITED(v):= 2)Kh i t o queue v i v ó c n p vo; 3) while Q r ng Begin call DELETE(v, Q); {l y nh v kh i Q} for i nh w lõn c n v i v if VISITED(w)= then begin call INSERT(w, Q); VISITED(w):= End; End; 4)return; *) ph c t p: - N u G bi u di n b ng ma tr n lõn c n thỡ cõu l nh for s chi phớ O(n) th i gian i v i m i nh, ú th i gian chi phớ ton b l T(n)= O(n2) -N u G bi u di n b ng danh sỏch lõn c n thỡ chi phớ t ng quỏt l T(n)=O(e) *)S gi ng v khỏc gi a tỡm ki m theo chi u sõu, chi u r ng: Tớnh hi u qu Tr n c Nam Chi u sõu Chi u r ng Hi u qu l i gi i n m sõu cõy tỡm ki m v cú m t ph ng ỏn ch n h ng i chớnh xỏc Hi u qu c a chi n c ph thu c vo ph ng ỏn ch n h ng i Ph ng ỏn cng kộm hi u qu thỡ hi u qu c a chi n l c cng gi m Thu n l i mu n tỡm ch t l i gi i Hi u qu l i gi i n m n g c c a cõy tỡm ki m Hi u qu c a chi n l c ph thu c vo sõu c a i gi i L i gi i cng xa c thỡ hi u qu c a chi n c cng gi m Thu n l i mu n tỡm nhi u l i gi i 51 Ch l u l i cỏc tr ng thỏi ch a ng b nh d ng l u xột n tr cỏc tr ng thỏi Ph i l u ton b cỏc tr ng thỏi Tr Vột c n ton b Vột c n ton b Ph ng ỏn ch n h ng i t i chớnh xỏc L i gi i c xỏc nh m t cỏch tr c ti p Vột c n ton b ng h p u nh t Tr ng h p t nh t 5.Cõy khung v cõy khung v i giỏ tr c c ti u, thu t toỏn Kruskal: 5.1.Cõy khung c a th : - Cho G =(E,V) cú n nh M t th c a G c g i l cõy c a G u nú l m t cõy - Cõy c a G ch a t t c cỏc nh c a G c g i l cõy khung c a G Ta kớ hi u T, cõy khung c g i l cõy bao trựm *) nh lý 1: i v i th y kn cú nn-2 cõy khung cú n-1 b c (n nh) *) nh lý 2: th G cú cõy bao trựm n u v ch n u nú liờn thụng *) nh lý 3: Cho th G l n l t xỏc nh cỏc chu trỡnh G ta tỡm cỏch phỏ cỏc chu trỡnh b ng cỏch hu cỏc c nh c a G t i khụng cũn chu trỡnh n a thỡ d ng 5.2.Cõy bao trựm ng n nh t: - Cho th G gi s m i c nh c a G c gỏn s g i l tr ng s c a c nh y Khi ú th G g i l th cú tr ng s c a c nh e ( di) Ta g i tr ng s c a cõy khung l t ng t t c cỏc tr ng s c a cỏc c nh t o nờn cõy khung y Cõy khung cú tr ng s nh nh t g i l cõy khung nh nh t( cõy khung cú giỏ tr c c ti u) Bi toỏn tỡm cõy khung nh nh t: Cho m t G liờn thụng hóy tỡm cõy khung cú tr ng s nh nh t 5.3.Thu t toỏn Kruskal(1956): - í t ng: Xõy d ng th c a th G b ng cỏch l n l t ch n cỏc nh c a th G cho vo th cho t cỏc c nh c ch n cú di ng n nh t v khụng t o thnh chu trỡnh Khi ch n c n-1 c nh thỡ ng ; - Thu t toỏn: +B c 1: Ch n c nh nh nh t e1 E cho vo th T Tr n c Nam 52 +B c 2: Gi s ta ch n c cỏc c nh e1, e2, e3, ek thỡ ch n ti p c nh ek+1 cú di ng n nh t s cỏc c nh ch a c ch n v khụng t o thnh chu trỡnh v i nh ng c nh ó ch n c r i +B c 3: Ki m tra xem s c nh ó b ng n-1 ch a N u b ng thỡ quỏ trỡnh ng khụng thỡ quay l i b c th T nh n c chớnh l cõy khung nh nh t Vớ d : c cõy: ( c nh) 6.Bao úng truy n ng, s p x p topo v ng d ng: - Ta xột bi toỏn c th : Cú n cụng vi c : gi s phõn bi t ta ỏnh s t n n Gi a cỏc cụng vi c ny cú quan h lm tr c v kớ hi u b i d u < N u i< j thỡ u ú cú ngh a l: cụng vi c i ph i c th c hi n tr c cụng vi c j Ch ng h n cụng vi c lm s t úng c t pha ph i c th c hi n tr c cụng vi c bờ tụng.Ngh a l cỏc cụng vi c s c th c hi n tu n t v vi c c n lm tr c ph i c th c hi n tr c, vi c lm sau s c th c hi n sau, khụng bao gi x y tỡnh tr ng vụ lớ nh ki u: th i bờ tụng ch a cho lm s t v úng c t pha - Cỏc cụng vi c v i quan h lm tr c , kớ hi u b ng d u < Luụn tho cỏc tớnh ch t sau: + N u x < y, y < z thỡ x < z (tớnh b c c u) + N u x < y thỡ khụng t n t i y < x (tớnh khụng i x ng) + khụng bao gi t n t i x < x ( tớnh khụng ph n x ) => Ta g i quan h tho tớnh ch t trờn l m t th t b ph n (partial order) M t t p h p S m m gi a cỏc ph n t cú m t quan h no ú tho tớnh ch t nờu trờn thỡ S c g i l: p cú th t b ph n - Bi toỏn s p x p tụ pụ l bi toỏn t v i t p S cú th t b ph n Nú chớnh l bi toỏn : s p x p cỏc ph n t c a S theo m t th t n tớnh cho th t b ph n v n c m b o Ta bi u di n t p S , cú th t b ph n b ng m t th nh h ng theo quy c: + M i ph n t c a S l nh + Ph n t i tr c ph n t j s ng v i cung cú h ng (i, j) trờn th Xõy d ng gi i thu t s p x p tụ pụ ũi h i ta ph i bi t: Tr n c Nam 53 - S cỏc cung i t i nh N u s ny b ng thỡ nh ú cú th a s p p c - Cỏc cung i t nh i, ngh a l bi t cỏc nh lõn c n c a i nh i no ú ó c a s p x p thỡ s l ng cung i vo nh lõn c n j a nú s c gi m i ( ng v i vi c lo i cung xu t phỏt t nh i) Gi i thu t: Procedure TOPO-ORDER(COUNT, VERTEX, LINK, n) 1).for i:=1 to n If count(i)= then n p i vo Q; 2).Repeat 3) a nh j l i tr c c a Q s p x p; 4).prt:= LINK(j); {Tỡm n nh lõn c n u tiờn c a j} 5) while prt null Begin 6).k:= VERTEX(prt); {k l nh lõn c n u tiờn c a j} 7).COUNT(k):= COUNT(k) 1; 8) if COUNT(k) = then n p k vo Q 9).prt:= LINK(prt) {tỡm n nh lõn c n c a j} End Until Q r ng; 10).return ng i ng n nh t, thu t toỏn DIJSTRA, thu t toỏn Floyd: 7.1 ng i ng n nh t gi a hai nh c a th : -Cho th G= (V, E), E g m cỏc c nh v cỏc cung V m i c nh hay cung (i,j) cú s d(i,j) d ng g i l kho ng cỏch t nh i t i nh j Bi toỏn t l tỡm ng i ng n nh t t nh g c b t k i* V t i nh ớch b t j* V Bi toỏn trờn cú ng d ng giao thụng: Tỡm ng i ng n nh t gi a m 1thnh ph m v a cú cỏc ng ph i theo theo chi u v a cú cỏc ng ph ch i theo m t chi u Vớ d : Cho th nh hỡnh v bờn: Cỏc s trờn c nh hay cung l di ng i n i nh ng i ng n nh t nh n nh i qua cỏc nh: 1-4-6-5-8 ng i ng n nh t t nh t i nh i qua cỏc nh: 8-6-3-2-1 Tr n c Nam 54 7.2.Gi i thu t DIJSTRA: - í t ng : Cho G= (V, E) nh h ng cú tr ng s khụng õm, bi toỏn xỏc nh ng i ng n nh t t nh v0 t i m i nh G i S l t p cỏc nh bao m c v0 v xỏc l p ng i ng n nh t v i m i nh w v ch a thu c S v ta g i DIST(w) l hm tr v di ng n nh t t nh v0 qua cỏc m thu c S v k t thỳc w - Thu t toỏn: Cho th G cỏc nh c ỏnh s t n G i S l t p c th hi n d i d ng vộc t bớt v i: + S[i] = n u i S +S[i] =1 n u i S th cú tr ng s c bi u di n b ng ma tr n lõn c n Cost v i ph n t Cost[i,j] l tr ng s c a c nh (i,j) , c nh (i,j)= khụng cú c nh (i, j) cost[i,j] = thỡ i = j -Th t c: Procedure DIJSTRA(V, cost, Dist, n); Begin 1).for := to n Begin S[i]:=0; Dist[i]:= cost[v, i]; End; 2).S[v]:= 1; Dist[v]:= 0; k:=2; { a v vo S} 3) While k < n {xỏc nh n-1 ng i t nh v} 4).Begin Ch n u cho Dist[u] = min(Dist[u])S[u]=0; 5).S[u]:= 1; k:= k+1; 6) For m i w v i s[w] = 7).Dist[w] = min( Dist[w], Dist[u]+ cost[u, w]); 8) End; 9).End; *) ph c t p: T(n)= O(n2) 7.3.Thu t toỏn Floyd Procedure Begin End; Tr n Floyd; for i:= to n for j:=1 to n A[i, j]:= C[i, j]; for k:= to n for i:= to n for j:=1 to n If A[i,j] > A[i, k]+ A[k, j] then A[i,j]:= A[i, k]+ A[k, j]; c Nam 55 Tr n c Nam 56 [...]... End; Với thuật toán Pushdown này việc tạo thành đống cho một cây nhị phân hoàn chỉnh có n nút sẽ đ-ợc thực hiện bởi: for i:=n div 2 downto 1 do Pushdown(a,i,n); *)Minh hoạ cho thuật toán trên Giả sử ta có dãy số sau: A={54,65,34,67,21,78} Sau đây là minh hoạ diễn biến quá trình dãy này trở thành đống: 54 54 65 67 34 21 78 65 67 21 5 6 3 6 2 7 4 5 4 7 1 8 1 2 3 4 5 6 a) Cấu trúc dữ liệu và cấu trúc l-u... Data Next Prev Data Next Last -Khai báo dữ liệu: Type End; Nil Data= integer; Pt=^Node; Node= Record; Info: Data; Prev, Next: Pt; -Khởi tạo danh sách liên kết đôi: Danh sách rỗng First= Nil và Last= Nil Procedure Begin End; InitList; First:= Nil; Last:= Nil; 2.2.Các phép toán xử lý 2.2.1.Thêm một phần tử vào danh sách liên kết đôi: a) Thêm P vào đầu danh sách: -Thuật toán: +B1: Cho liên kết Next của... Queue còn Last l-u chỉ số cuối của Queue Khởi tạo Queue rỗng: First:=1 và Last:= 0; + Để thêm 1 phần tử vào Queue, ta tăng Last lên 1 và đ-a giá trị đó vào phần tử thứ Last +Để loại 1 phần tử khỏi Queue, ta lấy giá trị ở vị trí First và tăng First lên 1 +Khi Last tăng hết khoảng chỉ số của mảng thì mảng đã đầy, không thể đẩy phần tử thêm vào nữa +Khi First > Last tức là Queue đang rỗng Nh- vậy chỉ 1 phần... bài mới lần l-ợt với lá bài thứ (i-1), thứ (i-2), để tìm ra chỗ thích hợp và chèn nó vào chỗ đó * ý t-ởng thuật toán: - Ta có K1 đ-ợc coi nh- bảng chỉ gồm một khoá đã sắp xếp - Xét thêm K1so sánh K1 và K2, xác định chỗ chèn K2 vào Sau đó ta có một bảng gồm 2 khoá K1, K2 đã sắp xếp Tr n c Nam 30 - Lại xét K3, so sánh với K1, K2 và t-ơng tự nh- trên đối với K4, K5, K6 ,Kn Cuối cùng sau khi xét xong thì... Try(3) Cây liệt kê lời giải theo thuật toán quay lui VD1 Liệt kê các dãy nhị phân độ dài n Giải : Biểu diễn dãy nhị phân d-ới dạng b1, b2, bn, trong đó bi {0, 1} Thủ tục đệ quy Try(i) xác định bi, trong đó các giá trị đề cử là 0 và 1.Các giá trị này mặc nhiên đ-ợc chấp nhận mà không phải thoả mãn điều kiện gì (vì thế bài toán không cần biến trạng thái) Thủ tục Init nhập giá trị n và khởi gán biến đếm... 1 nút vào trong danh sách L vào sau một nút đ-ợc trỏ bởi p L A B Nil C X Prcedure IsertAfter(x:Data;Var L:list; p:pointer) Var Q: pointer; Begin If L= Nil then Begin New(L); L^.info:= x; Tr n c Nam 18 L^.Next:= Nil; End Else Begin New(Q); Q^.Info:= x; Q^.Next:= p^.Next; p^.Next:= Q; End; End; Thêm vào giữa hoặc cuối danh sách:Gọi p là địa chỉ của phần tử có tr-ờng thông tin là x, x đ-ợc chèn vào danh... Nh- vậy ta cần thực hiện các b-ớc sau: + Cho vùng liên kết của p trỏ vào First + Cho First trỏ vào p Dùng hàm: Function InsertFirst(NewItem: Data): Pointer; Var p: pointer; Begin New(p); P^.info:= NewItem; P^.Next:= First;{Buoc 1} First:= p; {Buoc 2} InsertFirst:=p; End; Thủ tục:Chèn 1 nút mới info là x , và tr-ớc p.Chèn một nút mới vào sau nút đ-ợc trỏ bởi P, hoán đổi tr-ờng thông tin Procedure InsertBefore(X:Data;Var... *)Bài toán Sắp tăng dần dãy các số bằng thuật toán trộn hai đ-ờng trực tiếp *)ý t-ởng Mỗi phần tử trong dãy đã cho có thể coi là một dãy đã sắp xếp tăng dần Vậy đẽ sắp xếp dãy A[i], A[i+1], A[i+2], , A[j] ta quy vễ sắp xếp hai dãy con A[i], , A[k] và A[k+1], , A[j] với k = (i+j) div 2 => Sau đó hoà nhập hai dãy này đ-ợc một dãy sắp xếp Với ý t-ởng trên ta dùng giải thuật đệ quy để thực hiện việc chia dãy... 2 phép toán bổ xung một phần tử vào cuối danh sách (Rear) và loại bỏ một phần tử ở đầu danh sách (Front) -Có thể hình dung hàng đợi nh- một đoàn ng-ời xếp hàng mua vé: Ng-ời nào xếp hàng tr-ớc thì mua vé tr-ớc Theo quy tắc vào tr-ớc ra tr-ớc Queue có tên gọi là danh sách kiểu FIFO( First in first Out) 3.2.2.Cài đặt: a)Mô tả Queue bằng mảng : - Ta dùng hai chỉ số First và Last, First l-u chỉ số đầu của... sau: +Cho vùng liên kết của P trỏ vào vùng liên kết của Q + Cho vùng liên kết của Q trỏ vào P First Nil X Fuction InsertItem(P:Pointer; X:Data):Pointer; Var P:Pointer; Begin New(p); P^.Info:= X; P^.Next:=Q^.Next;{Buoc 1} Q^.Next:=p; {Buoc 2} InsertItem:=P; End; 1.2.3.Loại bỏ một phần tử khỏi danh sách: Loại bỏ phần tử p ở đầu danh sách: chỉ cần cho con trỏ First vào vùng liên kết của p Procedure DelFirst; ... xây dựng thuật giải, ban đầu thuật giải đ-ợc viết d-ới dạng dễ nhận biết.Theo thuật giải này, b-ớc gặp khó khăn mã hoá, ch-ơng trình chạy nhiều thời gian có vi phạm đến tính hiệu thuật giải, ta... biết cách giải quyểt -Thiết kế giải thuật top-down việc giải quyyết toán đ-ợc định h-ớng rõ ràng tránh đ-ợc việc xa đà vào chi tiết phụ quản lý đối t-ợng rõ ràng.Đây tảng lập trình có cấu trúc hay... việc mà ta biết cách giảI quyết, nh- việc tổ chức lời giải Của toán đ-ợc thực theo cấu trúc phân cấp nh- sau: A B E C F G D H I Chiến thuật giải toán theo tinh thần nh- chiến thuật Chia để trị ->Để

Ngày đăng: 03/01/2016, 20:58

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan