1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số kĩ thuật phân tích và thiết kế thuật toán

57 1 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

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 836,93 KB

Nội dung

Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật toán Tr-ờng đại học vinh Khoa c«ng nghƯ th«ng tin - - HOàNG THị MAI Một số Kỹ THUậT PHÂN TíCH Và THIếT Kế THUậT TOáN Khóa luận tốt nghiệp đại học Vinh, 2008 SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật toán MC LC LI NểI U CHƢƠNG 1: MỘT SỐ KỸ THUẬT PHÂN TÍCH THUẬT TỐN I TỔNG QUAN THUẬT TOÁN Khái niệm thuật toán Các đặc trƣng thuật toán II TIÊU CHUẨN ĐÁNH GIÁ THUẬT TOÁN III THỜI GIAN THỰC HIỆN CHƢƠNG TRÌNH Thời gian thực chƣơng trình Đơn vị đo thời gian thực Thời gian thực trƣờng hợp xấu IV TỶ SUẤT TĂNG VÀ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN Tỷ suất tăng Khái niệm độ phức tạp htuật toán 10 V PHƢƠNG PHÁP TÍNH ĐỘ PHỨC TẠP 10 Quy tắc cộng 11 Quy tắc nhân 11 Quy tắc tổng qt để phân tích chƣơng trình khơng gọi chƣơng trình 11 Độ phức tạp chƣơng trình có gọi chƣơng trình khơng đệ quy 13 VI PHÂN TÍCH CÁC CHƢƠNG TRÌNH ĐỆ QUY 15 Chƣơng trình đệ quy 15 Thành lập phƣơng trình đệ quy 16 Giải phƣơng trình đệ quy 17 CHƢƠNG 2: MỘT SỐ KỸ THUẬT THIẾT KẾ THUẬT TOÁN 23 I KỸ THUẬT CHIA ĐỂ TRỊ (DIVIE & CONQUER) 23 Nội dung kỹ thuật 23 SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật toán Mơ hình tổng qt thuật tốn chia để trị 24 Một số tốn điển hình có thuật tốn thiết kế theo kỹ thuật chia để trị 24 II KỸ THUẬT THAM ĂN (GREEDY) 41 Nội dung kỹ thuật 41 Mơ hình tổng qt thuật tốn tham ăn 41 Một số tốn điển hình có thuật tốn thiết kế theo kỹ thuật tham ăn 42 III KỸ THUẬT QUAY LUI (BACKTRACKING) 47 Nội dung kỹ thuật 47 Mơ hình tổng quát thuật toán quay lui 47 Một số toán điển hình có thuật tốn thiết kế theo kỹ thuật quay lui 48 KẾT LUẬN 54 TÀI LIỆU THAM KHẢO 56 SVTH: Hoàng Thị Mai Líp 45A1 Kho¸ ln tèt nghiƯp Mét sè kü tht phân tích thiết kế thuật toán LI NểI U Ngày này, với phát triển nhảy vọt khoa học cơng nghệ nói chung ngành tin học nói riêng, với tính ƣu việt, tiện dụng đƣợc ứng dụng rộng rãi, tin học ngày phần thiếu đƣợc nhiều ngành công xây dựng phát triển xã hội Hơn cịn sâu vµo đời sống ngƣời Tin học thâm nhập mạnh mẽ vào Việt Nam Nhiều lĩnh vực hoạt động từ lĩnh vực quản lý hành chính, quản lý kinh tế, tự động hóa cơng nghiệp đến lĩnh vực giáo dục đào tạo có thay đổi đáng kể nhờ ứng dụng tin học Máy tính cơng cụ cần thiết ngƣời thời đại ngày Hoạt động máy tính xử lý thơng tin đƣa vào theo chƣơng trình đƣợc lập sẵn nhằm đƣa kết phục vụ yêu cầu ngƣời sử dụng Việc xây dựng chƣơng trình cho máy tính cần thiết chƣơng trình linh hồn máy tính Trong xây dựng chƣơng trình để giải tốn máy tính điện tử, điều trƣớc tiên phải có thuật tốn Để có chƣơng trình có hiệu cần phải có thuật toán tối ƣu Vấn đề đặt ra, làm để tìm đƣợc thuật tốn cho toán đặt ra? Lớp toán đƣợc đặt từ ngành khoa học kỹ thuật, từ lĩnh vực hoạt động ngƣời phong phú đa dạng Các thuật toán giải lớp toán khác Cú nhiều kỹ thuật thiết kế thuật toỏn nhƣ: Chia để trị (divide-and-conque), quy hoạch động, tham ăn (greedy method), quay lui (backtracking)…Nhƣng khoá luận trọng tâm nghiên cứu ba kỹ thuật thiết kế thuật toán sau: Chia để trị (divideand-conque), tham ăn (greedy method) quay lui (backtracking) Việc nắm đƣợc chiến lƣợc thiết kế thuật toán quan trọng cần thiết ta dễ tìm thuật tốn cho tố n Một tốn có nhiều thuật toán khác để giải Vấn đề đặt nữa, làm để lựa chọn thuật toán tối ƣu giải toán đƣa ra? Vì vậy, để giải đƣợc vấn đề ny thỡ vic so sỏnh SVTH: Hoàng Thị Mai Líp 45A1 Kho¸ ln tèt nghiƯp Mét sè kü thuật phân tích thiết kế thuật toán phc thuật tốn cần thiết Khi nói đến độ phức tạp thuật toán, ngƣời ta thƣờng quan tâm đến chi phí cần dùng để thực Chi phí thể qua việc sử dụng tài nguyên nhƣ nhớ, thời gian thực hiện…Thống kê thơng số này, ta có đánh giá độ phức tạp thuật toán Từ đánh giá này, ta lựa chọn thuật toán tối ƣu cho toán cần giải Từ vấn đề đặt ra, với hƣớng dẫn cô giáo Phan Lê Na hiểu biết tơi lựa chọn đề tài: “Một số kỹ thuật phân tích thiết kế thuật tốn” Đã có nhiều tài liệu nghiên cứu vấn đề với thuật tốn, chƣơng trình đƣợc mơ cài đặt ngơn ngữ lập trình pascal Tuy nhiên, khố luận thuật tốn chƣơng trình đƣợc mô cài đặt ngôn ngữ lập trình C Khố luận ngồi lời nói đầu, kết luận tài liệu tham khảo bao gồm: Chƣơng 1: Kỹ thuật phân tích thuật tốn Chƣơng 2: Một số kỹ thuật thiết kế thuật tốn Để hồn thành khố luận, tơi nhận đƣợc hƣớng dẫn tận tình Cô giáo, Tiến sĩ Phan Lê Na suốt thời gian làm khoá luận Nhân dịp cho phép tơi bày tỏ lịng biết ơn chân thành sâu sắc đến cô giáo Phan Lê Na Đồng thời cho phép tơi gửi lời cảm ơn tới tồn thể thầy cô giáo khoa Công nghệ thông tin, bạn sinh viên lớp 45A1 giúp đỡ tơi hồn thành khoá luận Tuy nhiên, thời gian, nguồn tƣ liệu có hạn lực cịn hạn chế nên khố luận chắn khơng tránh khỏi thiếu sót Rất mong đƣợc góp ý bảo thầy cô giáo bạn sinh viên SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế tht to¸n CHƢƠNG 1: KỸ THUẬT PHÂN TÍCH THUẬT TỐN I TỔNG QUAN THUẬT TỐN Khái niệm thuật tốn Thuật toán (Algorithm) khái niệm quan trọng lĩnh vực tin học Thuật ngữ thuật toán đƣợc xuất phát từ nhà toán học Arập Abu Ja’far Mohammed ibn Musa al Khowarizmi (khoảng năm 825) Tuy nhiên lúc nhiều kỉ sau, không mang nội dung nhƣ ngày quan niệm Ví dụ 1: Thuật tốn tiếng có từ thời cổ Hy lạp thuật toán Euclid, thuật tốn tìm ƣớc chung lớn hai số ngun Có thể mơ tả thuật tốn nhƣ sau: Thuật toán Euclid: Input : m, n nguyên dƣơng Output: g (ƣớc chung lớn m n) Phương pháp: Bƣớc 1: Tìm r, phần dƣ m cho n Bƣớc 2: Nếu r = 0, g = n (gán giá trị n cho g), dừng lại Trƣờng hợp ngƣợc lại (r  0), m = n; n = r quay lại bƣớc Vì ta định nghĩa thuật tốn nhƣ sau: Thuật toán hệ thống chặt chẽ rõ ràng quy tắc nhằm xác định dãy thao tác đối tƣợng, cho sau số hữu hạn bƣớc thực thao tác, ta đạt đƣợc mục tiêu định trƣớc Các đặc trƣng thuật tốn Định nghĩa thuật tốn cịn chứa nhiều điều chƣa rõ ràng Để hiểu đầy đủ ý nghĩa khái niệm thuật tốn, tìm hiểu đặc trƣng sau thuật toán: SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật to¸n a Input Mỗi thuật tốn nhận đại lƣợng vào mà ta thƣờng gọi liệu vào (Input) Đó giá trị cần đƣa vào thuật toán bắt đầu làm việc Các liệu cần đƣợc lấy từ tập hợp giá trị cụ thể Chẳng hạn, thuật tốn Euclid trên, số m n liệu lấy từ tập số nguyên dƣơng b Output Mỗi thuật tốn có nhiều liệu (output) Đó giá trị có quan hệ hồn tồn xác định với liệu vào, kết thực thuật tốn.Trong thuật tốn Euclid, có liệu ƣớc số chung lớn (USCLN) g, thuật toán dừng lại (trƣờng hợp r = 0) thỡ giỏ trị g ƣớc chung lớn m n c Tính xác định ë bƣớc, bƣớc thao tác phải rõ ràng, khơng gây nên nhập nhằng Nói rõ điều kiện hai xử lý thực thuật toán phải cho kết nhƣ Nếu biểu diễn thuật toán phƣơng pháp thơng thƣờng khơng có đảm bảo đƣợc ngƣời đọc hiểu ý ngƣời viết thuật toán Để đảm bảo địi hỏi này, thuật tốn cần đƣợc mơ tả ngơn ngữ lập trình (hợp ngữ ngôn ngữ bậc cao nhƣ Pascal, C ) Trong ngôn ngữ mệnh đề đƣợc tạo theo qui tắc cú pháp nghiêm ngặt có nghĩa d Tính khả thi/đa Tất phép tốn có mặt thuật tốn phải đủ đơn giản Điều có nghĩa là, phép tốn phải cho, ngun tắc thực ngƣời giấy trắng bút chì khoảng thời gian hữu hạn Chẳng hạn, thuật toán Euclid ta cần thực phép chia số nguyên, phép gán phép so sánh r = hay r  Điều quan trọng thuật tốn phải có tính đa làm việc đƣợc với tất tập hợp liệu đầu vào SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật to¸n e Tính dừng Với liệu vào thoả mãn điều kiện liệu vào (tức đƣợc lấy từ tập liệu vào), thuật toán phải dừng lại sau số hữu hạn bƣớc thực hiện.Ví dụ, thuật tốn Euclid thoả mãn ®iỊu kiện Bởi giá trị r ln nhỏ n (khi thực bƣớc 1), r giá trị n bƣớc i (ký hiệu ni) giá trị ri-1 bƣớc i - 1, ta có bất đẳng thức n > r = n1 > r1 = n2 > r2 Dãy số nguyên dƣơng giảm dần cần phải kết thúc 0, sau số hữu hạn bƣớc giá trị r phải = thuật tốn phải dừng lại f Tính đắn Sau thực tất lệnh thuật toán ta phải đƣợc kết mong muốn, kết thƣờng đƣợc xác định theo định nghĩa có trƣớc II TIÊU CHUẨN ĐÁNH GIÁ THUẬT TỐN Trong giải tốn có số thuật toán khác nhau, vấn đề cần phải đánh giá thuật tốn để lựa chọn thuật tốn tốt Nhƣ vậy, phân tích đánh giá thuật toán nhằm lựa chọn thuật toán tốt thuật toán để cài đặt chƣơng trình giải tốn đặt ra, đồng thời cải tiến thuật tốn có để đƣợc thuật tốn tốt Một thuật toán đƣợc xem tốt đạt tiêu chuẩn sau: - Thuật tốn thực đắn - Thuật toán đơn giản - Thuật toán thực nhanh Với yêu cầu (1), để kiểm tra tính đắn thuật tốn cài đặt thuật tốn cho thực máy với số liệu mẫu lấy kết thu đƣợc với kết biết Thực cách làm khơng chắn thuật tốn với tất liệu thử nhƣng lại sai với liệu Với lại cách phát thuật tốn sai chƣa chứng minh đƣợc Tớnh ỳng n ca thut SVTH: Hoàng Thị Mai Líp 45A1 Kho¸ ln tèt nghiƯp Mét sè kü tht phân tích thiết kế thuật toán toỏn phi c chứng minh tốn học Vấn đề khơng đơn giản nên đề tài không đề cập tới vấn đề Khi viết chƣơng trình để sử dụng vài lần yêu cầu (2) quan trọng Chúng ta cần thuật toán dễ cài đặt để nhanh chóng có đƣợc kết quả, thời gian thực chƣơng trình khơng đƣợc đề cao chƣơng trình đƣợc sử dụng vài lần Tuy nhiên chƣơng trình đƣợc sử dụng nhiều lần yêu cầu tiết kiệm thời gian thực chƣơng trình lại quan trọng, đặc biệt chƣơng trình mà thực cần liệu nhập lớn Do yêu cầu (3) đƣợc xem xét kĩ Ta gọi hiệu thời gian thực thuật toán Trong khuụn khổ đề tài này, nghiên cứu đến tiêu chuẩn thực nhanh III THỜI GIAN THỰC HIỆN CỦA CHƢƠNG TRÌNH Một phƣơng pháp để xác định hiệu thời gian thực thuật tốn thực đo lƣờng thời gian thực hoạt động máy tính xác định tập đƣợc chọn lọc liệu vào Thời gian thực khơng phụ thuộc vào thuật tốn mà cịn phụ thuộc vào tập thị máy tính, chất lƣợng máy tính kĩ xảo ngƣời lập trình Sự thi hành điều chỉnh để thực tốt tập đặc biệt liệu vào đƣợc chọn Để vƣợt qua trở ngại này, nhà khoa học máy tính chấp nhận tính phức tạp thời gian nhƣ đo lƣờng thực thi thuật tốn Thuật ngữ tính hiệu đƣợc đề cập tới đo lƣờng đặc biệt phức tạp thời gian trƣờng hợp xấu Thời gian thực chƣơng trình Thời gian thực chƣơng trình hàm kích thƣớc liệu vào, ký hiệu T(n) n kích thƣớc (độ lớn) liệu vào VÝ dơ: Chƣơng trình tính tổng n số có thời gian thực T(n) = Cn C số SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật toán Đơn vị đo thời gian thực én v T(n) đơn vị đo thời gian bình thƣờng nhƣ giờ, phút giây mà thƣờng đƣợc xác định số lệnh đƣợc thực máy tính lý tƣởng Ví dụ: Khi ta nói thời gian thực chƣơng trình T(n) = Cn có nghĩa chƣơng trình cần Cn thị thực thi Thời gian thực trƣờng hợp xấu Nói chung thời gian thực chƣơng trình khơng phụ thuộc vào kích thƣớc mà cịn phụ thuộc vào tính chất liệu vào Nghĩa liệu vào có kích thƣớc nhƣng thời gian thực chƣơng trình khác Chẳng hạn chƣơng trình xếp dãy số nguyên tăng dần, ta cho vào dãy có thứ tự thời gian thực khác với ta cho vào dãy chƣa có thứ tự, ta cho vào dãy có thứ tự tăng thời gian thực khác so với ta cho vào dãy có thứ tự giảm Vì thƣờng ta coi T(n) thời gian thực chƣơng trình trƣờng hợp xấu liệu vào có kích thƣớc n, tức là: T(n) thời gian lớn để thực chƣơng trình liệu vào có kích thƣớc n IV.TỶ SUẤT TĂNG VÀ ĐỘ PHỨC TẠP CỦA THUẬT TOÁN Tỷ suất tăng Ta nói hàm khơng âm T(n) có tỷ suất tăng (growth rate) f(n) tồn số C N0 cho T(n) ≤ Cf(n) với n ≥ N0 Ta chứng minh “Cho hàm không âm T(n) bất kỳ, ta ln tìm tỷ suất tăng f(n) nó” Ví dụ 1: Giả sử T(0) = 1, T(1) = tổng quát T(n) = (n+1)2 Ðặt N0 = C = với n ≥1 dễ dàng chứng minh đƣợc T(n) = (n+1) ≤ 4n2 với n ≥ 1, tức tỷ suất tăng T(n) n2 Ví dụ 2: Tỷ suất tăng hàm T(n) = 3n3 + 2n2 n3 Thực vậy, cho N0 = C = ta dễ dàng chứng minh với n ≥ 3n3 + 2n2 ≤ 5n3 Khái niệm độ phức tạp thuật toán 10 SVTH: Hoàng Thị Mai Lớp 45A1 Một số kỹ thuật phân tích thiết kế thuật toán Khoá luận tèt nghiÖp If (Feasible(S  x) ) /* S  x cã triÓn väng*/ S = S  x; } If (Solution(S)) /* S lời giải */ Return S } Một số tốn điển hình có thuật toán thiết kế theo kỹ thuật tham ăn Bài toán 1: Bài toán trả tiền máy rút tiền tự động ATM Nội dung toán Trong máy rút tiền tự động ATM, ngân hàng chuẩn bị sẵn loại tiền có mệnh giá 100.000 đồng, 50.000 đồng, 20.000 đồng 10.000 đồng Giả sử loại tiền có số lƣợng khơng hạn chế Khi có khách hàng cần rút số tiền S đồng (tính chẵn đến 10.000 đồng, tức S chia hết cho 10000) Hãy tìm phƣơng án trả tiền cho trả đủ S đồng số tờ giấy bạc phải trả Ý tưởng: Gọi X = (X1, X2, X3, X4) phƣơng án trả tiền, X1 số tờ giấy bạc mệnh giá 100.000 đồng, X2 số tờ giấy bạc mệnh giá 50.000 đồng, X3 số tờ giấy bạc mệnh giá 20.000 đồng X4 số tờ giấy bạc mệnh giá 10.000 đồng Theo yêu cầu ta phải có X1 + X2 + X3 + X4 nhỏ X1 * 100.000 + X2 * 50.000 + X3 * 20.000 + X4 * 10.000 = S Áp dụng kỹ thuật tham ăn để giải tốn là: để có số tờ giấy bạc phải trả (X1 + X2 + X3 + X4) nhỏ tờ giấy bạc mệnh giá lớn phải đƣợc chọn nhiều Trƣớc hết ta chọn tối đa tờ giấy bạc mệnh giá 100.000 đồng, nghĩa X1 số nguyên lớn cho X1 * 100.000 ≤ n Tức X1 = S DIV 100.000 Xác định số tiền cần rút lại hiệu S – X1 * 100000 chuyển sang chọn loại giấy bạc 50.000 đồng, vµ cø tiÕp tơc nh- cho loại mệnh giá khác Vớ d 1: khách hàng cần rút 1.290.000 đồng (n = 1290000), phng ỏn tr tin nh sau: 43 SVTH: Hoàng Thị Mai Líp 45A1 Kho¸ ln tèt nghiƯp Mét sè kü thuật phân tích thiết kế thuật toán X1 = 1290000 DIV 100000 = 12 Số tiền cần rút lại 1290000 – 12 * 100000 = 90000 X2 = 90000 DIV 50000 = Số tiền cần rút lại 90000 – * 50000 = 40000 X3 = 40000 DIV 20000 = Số tiền cần rút lại 40000 – * 20000 = X4 = DIV 10000 = Ta có X = (12, 1, 2, 0), tức máy ATM trả cho khách hàng 12 tờ 100.000 đồng, tờ 50.000 đồng tờ 20.000 đồng Ví dụ 2: Khách hàng cần rút 110.000 đồng Thì máy ATM trả cho khách hàng tờ 100.000 đồng tờ 10.000 đồng Cài đặt thuật toán void Doitien(unsigned long int s) { if (s >= 100000) { printf("\n\t %d to loai 100.000 dong ", s/100000); s = s%100000; } if (s >= 50000) { printf("\n\t %d to loai 50.000 dong", s/50000); s = s%50000; } if (s >= 20000) { printf("\n\t %d to loai 20.000 dong", s/20000); s = s%20000; } if (s >= 10000) printf("\n\t %d to loai 10.000 dong",s/10000); } Kết chương trình: Bài tốn trả tiền máy rút tiền tự động ATM 44 SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuật to¸n Bài tốn 2: Bài tốn Ba Lơ Nội dung tốn: Cho ba lơ đựng trọng lƣợng W n loại đồ vật, đồ vật i có trọng lƣợng gi giá trị vi Tất loại đồ vật có số lƣợng khơng hạn chế Tìm cách lựa chọn đồ vật đựng vào ba lô, chọn loại đồ vật nào, loại lấy cho tổng trọng lƣợng không vƣợt W tổng giá trị lớn Ý tưởng: Theo yêu cầu tốn ta cần đồ vật có giá trị cao mà trọng lƣợng lại nhỏ để cho mang đƣợc nhiều “đồ quý”, hợp lý ta quan tâm đến yếu tố “đơn giá” loại đồ vật tức tỷ lệ giá trị/trọng lƣợng Ðơn giá cao đồ quý Từ ta có kỹ thuật greedy áp dụng cho tốn là: Tính đơn giá cho loại đồ vật Xét loại đồ vật theo thứ tự đơn giá từ lớn đến nhỏ Với đồ vật đƣợc xét lấy số lƣợng tối đa mà trọng lƣợng lại ba lơ cho phép Xác định trọng luợng cịn lại ba lô quay lại bƣớc khơng cịn chọn đƣợc đồ vật no na 45 SVTH: Hoàng Thị Mai Lớp 45A1 Một số kỹ thuật phân tích thiết kế thuật toán Kho¸ ln tèt nghiƯp Ví dụ: Ta có ba lơ có trọng lƣợng 37 loại đồ vật với trọng lƣợng giá trị tƣơng ứng đƣợc cho bảng: Loại đồ vật Trọng lƣợng Giá trị A 15 30 B 10 25 C 2 D Từ bảng cho ta tính đơn giá cho loại đồ vật xếp loại đồ vật theo thứ tự đơn giá giảm dần ta có bảng sau: Loại đồ vật Trọng lƣợng Giá trị Đơn giá B 10 25 2.5 A 15 20 2.0 D 15 1.5 C 2 10 - Chọn vật B Trọng lƣợng lại ba lô: 37 - 3*10 = + Không chọn vật A + Chọn vật D Trọng lƣợng lại ba lô: – + Cuối ta chọn đƣợc vật C + Tổng trọng lƣợng: 3*10 + 1*4 + 1*2 = 36 + Tổng giá trị: 3*25 + 1*6 + 1*2 = 83 ThuËt to¸n: Thuật tốn thơ giải tốn ba lơ kĩ thuật tham ăn nhƣ sau: Tổ chức liệu: - Mỗi đồ vật đƣợc biểu diễn mẩu tin có trƣờng: • Ten: Lƣu trữ tên đồ vật • Trong_luong: Lƣu trữ trọng lƣợng đồ vật • Gia_tri: Lƣu trữ giá trị đồ vật • Don_gia: Lƣu trữ đơn giá đồ vật • Phuong_an: Lƣu trữ số lƣợng đồ vật đƣợc chọn theo phƣơng án - Danh sách đồ vật đƣợc biểu diễn mt mng cỏc vt 46 SVTH: Hoàng Thị Mai Líp 45A1 Kho¸ ln tèt nghiƯp Mét sè kü tht phân tích thiết kế thuật toán Khai bỏo bng C: #define MAX_SIZE 100 Typedef struct { char Ten[20] ; float trong_luong, Gia_tri, Don_gia ; int phuong_an ; } Do_vat; Typdef Do_vat Danh_sach_do_vat [MAX_SIZE ]; Void Greedy (Danh_sach_do_vat dsdv, float W); { int i; /*Sắp xếp mảng dsdv theo thứ tự giảm don_gia */ for ( i=0; i < n; i++ ) { dsdv[i].Phuong_an:= Chon(dsdv[i].Trong_luong, W); W = W – dsdv[i].phuong_an * dsdv[i].Trong_luong; } } Trong hàm Chon(trong_luong, W) nhận vào trọng lƣợng trong_luong vật trọng lƣợng cịn lại W ba lơ, trả số lƣợng đồ vật đƣợc chọn, cho tổng trọng lƣợng vật đƣợc chọn không lớn W Nói riêng, trƣờng hợp trong_luong W hai số ngun Chon (Trong_luong, W) W DIV Trong_luong Kết chương trình: Bài tốn Ba lơ 47 SVTH: Hoàng Thị Mai Lớp 45A1 Khoá luận tốt nghiệp Một số kỹ thuật phân tích thiết kế thuËt to¸n III KỸ THUẬT QUAY LUI (BACKTRACKING) Nội dung kỹ thuật quay lui Kỹ thuật quay lui (backtracking) nhƣ tên gọi nó, q trình phân tích xuống quay lui trở lại theo đƣờng qua Tại bƣớc phân tích chƣa giải đƣợc vấn đề thiếu liệu nên phải phân tích điểm dừng, nơi xác định đƣợc lời giải chúng xác định đƣợc (hoặc không nên) tiếp tục theo hƣớng Từ điểm dừng quay ngƣợc trở lại theo đƣờng mà qua để giải vấn đề tồn đọng cuối ta giải đƣợc vấn đề ban đầu Mơ hình tổng qt thuật tốn quay lui Thuật tốn quay lui thƣờng đƣợc dùng để giải toán liệt kê cấu hình Mỗi cấu hình đƣợc xây dựng cách xây dựng phần tử, phần tử đƣợc chọn cách thử tất khả /* Thủ tục cho x nhận lần lƣợt giá trị mà */ Void { Try(int i) for (mọi giá trị V gán cho xi) { < thö cho xi = V>; if (xi phần tử cuối cấu hình) Else { ; Try(i+1); /*gọi đệ quy để chọn tiếp xi+1 */ ; } } } Void main() { Try(1); //Thư c¸c c¸ch chän x1 } 48 SVTH: Hoàng Thị Mai Lớp 45A1 Một số kỹ thuật phân tích thiết kế thuật toán Kho¸ ln tèt nghiƯp Thuật tốn quay lui bắt đầu lời gọi Try(1) Có thể mơ tả thuật tốn quay lui sau: Cây tìm kiếm quay lui Một số tốn điển hình có thuật toán thiết kế theo kỹ thuật quay lui Bài toán 1: Bài toán liệt kê dãy nhị phân độ dài n Một dãy nhị phân độ dài n dãy x = x1x2 xn Trong xi  {0, 1} Một dãy nhị phân x độ dài n biểu diễn nhị phân giá trị nguyên P(x) nằm đoạn [0 2n-1] Số dãy nhị phân độ dài n số số nguyên 2n Ví dụ Khi n = 3, dãy nhị phân độ dài đƣợc liệt kê nhƣ bảng sau: P(x) X 000 001 010 011 100 101 110 111 Cài đặt chương trình #define max 100 int x[max],k,d; FILE *input; void PrintResult() //In cau hinh tim, thu tuc tim { int i;printf("\t\t"); for (i=1; i

Ngày đăng: 02/12/2021, 23:44

w