Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
223 KB
Nội dung
Bài tập mônPhântíchđánhgiáthuậttoán GVHD – PGS-TS Đào Thanh Tĩnh MỤC LỤC TÀI LIỆU THAM KHẢO 16 HV: Bùi Đức Giang -1- Lớp CHKHMT25B13 Bài tập mônPhântíchđánhgiáthuậttoán GVHD – PGS-TS Đào Thanh Tĩnh MỞ ĐẦU Thuật toán, gọi giải thuật, tập hợp hữu hạn thị hay phương cách định nghĩa rõ ràng cho việc hoàn tất số việc từ trạng thái ban đầu cho trước; thị áp dụng triệt để dẫn đến kết sau dự đoán Nói cách khác, thuậttoánquy tắc hay quy trình cụ thể nhằm giải vấn đề số bước hữu hạn, nhằm cung cấp kết từ tập hợp kiện đưa vào Phântích thiết kế thuậttoán lĩnh vực quan trọng khoa học máy tính Quá trình phântíchthuậttoán giúp ta hiểu sâu sắc mục đích, yêu cầu mà thuậttoán cần xây dựng, qua tiên liệu tài nguyên mà thuậttoán yêu cầu như: tài nguyên nhớ, băng thông, tài nguyên ngoại vi… Song phần thời gian tính toán yếu tố quan trọng mà ta cần quan tâm đánhgiáthuậttoán thực Trong viết tiểuluận trình bày phươngpháp vét cạn, quyhoạch động, áp dụng cho toán tính tổng độ dài đoạn thẳng lớn cho đôi điểm chung Trong trình trình bày không tránh khỏi thiếu sót, mong nhận đóng góp ý kiến quý báu Thầy giáo bạn Em xin trân thành cảm ơn Thầy giáo Đào Thanh Tĩnh, tạo điều kiện thuận lợi để em hoàn thành tập HV: Bùi Đức Giang -2- Lớp CHKHMT25B13 Bài tập mônPhântíchđánhgiáthuậttoán GVHD – PGS-TS Đào Thanh Tĩnh PHẦN 1: PHÂNTÍCH BÀI TOÁN Đề Mỗi đoạn thẳng trục Ox mô tả bới hai giá trị [a, b] Kí hiệu S tập hợp n đoạn thẳng S = { [ai,bi], i = 1,2, ,n} Xây dựng thuậttoán tìm tập S*⊆ S cho đoạn thẳng S* đôi điểm chung mà có tổng độ dài đoạn thẳng lớn Phântích a Dữ liệu đầu vào đầu (input, output) - Dữ liệu đầu vào (Input): Đầu vào tập S gồm n đoạn thẳng trục Ox mô tả bởi giá trị a,b; a điểm đầu, b điểm cuối đoạn thẳng - Dữ liệu đầu (Output): Tập kết S* chứa đoạn thẳng với hai đoạn thẳng Si, Sj tập S* điểm chung có tổng độ dài đoạn thẳng lớn * Nhận xét: - Mỗi đoạn thẳng có xuất hiện, xuất lần S * - Trong tập S*, đoạn thẳng phải đôi điểm chung - Số lượng đoạn thẳng kết trả không quan trọng mà quan trọng tổng độ dài lớn Như quan tâm đến hai yếu tố: Là đoạn thẳng có điểm chung hay không, tổng độ dài đoạn thẳng điểm chung b Vị trí tương đối đoạn thẳng Với đoạn thẳng trục Ox, để đơn giản ta xếp chúng theo chiều tăng b i , giả sử có đoạn thẳng [ai,bi] [aj,bj] với biL[9]=7 đoạn 10 chọn, Index[10]=8, xét đoạn d(8)+L(index[8])=1+5=6< L[7]=8 đoạn không chọn, xét tiếp đoạn d(7)+L(index[7])=2+6=8>L[6]=5 đoạn chọn, L(index[7])=5, xét tiếp đoạn d(5)+L(index[5])=4+2=6>L[4]=5 đoạn chọn, L(index[5])=2, xét tiếp đoạn d(2)+L(index[2])=2+0=2=L[1]=2 đoạn không chọn, xét tiếp đoạn d(1)+L(index[1])=2+0=2>L[0]=0 đoạn chọn Như L(10) = 11 S* ={đoạn 10, đoạn 7, đoạn 5, đoạn 1} Đây phương án tối ưu toán 2.5 Cụ thê giải thuật Khai báo: const static char fileoutput[] = "output.txt"; //{File ket qua dau } const static char fileinput[] = "input.txt";//{File du lieu vao } const static int MAX = 5000; - Định nghĩa cấu trúc đoạn thẳng struct doanthang { HV: Bùi Đức Giang - 10 - Lớp CHKHMT25B13 Bài tập mônPhântíchđánhgiáthuậttoán long a; long b; GVHD – PGS-TS Đào Thanh Tĩnh // Toa diem dau // Toa diem cuoi }; - Khai báo mảng chứa đoạn thẳng typedef struct doanthang Listdoanthang[MAX]; Listdoanthang S, S_output; danh sách đoạn thẳng đầu vào đầu index[0 n]: lưu số lớn đoạn thẳng từ j-1 mà kết hợp với đoạn j long d[1 n]; lưu độ dài đoạn thẳng a Giải thuật tính các giá trị index(i): for (i=0;i=S[i].a)) j ; index[i]=j; } Số phép so sánh nhiều nhất: 2(1+2+…+n)=n(n+1) Độ phức tạp: O(n ) b Giải thuật tính L(j) void Quyhoachdong() { L[0]=0; for(int j=1;j0) { if ((d[j]+L[index[j]])>L[j-1]) // neu doan j duoc chon HV: Bùi Đức Giang - 11 - Lớp CHKHMT25B13 Bài tập mônPhântíchđánhgiáthuậttoán GVHD – PGS-TS Đào Thanh Tĩnh { k++; // luu so doan thang duoc chon S_output[k].a= S[j].a; S_output[k].b= S[j].b; file_out