You are on page 1of 8
CAP DIEM GAN NH I. Phat biéu bai toan Bai toan: Cho N diém trén mat ming toa d9, tim khoang cach ngin nhét gitta hai diém bat ky. Il, Thuat toan Bai toan nay ta c6 thé dé dang thye hign thuat todn bruteforce, ta xét tat ca cc c&p diém va chon cap cé khoang cach ngan nhat gitta chang. Thuat todn cé 49 phitc tap O(n). Ta c6 mét sé thuat todn t6t hon nhw sa 1, Thuit toan chia aé tri a, Y tuéng thuat toan Thuat toan chia dé tri gidi quyét bai todn nay thye hién nhu sau: ° Sip ic diém da cho theo thir ty tir trai sang phai. Chia tap diém thanh hai tap. © Thuc hién thao tac d& quy, tim cp diém gan nhat trong hai tap con, tra lai gid trj LA khoang cach ngdn nhat trong tip dé. © Goi 6 li khoang cdch ngdn nht, trong hai khoang cach ngan nhat trong hai tip con. Ta chi quan tam t6i cdc cp c6 khoang cdch nhé hon 6. b>Pe Pd oa teal >Pe ‘om _ 3 ta chia d6i tap, dé quy quay lui dé tinh khoang cach gan nhat trong hai tp con, chon gia tri bé nhat trong hai khoang cach. * Ding mang strip dé tron hai phia theo tht ty tang dan y, loc lay nhiing phan tir c6 chénh Ich y nhé hon gid tri min dang 6. (d). Chit y sau khi thye hign, ta thye hign sip xép trdn hai phia cia doan theo thé ty ting din y lu6n, a phite tap O(n), khéng sir dung thuft todn si xép khac. * V6i cée phan tir trong ctta 36, véi mi diém, xét cde diém lan cn (sau Khi da sp xép) c6 chénh Iéch y nhé hon d. (86 phan tir nay < 6) Dudéi day la chong trinh cai dat tinh cdp diém gén nhat theo thudt toan chia dé tri: Input: © Dang dau tién 1a sé N — sé lugng diém (n < 2.105) © N dong tiép theo, mdi dong chia toa d6 mét diém theo thir tu. Output: Khoang cach nhé nhat can tim, chinh xée 5 chit sé phan thép phan. CLOSESTPAIR.INP CLOSESTPAIR.OUT 3 1.00000 22 5 Chucong trinh: Di Hoe #include #define sz(x) int(x.size()) #define MIN(x,y) if (x MOD) x - MOD #define pii pair #define X fir: #define Y second using namespace std; pii almaxn], strip{maxn]; double ans = 1610; double Distance (pii P1, pii P2) double xX = P1.X - P2.X; double YY = P1.¥ - P2.¥; return sqrt (XX*XX + YY*YY); double kmin for (int i= 0 itt) for (int j = i#l; j < ny i++) kmin = min(kmin, Distance (P(i], return kmin; bool compare¥(pii pl, pii p2) en (pl.¥ < p2.¥ II (p p2.¥ G& pl.X < p2.X)); double stripClosest (pii strip[], int n, double a) double kmin = d; for (int i= 0; i < ny ti) for (int j = itl; j > a; (int i t£("80.5£", Closest (a,n)); en 0; ¢. Banh gid Vigc tinh trong cita sé 26 va sp xép tron véi mot doan d6 dain (khong tinh hai doan con) cé d6 phite tap O(n). Sé Lin Lip thi tue tinh 6 18i goi khéng qua log, n lan nén ting 46 phite tap thuat toan 1a O(nlgn). 2. Thudt toan sweep line a. Y twéng thuat ton. Sap xép toa d6 cdc diém theo chiéu x. it ta dang xét t6i diém p va gid tri nhé nhit gitta hai diém trong cac diém bén trai p 1a d. RO rang ta chi gitt ai nhiing diém c6 khong cach 161 toa d6 x eiia p 18.5 < d (hinh trai) © Vi diém p ta chi cin xét nhig diém cé chénh léch ca x va y so voi p khong qué d. (hinh bén phai). Dé thay, vi d 1a khoang cach ngan nhat gitta 2 diém trong tap diém bén trai da xét nén chac chan co khéng qua 4 diém nhu vay. b. Cai agt Sir dyng thém cu trite set dé luru trit céc phan tir trong “vét quét” hay néi cach khdc 1a cde phan tir c6 toa d6 x c6 khoang cach t6i toa d6 x cua p dang xét nhé hon gid tri d hién tai. Dong thoi dé rang thém, xéa va tim kiém cdc phan tt trong pham vi p.y—d > p.y +d. Duéi day la chong trinh cai dat tinh cap diém gan nhat theo thuat todn sweepline: 77dai Ca Di Hoe #include define sz(x) int (x.size() define MIN(x,y) if (x MOD) x -= MOD define pii pair define Y first #define X second using namespace std; pair pii a[maxn]; set S; double Distance (pii P1, pii P2) { double XX = P1.X - 2.x; double YY return sqrt (XX#XX + YY*YY); ) bool compareX(pii pl, pii p2) { return (pl.X < p2.X || (pl.X == p2.X 6 pl.¥ < p2.¥)) y double Closest (pii a[], int n) { sort(a, atn, compareX); S.insert(a[0]); int left = 0; double ans = lel0; for (int i= 1; i :: iter it = $.lower bound (mp (1.0*py-ans, 1.0*px-ans)); it != S.end() && it->¥ < ans+py; it++) ans = min (ans, Distance(*it, ali])); S.insert (alil); } return ans; ) int main() { ios_base::sync_with stdio(0); ) 2", stdin); > “w", stdout); freopen(Task". i < ny itt) cin >> ali].x >> alil.¥ Closest (a,n)) 7 c. Danh gid diém duge thém vio va xéa di trong Set ding 1 lan (Ign) nén thei gian xir li thém vao va xéa di trén Set la O(n Ign). Véi mdi diém p viée tim vi tri bat dau 6 toa d6 trong pham vi p.y — d (ham lower-bound) mit chi phi théi gian lgn. m dé thuéc hinh chit nhat c6 thé xét luén khéng vugt qua 4. Do vay, tong d6 phire tap dé thuc hién giai thuat 1a O(nlgn). I. Két luan V6i bai todn cap diém gan nhit, ca hai thudt toan chia dé tri va sweepline da trinh bay trén déu c6 49 phite tap li O(nlgn). Vige cai it thuat toan sweepline duge cai dt don gian, ngdn gon hon (khi str dung ng6n ngit C++). Tuy nhién, vé mat thdi gian, thuat todn chia dé qua hon do viée xi ly Set trong C++ t6n nhiéu trj Iai thye hign thoi gian hon Tai li¢u tham khao ron, Ronald L. Rivest, 1. Thomas H.Cormen, Charles E. Lei: Stein, Introduction To Algorithms, Third Edition. 2. Mark de Berg, Otfried Cheong, Mare van Kreveld, Mark Overmars, Computational Geometry Algorithms and Appliacitons, Third Edition.

You might also like