TOÁN HỌC VÀ TIN HỌC

392 4.2K 2
TOÁN HỌC VÀ TIN HỌC

Đ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

TOÁN HỌC VÀ TIN HỌC www.thnt.com.vn Phương pháp phân rã hình học Trong kỳ thi Tin học lập trình, tỉ lệ xuất toán hình học cao Mà lại thường mà học sinh vấp váp, lý sau đây: - Thuật giải khó, không nghĩ - Nghĩ thuật giải, không cài đặt phức tạp - Thuật giải tốt, cài đặt xong, không ổn lỗi nho nhỏ tinh vi khó tránh Trong viết này, xin trình bày phương pháp áp dụng cho lớp lớn toán tin có nội dung hình học: phân rã toán ban đầu ra, đưa vài mô hình thật đơn giản cài đặt cần trình độ trung bình ổn Nội dung phương pháp mà muốn nói bạn là: - Coi góc tập hợp vi phân góc nhỏ liên tiếp (1) - Coi bao hình tập hợp vi phân điểm liên tiếp (2) Tất nhiên từ “vi phân” mang tính hình tượng, tức số vừa đủ lớn góc vi phân, hay điểm vi phân (1) (2) coi Chúng ta đưa vấn đề cụ thể sau phân tích số tin sau đây: Diện tích tam giác (Problem G - The 2004 ACM Asia Programming Contest - Beijing): Cho tam giác vòng dây kín có độ dài biết trước Hãy dùng vòng dây để khoanh vùng kín nằm gọn tam giác cho diện tích phần thu lớn Input: Gồm nhiều test, gồm bốn số dương viết dọ̀ng Ba số độ dài ba cạnh tam giác, số cuối chu vi vòng dây Độ dài cạnh mảnh vườn không 100 Độ dài vòng dây không lớn chu vi tam giác Output: Gồm nhiều dọ̀ng, dọ̀ng ứng với dọ̀ng input, ghi số diện tích lớn được, làm trọ̀n với hai chữ số sau dấu thập phân Ví dụ: Input: 12.0000 23.0000 17.0000 40.0000 84.0000 35.0000 91.0000 210.0000 100.0000 100.0000 100.0000 181.3800 Output: 89.35 1470.00 2618.00 Có thể không khó khăn để nhận thuật giải toán sau: Tìm O giao ba đuờng phân giác tam giác Ta gọi R bán kính đường tròn tâm O (bạn coi có R rồi) Phần diện tích tối ưu phần mà vừa nằm đường tròn vừa nằm tam giác, đồng thời chu vi phần diện tích L chu vi vòng dây Còn để tìm R ta chặt nhị phân Chúng ta không bàn nhiều thuật giải toán, coi bạn biết Vậy vấn đề bạn cài đặt nào? Quả thật khó để hoàn thành thời gian cho phép ta cài đặt cách túy thông thường Như thời gian mà hiệu đạt thấp Sở dĩ khó cài đặt ứng với R ta có nhiều trường hợp xảy vị trí tương đối hình tròn (O) tam giác ABC Số điểm giao không có, có một, có hai, , có sáu giao điểm Các giao điểm lại không xếp theo quy luật nên lúc thực tính toán lại nảy sinh nhiều vấn đề phức tạp, ví dụ cạnh có giao điểm? Điều phải xác định rõ ràng, không tính chu vi diện tích hình cần thiết Tính sơ sơ số trường hợp cần xét lớn trường hợp đủ rắc rối ta giải cách nhanh gọn xác (Tôi làm thử rồi) Vậy thi quan trọng phòng thi liệu bạn có đủ bình tĩnh để làm cách quy trên? Tôi xin phát biểu phương án cách phân rã toán này, để biến thành toán đơn giản dễ cài đặt, từ tổng quát hóa lên phương án tuyệt vời: Đầu tiên phải thấy khó xác định rõ giao điểm cần thiết Gọi (T) hình tạo (0) ABC ứng với R biết trước Rõ ràng (T) hình gồm có phần đoạn thẳng (thuộc tam giác ABC) phần đường tròn (thuộc (O) Bây ta không quan niệm (T) nữa, ta coi gần đa giác (T') gồm nhiều điểm Mi, với ≤ i ≤ P, với P bạn khai báo const đầu chương trình, P lớn tốt, không nên lớn chương trình chạy lâu Xác định điểm Mi: Ta chia góc 3600 O làm P góc Ứng với góc thứ i ta vẽ tia Oi, sau ta xác định xem tia Oi cắt hình tròn trước hay cắt tam giác trước Michính giao điểm gần O hai giao điểm Như thay phải tính toán với miền (T) vô rắc rối, ta coi đa giác (T') gồm P đỉnh xác định điểm Mi dễ dàng trên, công việc lại thật vô đơn giản Nhưng vấn đề sai số? Ta khắc phục thủ thuật sau: Đặt M0 = MP MP+1 = M1 Xác định điểm i mà góc Mi-1, Mi, Mi+1 lớn Đó sáu giao điểm gần thực (T) Bây ta tính toán trực tiếp (T) cách dùng công thức xác cho cung tròn đoạn thẳng vấn đề sai số coi không Bạn thấy đó, toán, ta quan niệm khác chút công việc giảm tải nhiều lần Không phải tốt mặt lý thuyết tốt với ta, kỳ thi Điều quan trọng tính hiệu thực tế chương trình Việc phân rã hình (T) thành đa giác (T') điều thường gặp nhiều nơi, thủ thuật tách để ghép lại độc đáo Thủ thuật toán thường gặp phải tính tổng chuỗi số S, hay chuỗi hàm f Khi người ta hay vi phân vế trái, tính toán hồi cho thật gọn lại tích phân vế trái Nếu bạn để ý, chất điều mà tin sử dụng, cho dù bị “tin hóa” tham số P Nhưng bạn yên tâm, tuyệt đối cả, P đủ lớn (khoảng vài nghìn) kết tối ưu Bài tin áp dụng (1) (2) để giải hiệu vấn đề Có lẽ bạn chưa hình dung phương pháp sao? Chúng bàn tiếp tiếp theo: Chocolate Nhà máy sản xuất bánh kẹo Fishburg sản xuất loại bánh chocolate hình đa giác lồi Kiđy Carlson mua họ muốn cắt làm hai phần với nhát cắt có độ dài nhỏ Viết chương trình tìm độ dài nhỏ để cắt miếng bánh sử dụng bạn cho biết miếng bánh Tổng số đỉnh N số nguyên (3 ≤ N ≤ 50) Tọa độ đỉnh tập hợp cặp số thực -100 ≤ xi, yi≤100 Input: Dòng đầu input file gồm số N - số lượng đỉnh đa giác N dòng sau gồm toạ độ đỉnh liên tiếp đa giác Output: gồm độ dài nhỏ đường cắt xác đến 0,0001 Ví dụ: Input: 00 03 43 40 Output: Thuật giải tốt theo không phù hợp để bàn lõi toán nhiều Nói chung vừa nghĩ thuật giải tốt hẳn cài đặt xong phải vất vả nhiều mà chẳng biết liệu có kiểm soát không Vậy bàn cách phân rã cho đơn giản Cách đơn giản nghĩ coi đa giác tập hợp điểm rời rạc, sau ta lấy hai số điểm đó, kiểm tra xem đoạn thẳng nối hai điểm có chia đôi đa giác hay không, cập nhật kết Cải tiến cách chọn điểm thôi, điểm lại chặt nhị phân Cách tư tưởng phân rã tốt thực tế vấn đề Điều kiện tọa độ đa giác có trị tuyệt đối không 100 có test mà chu vi lớn (có thể lên tới hàng vạn) Mà theo cách phân rã độ sai số tỉ lệ theo chu vi đa giác Nếu chia đa giác thành P điểm, với độ phức tạp cách vượt Plog(P), rõ ràng muốn chạy nhanh P tới hàng vạn, khả xác tới nhiều chữ số sau dấu thập phân chu vi đa giác lớn điều không tưởng Vậy (2) không dùng Cách thứ hai khắc phục nhược điểm trên, ta phân rã góc thành vô số góc nhỏ vi phân Giả sử số góc P, góc có giá trị dP = 3600/P Chắc hẳn đọc đề lần đầu tưởng tượng đa giác đứng yên, đường thẳng chia đôi đa giác xiên xiên Ta tưởng tượng ngược lại chút sau: Đường thẳng chia đôi đa giác nằm ngang, tịnh tiến lên xuống, đa giác xoay Về chất thay đổi, giúp ích nhiều cho ta Tóm lại thuật giải sau: - Xoay đa giác góc dP - Chặt nhị phân để tịnh tiến đường thẳng nằm ngang cho chia đôi đa giác Nếu không chia vừa cách chặt nhị phân ta tịnh tiến đường thẳng lên xuống đến - Sau chia đôi đa giác, cập nhật lại độ dài tốt nhát cắt Sau xoay P lần, lần góc dP đa giác quay vị trí ban đầu Nếu có bạn chưa biết công thức xoay hình, xin viết đây: xmới = xcũ.cos(alpha) – ycũ.sin(alpha) ymới = xcũ.sin(alpha) + y cũ.cos(alpha) Trong alpha góc quay Tất nhiên P lớn tốt Đối với để P = 35000/N chạy hết tất test Đó kết việc áp dụng tính phân rã thứ (1) Kết luận: Có nhiều phương pháp để giải toán tin, chọn cách làm tùy bạn Một lời khuyên không cũ người trước tất là: Không hẳn lựa chọn ta lấy tốt nhất, chọn phù hợp bạn Trong phòng thi tâm lý ổn định điều quan trọng để dẫn tới thành công Nhưng tâm lý ổn bạn làm việc sức mình? Nghệ thuật phân rã toán tốt trường, điều chắn Nhưng vài trường hợp cụ thể đó, phù hợp với bạn đấy! Và sau tập luyện tập dành cho bạn Bricks - 2002-2003 ACM Northeastern European Regional Programming Contest (Đề tóm tắt) Có viên gạch kích thước A × B × C inches Trên sàn nhà có lỗ kích thước D × E inches, coi lỗ sâu Hỏi liệu xoay sở để nhét viên gạch vào lỗ hay không? Input: Gồm số A, B, C, D, E, số không nhỏ 1, không lớn 10 có nhiều chữ số sau dấu thập phân Output: Ghi “YES” nhét gạch vào lỗ, ngược lại ghi “NO” Ví dụ: Input: 2.0 1.5 1.4 1.0 Output: NO Input: 2.0 1.5 1.5 1.0 Output: YES 2.Xác định trọng tâm hình đa giác Chắc có lần công việc hàng ngày, gặp toán sau: “Trong mặt phẳng, cho hình đa giác với toạ độ đỉnh số thực Vấn đề đặt xác định trọng tâm hình đa giác đó” Để làm việc đó, sau xin tóm tắt lại lý thuyết đặc trưng hình học mặt cắt ngang: Mômen tĩnh hình phẳng F hai trục Ox Oy mặt phẳng hình định nghĩa biểu thức sau đây: Trục trung tâm: Mômen tĩnh hình trục không trục gọi trục trung tâm Trọng tâm: Giao điểm hai trục trung tâm gọi trọng tâm mặt cắt Trọng tâm hình phẳng Quan hệ mômen tĩnh hình trục khoảng cách từ trọng tâm hình đến trục a) Giả sử có trục x trục trung tâm xc (C trọng tâm mặt cắt) song song với trục x Ta có y = yc + y0 Thay vào công thức định nghĩa, ta được: Hay Theo định nghĩa số hạng thứ hai vế phải không, đó: Sx = ycF Hay Tương tự ta tính được: Như từ công thức trên, ta tính mômen tĩnh hình biết trọng tâm ngược lại xác định trọng tâm biết mômen tĩnh hình mà qua phép tính tích phân b) Từ ta có công thức tính trọng tâm hình ghép biết trọng tâm hình thành phần Nhận xét: Từ công thức ta tính trọng tâm hình đa giác dựa vào tam giác thành phần Công thức tính trọng tâm G, diện tích F hình tam giác biết toạ độ đỉnh A (XA, YA), B (XB, YB) C (XC, YC) Dựa vào nhận xét xin giới thiệu chương trình tính trọng tâm hình đa giác lồi Dữ liệu vào n (n > 2) điểm (trong mặt phẳng Oxy) – toạ độ n đỉnh liên tiếp đa giác lồi Ta chia đa giác lồi thành n-2 tam giác với đỉnh tam giác đỉnh thứ 1, đỉnh thứ i đỉnh thứ i + (2 ≤ i ≤ n – 1) Dữ liệu vào n (n > 2) điểm (trong mặt phẳng Oxy) – toạ độ n đỉnh liên tiếp đa giác lồi Ta chia đa giác lồi thành n-2 tam giác với đỉnh tam giác đỉnh thứ 1, đỉnh thứ i đỉnh thứ i + (2 ≤ i ≤ n – 1) Từ ta xây dựng chương trình, sau toàn văn chương trình: {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+} {$M 16384,0,655360} Program Xac_dinh_trong_tam ; Const Maxn = 1000 ; FileInp = 'TTAM.INP' ; FileOut = 'TTAM.Out' ; = ; {So chu so thap phan can} Type Toado = Record x, y : Real ; End ; Mang = Array [1 Maxn] of Toado ; Var A : Mang ; XG, YG : Real ; tongx, tongy, tong : Real ; N : Integer ; Procedure Docfile ; Var f : Text ; i : Integer ; Begin Assign (f, FileInp) ; {$I-} Reset (f) ; {$I+} If IOResult then Halt ; Readln (f, N) ; FillChar (A, Sizeof (A), 0) ; For i := to N Readln (f, A [i].x, A [i].y) ; Close (f) ; tongx := ; tongy := ; tong := ; End ; Function XAG (AA, BB, CC : Toado) : Real ; Begin XAG := (AA.x + BB.x + CC.x) / ; End ; Function YAG (AA, BB, CC : Toado) : Real ; Begin YAG := (AA.y + BB.y + CC.y) / ; End ; Function SA (AA, BB, CC : Toado) : Real ; Var tam : Real ; Begin tam := (AA.x - BB.x) * (AA.y + BB.y) + (BB.x - CC.x) * (BB.y + CC.y) + (CC.x - AA.x) * (CC.y + AA.y) ; SA := Abs (tam) / ; End ; Procedure Xuly ; Var i : Integer ; tamx, tamy, tamS : Real ; Begin For i := to n - else begin d:=j2-i2+1; move(a[i1],b[1],d); move(a[i2],a[i1],d); move(b[1],a[i2],d); change(i1+d,j1,i2,j2); end; end; {of procedure} Đối với Test lớn, chương trình làm việc hiệu nhiều so với chương trình theo thuật toán (A'B')' Hầu hết Test lớn chí Test có độ phức tạp cao tốn 0.0000 giây máy 300 Mhz Nhược điểm chương trình gây lỗi tràn Stack Bạn giải toán cách tối ưu cách phối hợp hai thuật toán, cách phối hợp tuỳ vào sáng tạo riêng bạn Nhưng kiểm tra xem chương trình có đạt tiêu chuẩn không Chúc bạn thành công 55 Nhìn lưới ô vuông mắt Tin học nào? Tác giả: Trần Minh Quang Trong kỳ thi học Tin học, dạng toán lưới ô vuông chiếm tỉ lệ nhiều Cách đề thường lắt léo khiến phương hướng dẫn đến "mù tịt" thuật giải Vì việc tập nhìn nhận lưới ô vuông thật đáng cho bỏ thời gian để nghiên cứu Có điều chắn rằng, chuyên gia ngành nghề khác nhìn lưới ô vuông "con mắt" khác nhau: Một nhà toán học nhìn mặt phẳng toạ độ Đề Các nhà địa lý lại xem phần trải thẳng đồ mà đường ngang dọc vĩ tuyến kinh tuyến !!! Còn mắt - " chuyên gia Tin học", thấy gì? Vâng, đồ thị nên !!? Ta điểm qua số cách nhìn chúng I Là mảng hai chiều MxN Rõ ràng cách nhìn "toán học" Hầu hết toán sử dụng cách nhìn Lấy ví dụ đơn giản sau: Ví dụ: Tìm kiếm mẫu Cho hình chữ nhật kích thước MxN chia thành ô vuông mô tả hình 1a đẫy Mỗi ô vuông đánh số liên tiếp cho ô góc bên trái đánh số 1, ô bên phải đánh số ô góc phải đánh số MxN Hình 1b cho thấy lưới ô vuông với số ô sơn đen Xét hình chữ nhật với ô góc trái ô góc trái hình chữ nhật cho góc phải có toạ độ (p,q) Chẳng hạn hình chữ nhật xác định ô phải (2,1) hình chữ nhật cho hình 1b có dạng cho hình 1c Hình chữ nhật xuất vị trí khác hình chữ nhật cho hình 1b (xem hình đây) Bạn cần viết chương trình nhập thông tin hình chữ nhật cho hình chữ nhật nó, sau đưa số lần xuất hình chữ nhật hình chữ nhật cho Bạn không cần tính phép quay hình chữ nhật Lưu ý hình chữ nhật chọn góc trái hình chữ nhật cho Dữ liệu: Từ file văn RPART.INP · Dòng chữ bốn số nguyên M,N (1≤M,N ≤20), p (1 ≤p ≤M) q (1≤ q≤N) · Dòng thứ hai cho biết số lượng ô bôi đen x, (0≤ x≤M,N) Mỗi số x dòng chứa vị trí ô sơn đen (cách đánh số vị trí mô tả hình 1a) Kết quả: Ghi file văn RPART.OUT số lần xuất hình chữ nhật hình chữ nhật cho (tính vị trí ban đầu góc trái nó) Ví dụ: Lời giải toán là: Dùng mảng hai chiều A[1 20,1 20] lưu trạng thái hình chữ nhật tiến hành dò từ trái qua phải, từ xuống để đếm số lượng mẫu xuất (Cần ý việc đổi toạ độ ô đen vào bảng) II Là mảng chiều MxN phần tử Thông thường cách tiếp cận dùng để tránh lãng phí bố nhớ số trường hợp như: liệu dạng bảng chứa nửa bảng III Là đồ thị phía Đây cách nhìn Tin học quan trọng Chúng ta sâu vào cách nhìn kinh nghiệm cho thấy toán khó gặp thực tế thường liên quan đến cách nhìn Vài ví dụ sau cho cách nhìn cụ thể hoá hơn: Ví dụ 1: Cho bảng gồm ô vuông kích thước MxN (M,N ≤100), có số ô đen, lại ô trắng Hãy tô màu tất ô trắng hai màu Xanh Đỏ cho dòng cột ô màu Xanh Đỏ lệch không Quả thực, nhìn nhận toán với mô hình bảng chữ nhật thuật toán hay cho toán Song áp dụng cách nhìn nhận góc độ lý thuyết đồ thị toán trở nên đơn giản giải không khó khăn Ta xây dựng đồ thị hai phía gồn M+N đỉnh mà đỉnh tương ứng với dòng cột bảng cho Các đỉnh phía trái 1, 2, , M tương ứng với dòng thứ nhất, thứ hai, , thứ M Các đỉnh phía phải 1, 2, , N tương ứng với cột thứ nhất, thứ hai, , thứ N Nếu ô (I,J) ô đen ta có cung nối đỉnh thứ I thuộc bên trái với đỉnh thứ J thuộc bên phải Ví dụ ta có bảng sau: đồ thị phía tương ứng là: Lúc này, toán phát biểu lại sau: Hãy tô màu cung đồ thị hai màu Xanh Đỏ cho tô hết tất cung đỉnh đồ thị số cung Xanh Đỏ không Với cách nhìn dạng đồ thị có thuật toán tốt để giải nhờ vào hai nhận xét sau: Nhận xét 1: Nếu xuất phát từ đỉnh bậc lẻ cách theo cung đồ thị, cung qua lần trạng thái "tắc đường" phải xẩy đỉnh bậc lẻ khác (cần ý: số đỉnh bậc lẻ (nếu có) đồ thị phải số chẵn) Nhận xét 2: Nếu xuất phát từ đỉnh bậc chẵn đồ thị đỉnh bậc lẻ cách theo cung đồ thị, cung qua lần trạng thái "tắc đường" phải xảy đỉnh xuất phát (Trạng thái "tắc đường" trạng thái mà đỉnh vừa tới không cung chưa qua) Với hai nhận xét mấu chốt ta có thuật toán để giải toán: Trường hợp 1: Khi đồ thị đỉnh bậc lẻ Chọn đỉnh bậc lẻ để xuất phát Bằng cách qua cung đồ thị mà chưa tô màu, cung qua ta tô xen kẽ hai màu Xanh Đỏ "tắc đường" Trong trường hợp này, đỉnh bậc lẻ kết thúc đường trên, không cung chứa chưa tô, đồng thời đỉnh xuất phát số cung lại chưa tô (nếu có) số chẵn, đỉnh lại đường số cung tô màu Xanh Đỏ Trường hợp 2: Khi đồ thị đỉnh bậc chẵn Trường hợp này, tất cung kề với đỉnh bậc lẻ (nếu có) đồ thị ban đầu tô Chọn đỉnh cung chưa tô chứa đỉnh xuất phát cách theo cung chưa tô đạt trạng thái kết thúc (tại đỉnh xuất phát) Bằng cách tô màu cung xen kẽ đường qua Khi số lượng cung tô màu Xanh Đỏ kề với đỉnh đường Cứ thực cung tô màu ta lời giải toán Như vậy, vừa tiếp cận cách nhìn lưới ô vuông mẻ thú vị Bây ta nhìn nhận toán khác lưới ô vuông mà để giải việc "nhìn" tốt phải phải nắm vững thuật toán tìm luồng cực đại mạng Ví dụ 2: Đề thi học sinh giỏi toàn quốc 1994-1995 Cho bảng chữ nhật kích thước MxN (M,N

Ngày đăng: 20/07/2016, 01:22

Mục lục

  • 1. Phương pháp phân rã hình học

  • 2.Xác định trọng tâm của một hình đa giác bất kỳ

  • Bàn thêm về cặp ghép

  • 3. Một bài toán về bàn cờ

  • Lập trình hiển thị công thức toán học

  • 5.Tính toán trước khi lập trình

  • 6.Hình vuông cũng thú vị lắm chứ

  • 7 .Tim bao loi cua tap diem anh

  • 8.Sắp xếp Topo trong đồ thị có hướng và một số ứng dụng

  • 9 .Ứng dụng lý thuyết Toán để giải các bài toán tin

  • 10.Ứng dụng lý thuyết Toán để giải các bài Tin

  • 11.Trở lại bài toán tìm chữ số tận cùng khác 0 của n!

  • 12. Ứng dụng thuật toán tìm diện tích đa giác để lập trình giải một số bài toánvề hình học

  • 13. Cặp ghép và luồng cực đại trên đồ thị hai phía

  • 14. Một số kỹ thuật tinh chế mã

  • 15. Cặp ghép với số đỉnh rất lớn

  • Tản mạn về số nguyên tố lớn nhất & thuật toán đa thức xác định số nguyêntố

  • 17. Cung được đĩnh nghĩa đệ quy, quy tắc và cách vẽ

  • 18 .Suy diễn tiến - Một giải thuật thú vị

  • 19. Các số Stirling

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

Tài liệu liên quan