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

(Luận văn) một số thuật toán chọn lọc và ứng dụng trong tin học phổ thông

79 0 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

Nội dung

1 ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN VÀ TRUYỀN THƠNG LÊ ĐÌNH LONG a lu n va n MỘT SỐ THUẬT TOÁN CHỌN LỌC tn to VÀ ỨNG DỤNG TRONG TIN HỌC PHỔ THÔNG p ie gh Chuyên ngành: KHOA HỌC MÁY TÍNH d oa nl w Mã số: 60 48 0101 a lu a nv LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH ll u nf m tz n oi NGƯỜI HƯỚNG DẪN KHOA HỌC z TS VŨ VINH QUANG m co l gm @ an Lu Thái Nguyên - 2015 n va ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si MỞ ĐẦU Thuật toán khái niệm quan trọng tin học Thuật toán xuất phát từ nhà khoa học Arập Abu Ja‟far Mohammed ibn Musa al Khowarizmi Chúng ta xem thuật tốn cơng cụ dùng để giải toán xác định trước Việc nghiên cứu thuật tốn có vai trị quan trọng khoa học máy tính máy tính giải vấn đề có hướng dẫn giải rõ ràng đắn Nếu hướng dẫn giải sai khơng rõ ràng máy tính khơng thể giải tốn Trong khoa học máy tính, thuật toán định nghĩa dãy hữu hạn thao tác xếp theo trình tự định cho sau a lu thực dãy thao tác ấy, từ input toán, ta nhận output cần tìm n n va Ở Việt Nam mơn Tin học đưa vào giảng dạy thức trường phổ tn to thông từ năm học 2006 - 2007 nhiên thực tế môn Tin học đưa vào tham gia thi học sinh giỏi cấp tỉnh, cấp quốc gia từ lâu: Hội thi Tin học trẻ p ie gh khơng chun tồn quốc tổ chức lần đầu vào năm 1995, kỳ thi học sinh giỏi Tin học quốc gia tổ chức vào năm 1995 đặc biệt kỳ thi Olympic Tin oa nl w học quốc tế (IOI) tổ chức lần đầu vào năm 1989 Từ đến kỳ thi học sinh giỏi, Olympic Tin học ngày nhiều đòi hỏi kiến thức cao d a lu Chúng ta biết để có kết cao kỳ thi chọn học sinh giỏi môn Tin a nv học nói chung học sinh phải có vốn kiến thức thuật toán để giải u nf tốn khó (đặc biệt thuật tốn nâng cao), sau học sinh sử dụng ngơn ngữ ll lập trình để lập trình dựa vào thuật tốn tìm giải tốn theo m n oi yêu cầu Chương trình giảng dạy sách giáo khoa môn Tin học hành tz trường phổ thơng có lượng kiến thức hạn chế đơn giản, không đủ sở để học sinh dựa vào vốn kiến thức để tham gia kỳ thi học sinh giỏi cấp z gm @ thành phố hay cấp cao Câu hỏi đặt ra: “Làm để học sinh đạt kết cao kỳ thi học sinh giỏi môn Tin học trường phổ thông?” l co yêu cầu đặt giáo viên giảng dạy môn Tin học trường phổ thông phải m suy nghĩ, tìm tịi tài liệu số thuật toán như: Thuật toán đệ quy, thuật toán an Lu n va ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si tham lam, thuật toán xấp xỉ số thuật toán đồ thị thuật toán sử dụng hiệu để giải nhiều toán Tin học Xuất phát từ thực tế đó, đề tài luận văn: “MỘT SỐ THUẬT TOÁN CHỌN LỌC VÀ ỨNG DỤNG TRONG TIN HỌC PHỔ THƠNG” với mục đích tìm hiểu, nghiên cứu số thuật toán cách ứng dụng vào giảng dạy, bồi dưỡng đội tuyển học sinh giỏi môn Tin học trường phổ thơng Nội dung luận văn gồm chương, phần phụ lục với nội dung sau: Chƣơng 1: Luận văn trình bày tổng quan khái niệm thuật a lu toán độ phức tạp thuật toán, vấn đề phân lớp toán sở đánh n n va giá độ phức tạp thuật toán Các kiến thức tảng mặt lý thuyết Chƣơng 2: Trong chương luận văn trình bày tổng quan thuật toán đệ p ie gh tn to tính tốn để nghiên cứu chương tiếp sau luận văn quy, thuật toán tham lam, thuật tốn xấp xỉ số thuật tốn mơ hình đồ thị oa nl w Chƣơng 3: Dựa vào sở lý thuyết thuật tốn trình bày chương 2, chương luận văn cài đặt chương trình cho số tốn cụ thể d a lu Phần phụ lục: a nv Toàn kết thực nghiệm giải toán cài đặt ngôn ll u nf ngữ Pascal version 7.0 máy tính PC m tz n oi z m co l gm @ an Lu n va ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si Chƣơng CÁC KHÁI NIỆM VỀ THUẬT TOÁN VÀ ĐỘ PHỨC TẠP CỦA THUẬT TỐN 1.1 Khái niệm thuật tốn 1.1.1 Khái niệm toán Tin học Trong phạm vi tin học, người ta quan niệm tốn cơng việc muốn máy tính thực [2] Khi dùng máy tính để giải tốn, ta cần quan tâm tới vấn đề: Dữ liệu cần đưa vào máy tính (Input) gì? cần lấy (Output) thơng tin gì? nói a lu cách khác, cho tốn việc mơ tả rõ input output toán n n va Vấn đề lại là: Làm để từ input ta có output? Khác với tốn học (các u cầu toán thường chứng minh tồn p ie gh tn to 1.1.2 Khái niệm thuật toán đáp án khơng u cầu tìm cách chi tiết để tìm đáp số đó), giải tốn Tin học việc tìm lời giải cụ thể, tường minh để đưa output oa nl w toán dựa input cho Việc cách tìm output tốn gọi thuật tốn Có nhiều cách phát biểu khái niệm thuật toán Dưới cách phát d a lu biểu chọn để đưa vào sách giáo khoa Tin học phổ thông a nv Khái niệm thuật toán: Thuật toán dãy hữu hạn thao tác u nf xếp theo trình tự định để sau thực dãy thao tác đó, từ ll input ta có output cần tìm [2] m Ví dụ 1: Thuật tốn tơ màu đồ thị z gm @ - Input: đồ thị G = (V, E) tz là: “giải thuật” n oi Trong lĩnh vực khoa học máy tính, cụm từ “thuật tốn” đơi cịn gọi - Output: đồ thị G = (V, E) có đỉnh gán màu l m mơ tả thuật tốn dạng liệt kê bước: co Thuật tốn: Có nhiều cách để mơ tả thuật tốn khác Dưới cách an Lu n va ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si Bước 1: Lập danh sách đỉnh đồ thị E’:= [v1, v2, …,vn] xếp theo thứ tự bậc giảm dần: d(v1) d(v2) … d(vn) Đặt i := 1; Bước 2: Tô màu i cho đỉnh danh sách Duyệt đỉnh tô màu i cho đỉnh không kề đỉnh tô màu i Bước 3: Nếu tất đỉnh tơ màu kết thúc, đồ thị tô i màu Ngược lại, chuyển sang bước 4; Bước 4: Loại khỏi E‟ đỉnh tô màu Sắp xếp lại đỉnh E‟ theo thứ tự bậc giảm dần a lu Đặt i := i +1 quay lại bước n n va 1.2 Yêu cầu thuật tốn Tính xác định: Các bước thuật tốn phải trình bày rõ ràng, mạch p ie gh tn to Thuật toán phải đảm bảo yêu cầu sau [2], [4] lạc, đảm bảo cho người đọc hiểu theo nghĩa Tính khả thi: Thuật tốn phải thực được, nghĩa ta sử dụng oa nl w máy tính kết hợp ngơn ngữ lập trình để thể thuật tốn hay kiểm tra thuật tốn giấy bút (cịn gọi Test) d a lu Tính dừng: Nếu liệu vào thỏa mãn điều kiện đầu vào thuật toán phải a nv kết thúc cho kết sau số hữu hạn bước u nf Tính xác (tính đắn): Thuật tốn phải cho kết xác ll thể đắn sở toán học m z 1.3 Thể thuật toán tz chạy thời gian nhanh n oi Tính tối ưu: Thuật tốn phải có chi phí khơng gian nhớ m  Sử dụng ngơn ngữ lập trình co  Sử dụng lưu đồ (sơ đồ khối) l  Sử dụng liệt kê bước gm @ Thuật toán thể cách sau an Lu n va ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 1.4 Độ phức tạp thuật toán 1.4.1 Chi phí phải trả cho q trình tính tốn Chi phí phải trả cho q trình tính tốn bao gồm chi phí khơng gian (bộ nhớ - số nhớ cần sử dụng q trình tính tốn) chi phí thời gian (thời gian cần sử dụng cho q trình tính tốn) Nếu cho thuật toán A Thuật toán thực liệu e  Thuật toán phải trả giá: giá không gian LA(e), giá thời gian TA(e), e liệu vào Ví dụ 2: Xét thuật tốn A, “Tìm số lớn dãy số” a lu Begin n n va Max := x1; tn to For i := to n p ie gh If max < xi then max := xi ; End oa nl w Thực A hai liệu khác nhau: + Bộ liệu e1 = {0, 4, 9, 5, 7, 6}: d a lu Khi LA(e1) = (dữ liệu vào) + (biến trung gian) = a nv TA(e1) = (thời gian để thực tất phép tính bản) u nf + Bộ liệu e2 = {3, 4, 6, 7, 9, 10, 12, 15}: ll tz n oi TA(e2) = 15 m LA(e2) = 11 Khi ta có khái niệm chi phí phải trả trường hợp sau: z gm @  Chi phí phải trả trường hợp xấu nhất: l - Chi phí xấu nhớ: LA(n) = Max {LA(e) | e ≤ n} an Lu  Chi phí phải trả trung bình: m co - Chi phí xấu thời gian: TA(n) = Max {TA(e) | e ≤ n} n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Là tổng số chi phí khác ứng với số liệu chia cho tổng số số số liệu  Chi phí phải trả tiệm cận: Đó biểu thức biểu diễn tốc độ tăng chi phí thực tế phải trả Nó có gía trị tiệm cận với chi phí thực tế  Nhận xét: Ngày phát triển không ngừng khoa học cơng nghệ kỹ thuật điện tử phí nhớ khơng cịn vấn đề cần thiết phải bàn tới mà ta quan tâm tới chi phí phải trả thời gian thực giải thuật Từ ta xét đến thời gian thực giải thuật T(n), độ phức tạp thuật a lu toán n n va Sau việc phân tích thời gian thực giải thuật, tiêu tn to chuẩn quan trọng để đánh giá hiệu lực giải thuật vốn hay đề cập tới 1.4.2 Phân tích thời gian thực giải thuật p ie gh Với tốn, khơng có giải thuật Chọn giải thuật đưa tới kết nhanh đòi hỏi thực tế Nhưng vào đâu để nói giải oa nl w thuật nhanh giải thuật kia? Có thể thấy ngay: thời gian thực giải thuật, (hay chương trình thể d a lu giải thuật đó) phụ thuộc vào nhiều yếu tố Một yếu tố cần ý trước a nv tiên kích thước liệu đưa vào Chẳng hạn thời gian xếp dãy số u nf phải chịu ảnh hưởng số lượng số thuộc dãy số Nếu gọi n số lượng ll (kích thước liệu vào) thời gian thực T giải thuật phải m n oi biểu diễn hàm n: T(n) tz Các kiểu lệnh tốc độ xử lý máy tính, ngơn ngữ viết chương trình z chương trình dịch ngơn ngữ ảnh hưởng tới thời gian thực hiện; gm @ yếu tố không đồng với loại máy cài đặt giải thuật, khơng l thể đưa chúng vào xác lập T(n) Điều có nghĩa T(n) khơng thể biểu co diễn thành đơn vị thời gian giây, phút Tuy nhiên, khơng phải m mà khơng thể so sánh giải thuật mặt tốc độ Nếu thời gian thực Lu an giải thuật T1(n) = c.n2 thời gian thực giải thuật khác n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an T2(n) = k.n (với c k số đó), n lớn, thời gian thực giải thuật T2 rõ ràng so với thời gian thực giải thuật T1 Như vậy, nói thời gian thực giải thuật T(n) tỉ lệ với n2 hay tỉ lệ với n cho ta ý niệm tốc độ thực giải thuật n lớn (với n nhỏ việc xét T(n) khơng có ý nghĩa) Cách đánh giá thời gian thực giải thuật độc lập với máy tính yếu tố liên quan với máy dẫn tới khái niệm cấp độ lớn thời gian thực giải thuật hay gọi độ phức tạp tính tốn giải thuật 1.4.3 Độ phức tạp thuật toán Nếu thời gian thực giải thuật T(n) = c.n2 (với c số) ta a lu nói: Độ phức tạp tính tốn giải thuật có cấp n2 (hay cấp độ lớn – tốc độ n T(n) = O(n2) (kí hiệu chữ O lớn) Một cách tổng quát định nghĩa: n va tăng – thời gian thực giải thuật n2) ký hiệu là: tn to Một hàm f(n) xác định O(g(n)) p ie gh f(n) = O(g(n)) gọi có cấp g(n) tồn số c n0 cho f(n) ≤ c.g(n) n ≥ n0 nghĩa f(n) bị chặn số nhân với g(n), oa nl w với giá trị n từ điểm Thơng thường hàm thể độ phức tạp tính tốn giải thuật có dạng: O(log2n), O(n), O(nlog2n), O(n2), O(n3), O(2n), d a lu O(n!), O(nn) a nv O(g(n)) gọi độ phức tạp tiệm cận hàm f(n) u nf Dưới số hàm số hay dùng để ký hiệu độ phức tạp tính tốn ll bảng giá trị chúng để tiện theo dõi tăng hàm theo đối số n m n n2 nlog2n 1 2 tz n oi log2n 16 24 64 16 64 256 32 160 1024 n3 2n 64 16 512 256 4096 65536 z m co l gm @ 32768 2.147.483.648 an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Các hàm 2n, nn gọi hàm loại mũ, ngồi cịn có hàm n! số hàm khác có độ phức tạp lớn hàm mũ Một giải thuật mà thời gian thực có cấp hàm loại mũ tốc độ chậm Các n3, n2, nlog2n, log2n gọi hàm loại đa thức Giải thuật với thời gian thực có cấp hàm đa thức thường hiệu chấp nhận Ví dụ 3: Tính giá trị đa thức P(x) = anxn+an-1xn-1+ +a1x+a0 với a0, a1, ,an, x nhập từ bàn phím Thuật toán 1: a lu Input n, ao, a1, a2, , an, x; n S := ao; va for i := to n n tn to begin p := 1; p ie gh for j := to i p := p*x; S:= S + ai*p; oa nl w end; Output s; d a lu a nv Với giá trị i vòng lặp 3, vòng lặp 3.2 thực i vòng lặp nên n( n  1) lần câu lệnh sau ll u nf n = i thực đủ n vòng lặp Vậy vòng lặp thực m nên thời gian tính tốn tỉ lệ thuận với n2 n oi Vậy độ phức tạp tính tốn thuật tốn O(n2) tz Thuật tốn 2: Vì xn = x*xn-1 nên tận dụng kết lần tính trước cho lần z tính sau: m co l for i := to n gm S := ao; p:=1; @ Input n, ao, a1, a2, , an, x; an p := p* x; Lu begin n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 10 S := s + p; end; Output S; Hai lệnh có độ phức tạp tính tốn O(1) Vòng lặp cần thực n lần hai thao tác tính s p Vậy số lần thực lệnh 2n Do vậy, độ phức tạp tính tốn thuật tốn O(n) 1.4.4 Các qui tắc xác định độ phức tạp tính tốn giải thuật Xác định độ phức tạp tính tốn giải thuật dẫn tới toán phức tạp Tuy nhiên, thực tế, số giải thuật ta a lu phân tích số quy tắc đơn giản [2], [4]: n n va - Quy tắc tổng tn to Giả sử T1(n) T2(n) thời gian thực đoạn chương trình P1 P2 mà T1(n) = O(f(n)); T2(n) = O(g(n)) thời gian thực P1 P2 là: p ie gh T1(n) + T2(n) = O(max(f(n), g(n))) Ví dụ, chương trình có bước thực mà thời gian thực oa nl w bước O(n2), O(n3) O(log2n) thời gian thực bước đầu O(max(n2, n3)) = O(n3) d a lu Một ứng dụng khác quy tắc g(n) ≤ f(n) với n ≥ no u nf - Quy tắc nhân a nv O(f(n) + g(n)) O(f(n)) Chẳng hạn: O(n4+n2) = O(n4) O(n+log2n) = O(n) ll Nếu tương ứng với P1 P2 T1(n) = O(f(n)); T2(n) = O(g(n)) thời gian m n oi thực P1 P2 lồng là: T1(n).T2(n) = O(f(n).g(n)) đánh giá O(1) tz Ví dụ, câu lệnh gán: x := x+1 có thời gian thực c (hằng số) nên z Câu lệnh: for i := to n co l for j := to n x := x+1; gm @ Câu lệnh: for i := to n x := x+1; có thời gian thực O(n.1)=O(n) m có thời gian thực đánh giá là: O(n.n) = O(n2) Có thể suy an Lu O(c.f(n)) = O(f(n)) chẳng hạn O(n2/2) = O(n2) n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 65 b Giải thuật Áp dụng tư tưởng thuật tốn Dijkstra tìm cách tốt (tải trọng cho phép (TTCP) lớn nhất) từ đến N Với cặp đỉnh I, J, ký hiệu C[I,J] = tải trọng cho phép có cạnh (I,J) = khơng có cạnh (I,J) Với đỉnh I, ký hiệu D[I] TTCP từ Các D[I] khởi tạo = trừ D[1] cho lớn tùy ý Thuật tốn có hai pha - Pha Giả sử Last đỉnh vừa có đường tốt từ đến, với đỉnh I chưa có đường tốt từ đến, so sánh TTCP đường cũ với TTCP đường từ đến I vịng qua Last, D[I] then begin h[M] := h[i]; tt := tt+a[h[i]]; inc(M); if M > N then exit; end; d oa nl w a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 72 a lu n n va p ie gh tn to end; (* -Xep cac viec lai -*) Procedure XepTiep; var i: integer; begin for i := to N if id[i] > then begin h[M] := id[i]; inc(M); end; end; (* Ghi ket qua *) Procedure GhiTep; var i: integer; begin assign(f, fo); rewrite(f); for i := to N writeln(f,h[i]); writeln(f, 'Tong so tien thuong thu duoc:', tt); close(f); end; BEGIN Doc; InitID; IDQuickSort(1,n); XepViec; DonViec; XepTiep; GhiTep; END 3.3 Bài toán đƣờng ngắn d oa nl w Program DUONG_DI; Uses Crt; Const Max=50; Fi = 'DDTOIUU.INP'; Fo = 'DDTOIUU.OUT'; Var A,C : Array[1 Max,1 Max] of Integer; N, P, Q,i, j, k : Integer; F : Text; { -} Procedure INPUT; Begin Assign(F,Fi); Reset(F); Readln(F,N); Fillchar(A,sizeof(A),0); For i:=1 to N begin For j:=1 to N Read(F,A[i,j]); Readln(F); end; Readln(F,P,Q); Close(F); End; { -} Procedure XDduong(i,j:Integer); Begin If C[i,j]=0 Then Write(' > ',j) Else Begin XDduong(i,C[i,j]); a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 73 XDduong(C[i,j],j); End; a lu n n va p ie gh tn to End; { -} Procedure Output; Begin Assign(f,fo); Rewrite(f); If A[P,Q]=0 Then begin Writeln('Khong co duong di tu ',P,' den ',Q); Writeln(f,'Khong co duong di tu ',P,' den ',Q); close(f); end else begin Writeln('Duong di ngan nhat tu ',P,' den ', Q ,' dai ',A[P,Q]) ; Writeln(f,'Duong di ngan nhat tu',P,' den',Q,' dai ',A[P,Q]) ; Write(P); XDduong(P,Q); Close(f); end; End; { -} Procedure Process; Begin Clrscr; For k:=1 to N For i:=1 to N If A[i,k] >0 Then For j:=1 To N If (A[j,k] >0) And (ij) Then If (A[i,j]=0) or (A[i,j]>A[i,k]+A[k,j]) Then Begin A[i,j]:=A[i,k]+A[k,j]; C[i,j]:=k; End; End; { -} BEGIN Input; Process; Output; Readln; END d oa nl w a nv a lu ll u nf m tz n oi z gm @ = 'Daydien.out'; an Lu fo m co Program MAC_DAY_DIEN; Uses crt; Const fi = 'Daydien.inp'; nm = 501; mm = 100000000; l 3.4 Bài toán mắc dây điện n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 74 a lu n n va p ie gh tn to Type xyz = Record x,y :real; z : Integer; end; Var a : Array[1 nm]of xyz; i, j, n, vti,vtj : Integer; d, min,t : Real; f : Text; { -} Function kt(x,y:real):boolean; begin for j:=1 to i-1 if (a[j].x=x)and(a[j].y=y)then begin kt:=false; exit; end; kt:=true; end; { -} Procedure nhap1; begin randomize; write ('Vao n='); readln(n); assign(f,fi); rewrite(f); writeln(f,n); for i:=1 to n Repeat a[i].x:=random(10*n); a[i].y:=random(10*n); a[i].z:=random(2); Until kt(a[i].x,a[i].y); for i:=1 to n writeln(f,a[i].x:0:0,' ',a[i].y:0:0,' ',a[i].z); close(f); end; { } Procedure nhap; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n begin readln(f,a[i].x,a[i].y,a[i].z); end; close(f); end; Function kc(i,j:integer):real; begin kc:=1.0*sqrt(sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y)); end; { -} Procedure xuly; d oa nl w a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 75 a lu n n va p ie gh tn to begin d:=0; Repeat min:=mm; for i:=1 to n for j:=1 to n if ((a[i].z=0)and(a[j].z=1))or((a[i].z=1)and(a[j].z=0))then begin t:=kc(i,j); if t 0) and (c[i,j] > c[i-1,j-down[i]] + ) then begin c[i,j] := c[i-1,j-down[i]] + 1; flip[i,j] := true; end; end; end; { -} Procedure writef; var i, j, min, lj, t : longint; tmp : array[1 nmax] of longint; begin := inf; for j := to n * 10 if (c[n,j] < inf) and (abs(sum - j - j ) < min) then begin := abs(sum - j - j); lj := j; end; assign(f,fo); rewrite(f); write(f,min,' '); d oa nl w a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 77 a lu n n va p ie gh tn to t := 0; j := lj; i := n; while j > begin if flip[i,j] = true then begin inc(t); tmp[t] := i; j := j - down[i]; end else j := j-up[i]; i := i-1; end; writeln(f,t); for i:= t downto write(f,tmp[i], ' '); close(f); end; { -} Begin Readf; Calc; Writef; End 3.6 Bài tốn mạng giao thơng oa nl w d Program MANG_GIAO_THONG; Const fi = 'TRANSPO.INP'; Fo = 'TRANSPO.OUT'; Type link = ^dinh; dinh = Record x,p : Word; next : Link; end; mm = Array[1 1000] of word; Var A : Array[1 1000] of link; ht,q,truoc : mm; n,m,min,max,ds,s : Word; p : Pointer; f: text; t : Char; { -} Procedure add(i,j,p:word); Var z:link; Begin new(z); z^.x:=j; z^.p:=p; z^.next:=a[i]; a[i]:=z; end; a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn ac th Số hoá Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 78 a lu n n va p ie gh tn to Procedure nhap; Var i,j,k,p :Word; begin assign(f,fi);reset(f); readln(f,n,m); for i:=1 to n a[i]:=nil; min:=65535;max:=0; for k:=1 to m begin read(f,i,j,p); if min>p then min:=p; if max

Ngày đăng: 24/07/2023, 03:32