1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề

77 13 0

Đ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

Tiếp nối phần 1, Giáo trình Phân tích thiết kế thuật toán (Nghề Lập trình máy tính): Phần 2 cung cấp cho người học những kiến thức như: phương pháp chia để trị, phương pháp tham lam, phương pháp quay lui và quy hoạch động. Mời các bạn tham khảo!

Phân tích thiết kế thuật tốn BÀI : PHƯƠNG PHÁP CHIA ĐỂ TRỊ Mã : ITPRG3_12.4 Giới thiệu  Mặc dù không tồn phương pháp vạn giúp thiết kế thuật toán giải vấn đề, nhà nghiên cứu tìm số phương pháp thiết kế bản, phưong pháp gọi chiến lược thiết kế thuật toán Mỗi phương pháp áp dụng để giải phạm vi rộng toán Trong tài liệu chúng tơi trình bày phương pháp thiết kế thuật toán : chia để trị (divide and conquer), phương pháp tham lam (greeding method), quay lui (backtracking), quy hoạch động (dynamic programming), nhánh cận (branch and bound) Trong chiến lược, chúng tơi trình bày phương pháp chung, sau đưa số ví dụ minh họa Cần lưu ý rằng, phương pháp thiết kế thuật toán mà xem xét chiến lược có tính định hướng tìm tịi thuật toán Trong xét phương pháp thường sử dụng phương pháp chia để trị Mục tiêu thực Học xong học viên có khả năng:  Nắm bắt ý tưởng phương pháp chia để trị  Sử dụng phương pháp chia để trị để giải tốn tìm kiếm, chọn phân từ, xếp, nhân ma trận  Áp dụng phương pháp chia để trị để giải số toán thực tế  Thấy lợi phương pháp chia để trị việc xây dựng số thuật tốn .13 Phương pháp tổng qt Ý tưởng phương pháp phân toán cần giải thành toán Các toán lại tiếp tục phân thành toán nhỏ hơn, tiếp tục nhận tốn có thuật giải, dễ dàng đưa thuật giải Sau ta tìm cách kết hợp nghiệm toán để nhận nghiệm toán lớn hơn, để cuối nhận nghiệm tốn cần giải Thơng thường tốn 110 Phân tích thiết kế thuật tốn nhận trình phân chia dạng với tốn ban đầu, có cỡ chúng nhỏ Trong trường hợp thế, thuật toán tìm biểu diễn cách tự nhiên thủ tục đệ quy Sau lược đồ phương pháp chia để trị procedure DivideConquer(A,x); Tìm nghiệm x toán A begin if A đủ nhỏ then solve(A) else begin Phân A thành toán A1, A2, Am; for i:=1 to m DivideConquer (A1, x1); Kết hợp nghiệm x1(i=1, 2, ,m)của toán A1 để nhận nghiệm x toán A end; end; Trong thủ tục trên, Solve thuật giải tốn A trường hợp A có cỡ đủ nhỏ Thuật tốn tìm kiếm nhị phân mà biết thuật toán thiết kế dựa chiến lược chia để trị Cho mảng A1 n xếp theo thứ tự tăng dần, A1  2  An Với x cho trước, ta cần xác định xem x có chứa mảng A1 n hay khơng, tức có hay khơng số  i  n, cho Ai = x Phương pháp chia để trị gợi ý ta chia mảng A1 n thành mảng A1 k-1 , mảng gồm thành phần Ak mảng Ak+1 n, (k số nằm n) Với mảng gồm thành phần ta biết có chứa x hay khơng Nếu x = Ak  mảng A chứa x i = k Nếu x < Ak ta cần tìm mảng A1 k-1, cịn x > Ak ta cần tìm kiếm mảng Ak + n Để tìm kiếm x mảng A1 k - 1 Ak +1 n ta lại áp dụng cách phân chia làm với mảng A1 n Thuật toán xếp nhanh (QuickSort) thiết kế kỹ thuật chia để trị Sau đưa số ví dụ minh họa cho kỹ thuật chia để trị .14 Tìm max Cho mảng A1 n, cần tìm thành phần nhỏ lớn mảng Đây tốn đơn giản giải thuật tốn khác nhau, có thuật giải kỹ thuật chia để trị 111 Phân tích thiết kế thuật tốn Ý tưởng thuật tốn ta lấy max, thành phần đầu A1] mảng Sau so sánh max, với thành phần A[i] với 2in, cập nhật max, cách thích ứng Thuật tốn mơ tả thủ tục sau : Procedure maxmin(A[i n], max, min); Begin max:=a[i]; min:=A[1]; for i:=2 to n if max < A[i] then max := A[i] else if > A[i] then := A[i]; End; Thời gian thực thuật toán xác định số phép tốn so sánh Từ vịng lặp for, ta thấy số phép toán so sánh cần thực trường hợp xấu (trường hợp mảng A[1 n] theo thứ tự giảm dần) 2(n-1) Áp dụng kỹ thuật chia để trị, ta chia mảng A[1 n] thành hai mảng A[1 k] A[k+1 n] (k=n/2) Nếu tìm max mảng A[1 k] A[k+1 n], ta dễ dàng xác định max, tồn mảng A[1 n] Để tìm max, mảng A[1 k] A[k+1 n] ta lại tiếp tục chia đơi chúng Q trình dừng lại ta nhận mảng có hai phần tử Trong trường hợp đơn giản max, xác định dễ dàng Từ phương pháp trình bày trên, ta đưa thủ tục đệ qui MaxMin(i, j, fmax, fmin) Thủ tục cần tìm max mảng A[i n], ta cần gọi thủ tục với i=1, j=n Procedure MaxMin(i, j, fmax, fmin); {fmax, fmin ghi lại phần tử lớn nhất, nhỏ mảng A[i j]} Begin if i=j then begin fmax := A[i]; fmin := A[i]; end else if j=i+1 then if A[i] < A[j] then begin fmax := A[j]; fmin := A[i]; end else begin fmax := A[i]; 112 Phân tích thiết kế thuật toán fmin := A[j]; end else begin mid := i + j div 2; MaxMin(i, mid, gmax, gmin); MaxMin(mid+1, j hmax, hmin); if gmax < hmax then fmax := hmax else fmax := gmax; if gmin < hmin then fmin := gmin else fmin := hmin; end; End; Bây ta đánh giá thời gian thực thuật toán mảng n phần tử A[1 n] Gọi T(n) số phép toán so sánh cần thực Từ thủ tục trên, ta xác định quan hệ đệ quy sau :  n =  T(n) = n =  T(n/2) + (n/2) + n > Giả sử n = 2, với k số nguyên dương Bằng phương pháp thế, ta tính T(n) sau: T(n) = T(2k) = 2T(22k-1) + =22T(2k-2)+22+2 =23T(2k-3)+23+22+2 =2k-1T(2) + =2k-1+2k-2 =n/2+n-2 =3n/2-2 Như với n =2k , thuật toán MaxMin cần 3n/2 – phép so sánh, so với thuật tốn trước, tiết kiệm khoảng 25% phép so sánh Tuy nhiên MaxMin thuật tốn đệ quy, tiêu tốn nhiều nhớ thuật tốn trước 113 Phân tích thiết kế thuật toán 15 Trao đổi hai phần mảng Giả sử T [1 n] mảng Chúng ta muốn trao đổi phần đầu (k phần tử đầu tiên) mảng với phần phụ lại (n-k phần tử lại), không sử dụng mảng phụ Chẳng hạn, T mảng a b c d e f g h a b c k = Sau trao đổi ta cần nhận mảng d e f g h Sử dụng kỹ thuật chia để trị, ta phân toán thành hai toán sau: Giả sử k  nk, ta trao đổi k phần tử phần đầu với k phần tử cuối phần cịn laị Sau mảng T[1 n – k], ta cần trao đổi k phần tử đầu với phần lại Chẳng hạn với mảng T k = 3, trình diễn sau: a b c d e f g h f g h d e a b c d e h f g a b c d e g f h a b c d e f g h a b c Cịn k > n-k, ta trao đổi n- k phần tử với n-k phần tử phần sau Sau mảng T[n-k+1 n], ta trao đổi n-k phần tử phần đầu Như vậy, ta phân toán trao đổi hai phần mảng thành hai toán Bài toán thứ trao đổi hai mảng có độ dài Bài toán thứ hai dạng với toán cho, cỡ mảng nhỏ Bài tốn thứ giải dễ dàng cách trao đổi cặp phần tử tương ứng Thủ tục sau thực trao đổi hai mảng có độ dài m i j tương ứng 114 Phân tích thiết kế thuật toán procedure Interchange(i,j,m); begin for p:=0 to m-1 Swap (T[i + p], T[j + p]) end; Trong thủ tục trên, Swap (x,y) thủ tục trao đổi giá trị hai biến x y Bài toán tứ hai dạng với toán ban đầu với cỡ mảng nhỏ Do đó, ta dễ dàng đưa thuật toán đệ quy để trao đổi hai phần tử mảng Tuy nhiên, trình gọi đệ quy dừng lại ta đạt tới việc trao đổi hai phần có độ dài mảng Do đó, ta đưa thuật tốn khơng đệ quy sau procedure Transpose(k); {Trao đổi k p.tử đầu mảng A[1 n] với n-k p.tử lại} begin i:=1; j:=n; while k>=i if k0) kể từ thời điểm Cơng việc i cho ta lợi nhuận pi > hồn thành thời hạn Một nhà máy thực công việc này, thời điểm nhà máy thực công việc, công việc làm xong đơn vị thời gian Đương nhiên nhà máy phải chọn công việc cho thu nhiều lợi nhuận Trong toán trên, tập j cơng việc cho nhà máy hồn thành tất công việc thời hạn chúng nghiệm chấp nhận Giá trị nghiệm J tổng nhuận Nghiệm tối ưu nghiệm chấp nhận có lợi nhuận cao 118 Phân tích thiết kế thuật tốn Ví dụ : với n = thời hạn, lợi nhuận sau : i pi 100 10 15 27 di 2 Ta có nghiệm chấp nhận giá trị chúng sau Nghiệm Dãy sử lý {1} Giá trị 100 {2} 10 {3} 15 {4} 27 {1, 2} 2, 110 {1, 3} 1, 3, 115 {1, 4} 4, 127 {2, 3} 2, 25 {3, 4} 4, 42 Nghiệm tối ưu tập cơng việc {1, 4}, hồn thành hạn theo thứ tự trước đến 1, cho lợi nhuận 127 Áp dụng chiến lược tham lam, ta xây dựng J theo bước, xuất phát từ J =  Tại bước ta chọn công việc cho lợi nhuân lớn số cơng việc cịn lại Khơng tính tổng qt, ta giả sử công việc đă đánh số theo thứ tự lợi nhuận giảm dần p 1 p2 pn Do đó, ta đưa thuật tốn tham lam tìm nghiệm tốn xử lý công việc thời hạn sau procedure Jobs; begin J ; for i:= to n if cơng việc J{i} hồn thành thời hạn then J  J {i} 119 Phân tích thiết kế thuật toán BÀI TẬP Bài : Hãy viết chương trình cài đặt đồ thị vơ hướng cấu trúc ma trận kề viết hàm/ thủ tục sau :  Nhập tọa độ n đỉnh đồ thị  Giả sử đồ thị đầy đủ, nghĩa đỉnh có cạnh nối giả sử giá cạnh độ dài đoạn thẳng nối cạnh Hãy tìm :   Ðường ngắn từ đỉnh cho trước (Dijkstra)  Ðường ngắn cặp đỉnh (Floyd)  Cây bao trùm tối tiểu (Prim Kruskal) Thể đồ thị hình đồ họa, cạnh thuộc bao trùm tối thiểu vẽ màu khác với cạnh lại đồ thị Bài : Bài toán người du lịch Lập lịch cho người du lịch đến điểm du lịch định trước thời gian xác định trước Bài : Tối ưu tìm kiếm nhị phân 172 Phân tích thiết kế thuật tốn CÁC BÀI THỰC HÀNH Bài thực hành số CÀI ÐẶT DANH SÁCH BẰNG MẢNG Viết chương trình quản lý dòng văn Yêu cầu chi tiết: Viết phần khai báo để cài đặt dòng văn (nội dung văn ký tự, chiều dài tối đa dòng 80 ký tự) Viết thủ tục khởi tạo dòng rỗng Thiết kế hàm kiểm tra dòng rỗng Thiết kế hàm kiểm tra dòng đầy Viết thủ tục nhập dòng văn Viết thủ tục hiển thị dòng văn hình Viết thủ tục xen ký tự x vào vị trí thứ p dịng văn D Viết thủ tục xóa ký tự vị trí thứ p khỏi dòng văn D Thiết kế hàm copy dịng văn để có dịng văn Copy k ký tự từ dòng D sang dịng D1 vị trí p dịng D (Không sử dụng hàm chuẩn Pascal) 10 Viết hàm tìm vị trí phần tử dịng văn có nội dung x 11 Viết thủ tục thay tất ký tự c dòng văn D ký tự c1 12 Thiết kế hàm thủ tục lấy nội dung phần tử thứ p dòng 13 Viết thủ tục xóa tất ký tự c dịng văn D 14 Viết thủ tục cắt khoảng trắng dư (các khoảng trắng không cần thiết) ký tự dòng 15 Thiết kế hàm kiểm tra dịng văn D1 có phải dịng dịng văn D hay khơng 173 Phân tích thiết kế thuật tốn Viết chương trình nhập dịng văn từ bàn phím, cắt tất khoảng trống khơng cần thiết dịng Thay ký tự đầu dòng ký tự hoa Chép dòng văn sang dịng để thao tác dịng văn cũ khơng bị Trên dịng văn ta thực thao tác sau đây: Xen ký tự vào dịng Xóa ký tự khỏi dòng Thay tất ký tự dịng ký tự Xóa tất ký tự c dịng (c nhập từ bàn phím) Nhập dòng văn kiểm tra xem dòng văn có phải dịng dịng văn lưu trữ hay khơng? 174 Phân tích thiết kế thuật toán Bài thực thực hành số CÀI ÐẶT DANH SÁCH LIÊN KẾT BẰNG CON TRỎ Bài 1 : danh sách liên kết đơn Viết chương trình lưu trữ đa thức theo yêu cầu sau : Viết khai báo cần thiết để cài đặt đa thức Viết thủ tục khởi tạo đa thức rỗng Viết hàm kiểm tra đa thức rỗng Xen phần tử x vào đa thức D sau vị trí p Xóa phần tử x sau vị trí p khỏi đa thức D Viết thủ tục nhập đa thức Thiết kế hàm kiểm tra tính chuẩn hóa đa thức (ứng với cấp số mũ có hệ số a tương ứng với nó) Ví dụ : 2x3 + 3x3  Sai Ta phải viết thành: 5x3 Thiết lập hàm chuyển đa thức dạng chuẩn hóa Viết thủ tục hiển thị đa thức hình 10 Viết thủ tục xếp đa thức theo thứ tự giảm dần số mũ 11 Viết thủ tục cộng đa thức D1 D2 thành đa thức D3 12 Viết thủ tục trừ đa thức D1 D2 thành đa thức D3 13 Viết thủ tục nhân đa thức D1 D2 thành đa thức D3 14 Viết hàm tính giá trị đa thức với giá trị cho x nhập từ bàn phím Viết chương trình nhập vào đa thức thực yêu cầu sau: Hiển thị đa thức nhập 175 Phân tích thiết kế thuật tốn Xen phần tử vào đa thức Xóa phần tử khỏi đa thức Chuẩn hóa đa thức, hiển thị đa thức sau chuẩn hóa (nếu đa thức đa thức chưa chuẩn hóa) Sắp xếp đa thức theo số mũ giảm dần, hiển thị đa thức sau xếp Nhập vào đa thức D1, D2 thực phép toán cộng, trừ, nhân hai đa thức Hiển thị kết phép toán để kiểm tra Nhập giá trị cho biến x tính giá trị đa thức Bài 2 : danh sách liên kết kép Viết chương trình lưu trữ danh sách số nguyên, xếp danh sách theo thứ tự (tăng giảm), trộn danh sách có thứ tự để danh sách có thứ tự Yêu cầu chi tiết: Viết khai báo cần thiết để cài đặt danh sách số nguyên Viết thủ tục khởi tạo danh sách rỗng Viết hàm kiểm tra danh sách rỗng Viết thủ tục nhập danh sách Viết thủ tục hiển thị danh sách hình Viết thủ tục xếp danh sách theo thứ tự (tăng giảm) Xen phần tử x vào danh sách sau cho danh sách bảo đảm thứ tự Xóa phần tử x khỏi danh sách cho danh sách bảo đảm thứ tự viết thủ tục trộn danh sách có thứ tự thành danh sách cho danh sách bảo đảm thứ tự Viết chương trình nhập vào danh sách số nguyên thực yêu cầu sau: Hiển thị danh sách vừa nhập Sắp xếp danh sách theo thứ tự Hiển thị danh sách sau xếp 176 Phân tích thiết kế thuật toán Xen phần tử vào danh sách Hiển thị danh sách sau xen Xóa phần tử khỏi danh sách Hiển thị danh sách sau xóa Nhập danh sách, xếp danh sách theo thứ tự, sau trộn danh sách để danh sách có thứ tự Hiển thị danh sách hình để kiểm tra 177 Phân tích thiết kế thuật toán Bài thực hành số CẤU TRÚC NGĂN XẾP & HÀNG Ứng dụng ngăn xếp (Stack) hàng (Queue) để viết chương trình biến đổi biểu thức trung tố thành tiền tố hậu tố Viết chương trình tính giá trị biểu thức tiền tố hậu tố Yêu cầu chi tiết: Viết khai báo cần thiết để cài đặt Stack, Queue Viết thủ tục khởi tạo Stack rỗng Viết hàm kiểm tra Stack rỗng Viết thủ tục thêm phần tử vào Stack Viết thủ tục xóa phần tử khỏi Stack Viết chương trình lấy nội dung phần tử đỉnh Stack Viết thủ tục khởi tạo Queue rỗng Viết hàm kiểm tra Queue rỗng Viết thủ tục thêm phần tử vào Queue 10 Viết thủ tục xóa phần tử khỏi Queue 11 Viết chương trình lấy nội dung phần tử đỉnh Queue 12 Viết chương trình đổi biểu thức từ dạng trung tố sang dạng tiền tố 13 Viết chương trình đổi biểu thức từ dạng trung tố sang dạng hậu tố 14 Viết chương trình tính giá trị biểu thức tiền tố 15 Viết chương trình tính giá trị biểu thức hậu tố Thuật toán chuyển đổi biểu thức từ dạng trung tố sang dạng hậu tố 178 Phân tích thiết kế thuật toán Procedure HAUTO (BT: Biểu thức trung tố ; Var HT: Hàng chứa biểu thức hậu tố sau đổi } Begin MakeNullS(S); { Tạo Stack rỗng } MakeNullQ(S); { Tạo Queue rỗng } x = Phần tử biểu thức trung tố While chưa xét hết biểu thức trung tố Begin If x = '(' then Push (x,S) { thêm x vào Stack } If x = ')' then Begin While (Not Empty(S)) and (Top(S) '(') Begin Y:= Top (S); EnQueue(y,Q); {Thêm Y vào hàng} Pop(S); {xóa phần tử đỉnh Stack} End; If EmptyS(S) then báo lỗi Stack rỗng Else Pop(S) { xóa phần tử đỉnh Stack } End; { If } If < x toán tử > then If EmptyS(S) then Push (x,S) {thêm x vào Stack} Else Begin While(Uutien(Top(S)) then EnQueue(x,Q); X = phần tử biểu thức trung tố End; { While } While Not EmptyS(S) Begin Y:= Top(S); Enqueue(Y,Q); Pop(S); 179 Phân tích thiết kế thuật toán End; End; { Thủ tục } Trong hàm Uutien trả thứ tự ưu tiên toán tử sau: Toán tử (,) *,/ +,- Thứ tự ưu tiên 180 Phân tích thiết kế thuật toán Bài thực hành số CẤU TRÚC CÂY (Cây Nhị Phân - Cây Biểu Thức - Cây Tìm Kiếm Nhị Phân) Bài : biểu thức Viết chương trình cài đặt biểu thức, tính trị biểu thức Yêu cầu chi tiết: Viết phần khai báo để cài đặt biểu thức Viết thủ tục khởi tạo rỗng Viết hàm kiểm tra rỗng Thiết kế hàm tạo từ trái L, phải R nhản nút n, cách xem có nút gốc n tương ứng L (con trái) R (con phải) Viết thủ tục duyệt cây:  Duyệt tiền tự, trung tự, hậu tự  Duyệt theo mức Viết hàm xác định số nút Thiết kế hàm xác định chiều cao Viết hàm tính giá trị biểu thức Viết hàm xác định mức nút Bài : tìm kiếm nhị phân Viết chương trình cài đặt tìm kiếm nhị phân (nhãn nút nhập từ bàn phím) Yêu cầu chi tiết: Viết phần khai báo để cài đặt tìm kiếm nhị phân Viết thủ tục khởi tạo rỗng 181 Phân tích thiết kế thuật toán Viết hàm kiểm tra rỗng Viết thủ tục xen nút vào tìm kiếm nhị phân Viết thủ tục xóa nút tìm kiếm nhị phân Viết thủ tục nhập tìm kiếm nhị phân với nhản nút nhập vào từ bàn phím Viết thủ tục duyệt cây: Duyệt tiền tự, trung tự, hậu tự Duyệt theo mức Viết hàm xác định số nút Thiết kế hàm xác định chiều cao 10 Viết hàm xác định mức nút 182 Phân tích thiết kế thuật tốn Bài thực hành số CẤU TRÚC CÂY (Cây tổng quát) (Viết chương trình cài đặt tổng quát (dùng mảng hay trỏ) Yêu cầu chi tiết: Viết phần khai báo để cài đặt Viết thủ tục khởi tạo rỗng Viết hàm kiểm tra rỗng Viết thủ tục nhập với nhản nút nhập từ bàn phím Viết thủ tục duyệt cây:  Duyệt tiền tự  Duyệt trung tự  Duyệt hậu tự  Duyệt theo mức Viết hàm xác định số nút Thiết kế hàm xác định chiều cao Viết hàm xác định mức nút (nút có nhản cần xác định) Thiết lập hàm kiểm tra hữu nút 10 Thiết lập hàm xác định nhản nút trái nút với nhản nút nhập từ bàn phím 11 Thiết lập hàm xác định nhản nút anh ruột phải nút với nhản nút nhập từ bàn phím 12 Thiết lập hàm xác định nhản nút cha nút với nhản nút với nhản nút nhập từ bàn phím 183 Phân tích thiết kế thuật tốn Bài thực hành số CẤU TRÚC TẬP HỢP- TỰ ÐIỂN - BẢNG BĂM Bài : cài đặt tự điển Anh – Việt (Viết chương trình cài đặt tự điển Anh - Việt đơn giản (có thể dùng bảng băm đóng hay mở để giải đụng độ) Yêu cầu chi tiết: Viết phần khai báo để cài đặt tự điển Anh Việt Viết thủ tục khởi tạo tự điển rỗng Viết hàm kiểm tra tự điển rỗng Viết thủ tục nhập nội dung cho tự điển Thiết lập thủ tục thêm từ vào tự điển Thiết lập thủ tục xóa từ khỏi tự điển Viết hàm xác định tồn từ tự điển Tra cứu tự điển Nhập từ cần tìm tiếng Việt từ hình, hiển thị ý nghĩa tiếng Anh từ hình Bài 2 : cài đặt tập hợp Viết chương trình cài đặt tập hợp ký tự (độ dài tối đa ký tự) Nhập vào tập hợp, tìm tập hợp giao, hợp, hiệu tập hợp cho hiển thị kết hình để kiểm tra Yêu cầu chi tiết: Viết phần khai báo để cài đặt tập hợp Viết thủ tục khởi tạo tập hợp rỗng Viết hàm kiểm tra tập hợp rỗng Viết thủ tục nhập nội dung cho tập hợp 184 Phân tích thiết kế thuật tốn Thiết kế hàm kiểm tra thành viên tập hợp Thiết kế thủ tục xen phần tử vào tập hợp Viết thủ tục hiển thị nội dung tập hợp hình Thiết kế thủ tục tìm hợp tập hợp Thiết kế thủ tục tìm giao tập hợp 10 Thiết kế thủ tục tìm hiệu tập hợp THUẬT NGỮ CHUN MƠN Algorithm Thuật tốn Abstract Data Type Các kiểu liệu trừu tượng Double Link List Danh sách liên kết kép Leftchild Con trái Rightchild Con phải Binary Tree Cây nhị phân Hash table Bảng băm Close Hash Table Bảng băm đóng DeleteMin Xóa phần tử bé Directed Graph Đồ thị có hướng Undirected Graph Đồ thị vô hướng Traversals of graph Các phép duyệt đồ thị Depth - first search Duyệt theo chiều sâu Analog signal Tín hiệu tương tự Run-Length Encoding Phương pháp mã hố độ dài loạt 185 Phân tích thiết kế thuật tốn TÀI LIỆU THAM KHẢO Aho, J E Hopcroft, J D Ullman “Data Structures and Algorithms”, xuất Addison-Wesley, năm 1993 Đinh Mạnh Tường  “Cấu trúc liệu & thuật toán”, Nhà xuất Khoa học kỹ thuật, in lần thứ 3, năm 2003 J Courtin & I Kowarski  “Initiation l’algorithmique et aux structures de données”, Vol & Vol 2, Nhà xuất Dunod, in lần thứ 2, năm 1994 L Nyhoff & S Leestma (bản dịch Lê Minh Trung) “Lập trình nâng cao Pascal với cấu trúc liệu”, tập & 2, xuất SCITEC, năm 1991 N Wirth “Data Structures + Algorithms = Programs”, xuất Prentice-Hall, năm 1976 Phan Chí Tùng & Võ Trung Hùng “Nhập môn cấu trúc liệu giải thuật”, giáo trình giảng dạy cho sinh viên Khoa Cơng nghệ Thông tin, trường Đại học Bách khoa, Đại học Đà Nẵng, tài liệu lưu hành nội từ năm 1995 186 ... T(n) sau: T(n) = T(2k) = 2T (22 k-1) + =22 T(2k -2 ) +22 +2 =23 T(2k-3) +23 +22 +2 =2k-1T (2) + =2k-1+2k -2 =n /2+ n -2 =3n / 2- 2 Như với n =2k , thuật toán MaxMin cần 3n /2 – phép so sánh, so với thuật tốn trước,... chu trình xuất phát từ qua đỉnh 2, 3, 4, trở có độ dài : 2+ 4+6+3+3 +2= 20 Bây giờ, ta đánh giá cận độ dài cácchu trình mở rộng đường đi(1 ,2) : 1 32 Phân tích thiết kế thuật tốn  Độ dài cung (1, 2) ... tính sau :  Giá rời đỉnh 2? ?: min(7 /2, 8 /2, 7 /2) =7 /2  Giá đến đỉnh 3 : min(7 /2, 9 /2, 17 /2) =7 /2  Giá rời đỉnh 3 : min(4 /2, 7 /2, 16 /2) =4 /2 Như vậy :  giá thăm đỉnh 11 /2  giá thăm đỉnh  giá thăm

Ngày đăng: 17/01/2022, 11:33

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    BÀI 1 : TỔNG QUAN VỀ PHÂN TÍCH THIẾT KẾ THUẬT TOÁN

    .1.2 Các đặc trưng cần phải có của thuật toán

    .1.3 Công cụ trình bày thuật toán

    .2. Ngôn ngữ giả và tinh chế từng bước

    .3. Tóm tắt ba giai đoạn để giải một bài toán

    .4. Các kiểu dữ liệu trừu tượng (Abstract Data Type)

    .5. Thời gian chạy của một chương trình

    .5.1 Ðo thời gian chạy của một chương trình

    .5.2 Ðộ phức tạp của thuật toán

    .5.3 Cách tính thời gian chạy chương trình

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w