Cara mencari titik di antara dua titik. Jarak dari titik ke titik: rumus, contoh, solusi

Pada artikel ini kita akan melihat cara menentukan jarak dari suatu titik ke titik secara teoritis dan menggunakan contoh masalah tertentu. Untuk memulainya, mari kita perkenalkan beberapa definisi.

Yandex.RTB RA-339285-1 Definisi 1

Jarak antar titik adalah panjang ruas yang menghubungkannya, pada skala yang ada. Skala perlu ditetapkan agar memiliki satuan panjang untuk pengukuran. Oleh karena itu, pada dasarnya masalah mencari jarak antar titik diselesaikan dengan menggunakan koordinatnya pada garis koordinat, pada bidang koordinat, atau ruang tiga dimensi.

Data awal: garis koordinat O x dan titik sembarang A yang terletak di atasnya. Setiap titik pada garis mempunyai satu bilangan real: misalkan bilangan tersebut adalah bilangan tertentu untuk titik A x A, itu juga merupakan koordinat titik A.

Secara umum dapat dikatakan bahwa panjang suatu ruas tertentu dinilai dibandingkan dengan suatu ruas yang diambil sebagai satuan panjang pada skala tertentu.

Jika titik A bersesuaian dengan bilangan real bilangan bulat, dengan meletakkan secara berurutan dari titik O ke titik sepanjang garis lurus O A ruas - satuan panjang, kita dapat menentukan panjang ruas O A dari jumlah seluruh ruas satuan yang disisihkan.

Misalnya, titik A sesuai dengan angka 3 - untuk mencapainya dari titik O, Anda perlu memberhentikan tiga unit segmen. Jika titik A memiliki koordinat - 4, segmen satuan disusun dengan cara yang sama, tetapi dalam arah negatif yang berbeda. Jadi, dalam kasus pertama, jarak O A sama dengan 3; dalam kasus kedua O A = 4.

Jika titik A mempunyai bilangan rasional sebagai koordinatnya, maka dari titik asal (titik O) kita memplot bilangan bulat dari segmen satuan, dan kemudian bagian yang diperlukan. Namun secara geometris tidak selalu memungkinkan untuk melakukan pengukuran. Misalnya, sulit untuk memplot pecahan 4 111 pada garis koordinat.

Dengan menggunakan metode di atas, sangat tidak mungkin untuk memplot bilangan irasional pada garis lurus. Misalnya koordinat titik A adalah 11. Dalam hal ini, kita dapat beralih ke abstraksi: jika koordinat titik A yang diberikan lebih besar dari nol, maka O A = x A (angka tersebut diambil sebagai jarak); jika koordinatnya kurang dari nol, maka O A = - x A . Secara umum, pernyataan-pernyataan ini benar untuk sembarang bilangan real x A.

Ringkasnya: jarak dari titik asal ke titik yang berhubungan dengan bilangan real pada garis koordinat adalah:

  • 0 jika titik tersebut berimpit dengan titik asal;
  • x A, jika x A > 0;
  • - x A jika x A< 0 .

Dalam hal ini jelas bahwa panjang ruas itu sendiri tidak boleh negatif, oleh karena itu dengan menggunakan tanda modulus kita tuliskan jarak dari titik O ke titik A dengan koordinat x A: O A = x A

Pernyataan berikut ini benar: jarak dari satu titik ke titik lain akan sama dengan modulus selisih koordinat. Itu. untuk titik A dan B yang terletak pada garis koordinat yang sama untuk setiap lokasi dan mempunyai koordinat yang bersesuaian x A Dan x B: A B = x B - x A .

Data awal: titik A dan B yang terletak pada suatu bidang pada sistem koordinat persegi panjang O x y dengan koordinat yang diberikan: A (x A, y A) dan B (x B, y B).

Mari kita menggambar garis tegak lurus melalui titik A dan B ke sumbu koordinat O x dan O y dan memperoleh titik proyeksi sebagai hasilnya: A x, A y, B x, B y. Berdasarkan lokasi titik A dan B, opsi berikut dapat dilakukan:

Jika titik A dan B berimpit, maka jarak antara keduanya adalah nol;

Jika titik A dan B terletak pada garis lurus yang tegak lurus sumbu O x (sumbu absis), maka titik-titik tersebut berimpit, dan | A B | = | A y Oleh y | . Karena jarak antar titik sama dengan modulus selisih koordinatnya, maka A y B y = y B - y A, dan oleh karena itu, A B = A y B y = y B - y A.

Jika titik A dan B terletak pada garis lurus yang tegak lurus sumbu O y (sumbu ordinat) - analogi paragraf sebelumnya: A B = A x B x = x B - x A

Jika titik A dan B tidak terletak pada garis lurus yang tegak lurus salah satu sumbu koordinat, maka kita mencari jarak antara keduanya dengan menurunkan rumus perhitungan:

Kita melihat bahwa segitiga A B C berbentuk persegi panjang. Dalam hal ini, AC = A x B x dan B C = A y B y. Dengan menggunakan teorema Pythagoras, kita buat persamaan: A B 2 = A C 2 + B C 2 ⇔ A B 2 = A x B x 2 + A y B y 2 , lalu ubah menjadi: A B = A x B x 2 + A y B kamu 2 = x B - x A 2 + kamu B - kamu A 2 = (x B - x A) 2 + (kamu B - kamu A) 2

Mari kita tarik kesimpulan dari hasil yang diperoleh: jarak titik A ke titik B pada bidang ditentukan dengan perhitungan menggunakan rumus menggunakan koordinat titik-titik tersebut

A B = (x B - x A) 2 + (y B - y A) 2

Rumus yang dihasilkan juga menegaskan pernyataan yang telah dibentuk sebelumnya untuk kasus titik-titik yang kebetulan atau situasi ketika titik-titik terletak pada garis lurus yang tegak lurus sumbu. Jadi, jika titik A dan B berimpit, persamaannya benar: A B = (x B - x A) 2 + (y B - y A) 2 = 0 2 + 0 2 = 0

Untuk situasi dimana titik A dan B terletak pada garis lurus yang tegak lurus sumbu x:

A B = (x B - x A) 2 + (y B - y A) 2 = 0 2 + (y B - y A) 2 = y B - y A

Untuk kasus ketika titik A dan B terletak pada garis lurus yang tegak lurus sumbu ordinat:

A B = (x B - x A) 2 + (y B - y A) 2 = (x B - x A) 2 + 0 2 = x B - x A

Data awal: sistem koordinat persegi panjang O x y z dengan titik-titik sembarang yang terletak di atasnya dengan koordinat tertentu A (x A, y A, z A) dan B (x B, y B, z B). Jarak antara titik-titik ini perlu ditentukan.

Mari kita perhatikan kasus umum ketika titik A dan B tidak terletak pada bidang yang sejajar dengan salah satu bidang koordinat. Mari kita menggambar bidang yang tegak lurus sumbu koordinat melalui titik A dan B dan memperoleh titik proyeksi yang sesuai: A x , A y , A z , B x , B y , B z

Jarak antara titik A dan B adalah diagonal dari parallelepiped yang dihasilkan. Menurut konstruksi pengukuran paralelepiped ini: A x B x , A y B y dan A z B z

Dari mata kuliah geometri kita mengetahui bahwa kuadrat diagonal suatu parallelepiped sama dengan jumlah kuadrat dimensinya. Berdasarkan pernyataan ini, kita memperoleh persamaan: A B 2 = A x B x 2 + A y B y 2 + A z B z 2

Berdasarkan kesimpulan yang diperoleh sebelumnya, kami menulis sebagai berikut:

A x B x = x B - x A , A y B y = y B - y A , A z B z = z B - z A

Mari kita ubah ekspresinya:

A B 2 = A x B x 2 + A y B y 2 + A z B z 2 = x B - x A 2 + y B - y A 2 + z B - z A 2 = = (x B - x A) 2 + (kamu B - kamu A) 2 + z B - z A 2

Terakhir rumus menentukan jarak antar titik dalam ruang akan terlihat seperti ini:

A B = x B - x A 2 + y B - y A 2 + (z B - z A) 2

Rumus yang dihasilkan juga berlaku untuk kasus ketika:

Poinnya bertepatan;

Letaknya pada satu sumbu koordinat atau garis lurus yang sejajar dengan salah satu sumbu koordinat.

Contoh penyelesaian masalah mencari jarak antar titik

Contoh 1

Data awal: diberikan garis koordinat dan titik-titik yang terletak di atasnya dengan koordinat A (1 - 2) dan B (11 + 2). Kita perlu mencari jarak dari titik asal O ke titik A dan antara titik A dan B.

Larutan

  1. Jarak titik acuan ke titik tersebut masing-masing sama dengan modulus koordinat titik tersebut O A = 1 - 2 = 2 - 1
  2. Jarak antara titik A dan B kita definisikan sebagai modulus selisih koordinat titik-titik tersebut: A B = 11 + 2 - (1 - 2) = 10 + 2 2

Jawaban: O A = 2 - 1, A B = 10 + 2 2

Contoh 2

Data awal: diberikan sistem koordinat persegi panjang dan dua titik yang terletak di atasnya A (1, - 1) dan B (λ + 1, 3). λ adalah bilangan real. Kita perlu mencari semua nilai bilangan ini yang jarak A B sama dengan 5.

Larutan

Untuk mencari jarak titik A dan B harus menggunakan rumus A B = (x B - x A) 2 + y B - y A 2

Mengganti nilai koordinat sebenarnya, kita mendapatkan: A B = (λ + 1 - 1) 2 + (3 - (- 1)) 2 = λ 2 + 16

Kami juga menggunakan kondisi yang ada bahwa A B = 5 dan persamaannya akan benar:

λ 2 + 16 = 5 λ 2 + 16 = 25 λ = ± 3

Jawaban: A B = 5 jika λ = ± 3.

Contoh 3

Data awal: suatu ruang tiga dimensi ditentukan dalam sistem koordinat persegi panjang O x y z dan titik A (1, 2, 3) dan B - 7, - 2, 4 terletak di dalamnya.

Larutan

Untuk menyelesaikan soal tersebut, kita menggunakan rumus A B = x B - x A 2 + y B - y A 2 + (z B - z A) 2

Dengan mensubstitusikan nilai riil, diperoleh: A B = (- 7 - 1) 2 + (- 2 - 2) 2 + (4 - 3) 2 = 81 = 9

Jawaban: | A B | = 9

Jika Anda melihat kesalahan pada teks, silakan sorot dan tekan Ctrl+Enter

Pemecahan masalah matematika bagi siswa seringkali disertai dengan banyak kesulitan. Membantu siswa mengatasi kesulitan-kesulitan ini, serta mengajar mereka untuk menerapkan pengetahuan teoretis yang ada ketika memecahkan masalah spesifik di semua bagian kursus dalam mata pelajaran “Matematika” adalah tujuan utama situs kami.

Ketika mulai menyelesaikan masalah pada topik tersebut, siswa harus mampu mengkonstruksi suatu titik pada suatu bidang dengan menggunakan koordinatnya, serta menemukan koordinat suatu titik tertentu.

Perhitungan jarak antara dua titik A(x A; y A) dan B(x B; y B) yang diambil pada suatu bidang dilakukan dengan menggunakan rumus d = √((x A – x B) 2 + (y A – y B) 2), di mana d adalah panjang segmen yang menghubungkan titik-titik tersebut pada bidang.

Jika salah satu ujung ruas berimpit dengan titik asal koordinat, dan ujung lainnya berkoordinat M(x M; y M), maka rumus menghitung d berbentuk OM = √(x M 2 + y M 2 ).

1. Perhitungan jarak antara dua titik berdasarkan koordinat titik-titik tersebut

Contoh 1.

Tentukan panjang ruas yang menghubungkan titik A(2; -5) dan B(-4; 3) pada bidang koordinat (Gbr. 1).

Larutan.

Rumusan masalah menyatakan: x A = 2; x B = -4; y A = -5 dan y B = 3. Carilah d.

Menerapkan rumus d = √((x A – x B) 2 + (y A – y B) 2), kita mendapatkan:

d = AB = √((2 – (-4)) 2 + (-5 – 3) 2) = 10.

2. Perhitungan koordinat suatu titik yang berjarak sama dari tiga titik tertentu

Contoh 2.

Tentukan koordinat titik O 1 yang berjarak sama dari tiga titik A(7; -1) dan B(-2; 2) dan C(-1; -5).

Larutan.

Dari rumusan kondisi masalah maka O 1 A = O 1 B = O 1 C. Misalkan titik O 1 yang diinginkan mempunyai koordinat (a; b). Dengan menggunakan rumus d = √((x A – x B) 2 + (y A – y B) 2) kita temukan:

O 1 A = √((a – 7) 2 + (b + 1) 2);

O 1 B = √((a + 2) 2 + (b – 2) 2);

O 1 C = √((a + 1) 2 + (b + 5) 2).

Mari kita buat sistem dua persamaan:

(√((a – 7) 2 + (b + 1) 2) = √((a + 2) 2 + (b – 2) 2),
(√((a – 7) 2 + (b + 1) 2) = √((a + 1) 2 + (b + 5) 2).

Setelah mengkuadratkan ruas kiri dan kanan persamaan, kita tulis:

((a – 7) 2 + (b + 1) 2 = (a + 2) 2 + (b – 2) 2,
((a – 7) 2 + (b + 1) 2 = (a + 1) 2 + (b + 5) 2.

Sederhananya, mari kita menulis

(-3a + b + 7 = 0,
(-2a – b + 3 = 0.

Setelah menyelesaikan sistem, kita mendapatkan: a = 2; b = -1.

Titik O 1 (2; -1) berjarak sama dari tiga titik yang ditentukan dengan syarat tidak terletak pada garis lurus yang sama. Titik ini merupakan pusat lingkaran yang melalui tiga titik tertentu (Gbr. 2).

3. Perhitungan absis (ordinat) suatu titik yang terletak pada sumbu absis (ordinat) dan berada pada jarak tertentu dari suatu titik tertentu

Contoh 3.

Jarak titik B(-5; 6) ke titik A yang terletak pada sumbu Sapi adalah 10. Tentukan titik A.

Larutan.

Dari rumusan kondisi masalah diperoleh ordinat titik A sama dengan nol dan AB = 10.

Menyatakan absis titik A dengan a, kita tulis A(a; 0).

AB = √((a + 5) 2 + (0 – 6) 2) = √((a + 5) 2 + 36).

Kita mendapatkan persamaan √((a + 5) 2 + 36) = 10. Sederhanakan, kita punya

sebuah 2 + 10a – 39 = 0.

Akar persamaan ini adalah 1 = -13; dan 2 = 3.

Kami mendapatkan dua poin A 1 (-13; 0) dan A 2 (3; 0).

Penyelidikan:

A 1 B = √((-13 + 5) 2 + (0 – 6) 2) = 10.

A 2 B = √((3 + 5) 2 + (0 – 6) 2) = 10.

Kedua poin yang diperoleh sesuai dengan kondisi permasalahan (Gbr. 3).

4. Perhitungan absis (ordinat) suatu titik yang terletak pada sumbu absis (ordinat) dan berjarak sama dari dua titik tertentu

Contoh 4.

Carilah titik pada sumbu Oy yang berjarak sama dari titik A (6, 12) dan B (-8, 10).

Larutan.

Misalkan koordinat titik yang terletak pada sumbu Oy yang diperlukan oleh kondisi soal adalah O 1 (0; b) (pada titik yang terletak pada sumbu Oy, absisnya nol). Maka dari kondisi tersebut O 1 A = O 1 B.

Dengan menggunakan rumus d = √((x A – x B) 2 + (y A – y B) 2) kita temukan:

O 1 A = √((0 – 6) 2 + (b – 12) 2) = √(36 + (b – 12) 2);

O 1 B = √((a + 8) 2 + (b – 10) 2) = √(64 + (b – 10) 2).

Kita mempunyai persamaan √(36 + (b – 12) 2) = √(64 + (b – 10) 2) atau 36 + (b – 12) 2 = 64 + (b – 10) 2.

Setelah disederhanakan diperoleh: b – 4 = 0, b = 4.

Poin O 1 (0; 4) diperlukan oleh kondisi masalah (Gbr. 4).

5. Perhitungan koordinat suatu titik yang terletak pada jarak yang sama dari sumbu koordinat dan suatu titik tertentu

Contoh 5.

Temukan titik M yang terletak pada bidang koordinat pada jarak yang sama dari sumbu koordinat dan dari titik A(-2; 1).

Larutan.

Titik M yang diperlukan, seperti titik A(-2; 1), terletak pada sudut koordinat kedua, karena berjarak sama dari titik A, P 1 dan P 2 (Gbr. 5). Jarak titik M dari sumbu koordinat adalah sama, sehingga koordinatnya adalah (-a; a), dimana a > 0.

Dari kondisi soal maka MA = MR 1 = MR 2, MR 1 = a; MP 2 = |-a|,

itu. |-sebuah| = sebuah.

Dengan menggunakan rumus d = √((x A – x B) 2 + (y A – y B) 2) kita temukan:

MA = √((-а + 2) 2 + (а – 1) 2).

Mari kita buat persamaan:

√((-а + 2) 2 + (а – 1) 2) = а.

Setelah mengkuadratkan dan menyederhanakan, kita mendapatkan: a 2 – 6a + 5 = 0. Selesaikan persamaannya, carilah a 1 = 1; dan 2 = 5.

Kita memperoleh dua titik M 1 (-1; 1) dan M 2 (-5; 5) yang memenuhi kondisi masalah.

6. Perhitungan koordinat suatu titik yang terletak pada jarak tertentu yang sama dari sumbu absis (ordinat) dan dari titik tertentu

Contoh 6.

Carilah titik M sedemikian rupa sehingga jaraknya dari sumbu ordinat dan dari titik A(8; 6) sama dengan 5.

Larutan.

Dari kondisi soal MA = 5 dan absis titik M sama dengan 5. Misalkan ordinat titik M sama dengan b, maka M(5; b) (Gbr. 6).

Berdasarkan rumus d = √((x A – x B) 2 + (y A – y B) 2) kita mempunyai:

MA = √((5 – 8) 2 + (b – 6) 2).

Mari kita buat persamaan:

√((5 – 8) 2 + (b – 6) 2) = 5. Sederhanakan, kita peroleh: b 2 – 12b + 20 = 0. Akar-akar persamaan ini adalah b 1 = 2; b 2 = 10. Akibatnya, ada dua titik yang memenuhi syarat soal: M 1 (5; 2) dan M 2 (5; 10).

Diketahui bahwa banyak siswa, ketika memecahkan masalah secara mandiri, memerlukan konsultasi terus-menerus tentang teknik dan metode penyelesaiannya. Seringkali, seorang siswa tidak dapat menemukan cara untuk memecahkan suatu masalah tanpa bantuan seorang guru. Siswa dapat menerima saran yang diperlukan untuk memecahkan masalah di situs web kami.

Masih ada pertanyaan? Tidak tahu cara mencari jarak antara dua titik pada bidang?
Untuk mendapatkan bantuan dari tutor, daftarlah.
Pelajaran pertama gratis!

situs web, ketika menyalin materi secara keseluruhan atau sebagian, diperlukan tautan ke sumbernya.

Titik-titik tertentu pada bidang, ditentukan oleh koordinatnya. Di antara mereka harus ditemukan dua titik berikut, yang jarak antara keduanya minimal:

Kami mengambil jarak Euclidean yang biasa:

Algoritme sepele - mengulangi semua pasangan dan menghitung jarak untuk masing-masing pasangan - berfungsi di . Algoritma yang berjalan dalam waktu dijelaskan di bawah ini. Algoritma ini diusulkan oleh Preparata pada tahun 1975. Preparata dan Chamos juga menunjukkan bahwa dalam model pohon keputusan, algoritma ini optimal secara asimtotik.

Algoritma

Mari kita membangun sebuah algoritma sesuai dengan skema umum algoritma "membagi-dan-menaklukkan": kami memformulasikan algoritme sebagai fungsi rekursif yang dilalui sekumpulan titik; fungsi rekursif ini membagi himpunan ini menjadi dua, memanggil dirinya sendiri secara rekursif dari masing-masing bagian, dan kemudian melakukan beberapa operasi untuk menggabungkan jawabannya. Operasi penggabungan terdiri dari pendeteksian kasus di mana satu titik dari solusi optimal jatuh ke dalam satu bagian, dan titik lainnya ke bagian lainnya (dalam hal ini, panggilan rekursif dari masing-masing bagian secara terpisah, tentu saja, tidak akan dapat mendeteksi hal ini. pasangan). Kesulitan utama, seperti biasa, terletak pada implementasi efektif tahap penyatuan ini. Jika suatu fungsi rekursif diberikan himpunan titik, maka tahap penggabungan harus bekerja tidak lebih dari , maka asimtotik seluruh algoritma akan dicari dari persamaan:

Solusi persamaan ini, seperti diketahui, adalah .

Jadi, mari kita lanjutkan ke pembuatan algoritme. Untuk mencapai implementasi tahap penggabungan yang efektif di masa depan, kami akan membagi himpunan titik menjadi dua menurut koordinat -nya: sebenarnya, kami menggambar beberapa garis vertikal yang membagi himpunan titik menjadi dua himpunan bagian kira-kira ukuran yang sama. Lebih mudah untuk membuat partisi seperti berikut: kami mengurutkan titik-titik sebagai standar sebagai pasangan angka, yaitu:

Kemudian kita akan mengambil titik tengah () setelah diurutkan, dan semua poin sebelumnya akan ditetapkan ke babak pertama, dan semua poin setelahnya akan ditetapkan ke babak kedua:

Sekarang, dengan memanggil secara rekursif setiap himpunan dan , kita akan menemukan jawaban untuk masing-masing bagian. Mari kita ambil yang terbaik dari mereka: .

Sekarang kita perlu memproduksinya tahap penyatuan, yaitu. cobalah mendeteksi pasangan titik yang jaraknya kurang dari , dengan satu titik terletak di dalam dan titik lainnya di dalam . Jelasnya, untuk ini cukup dengan mempertimbangkan hanya titik-titik yang dipisahkan dari garis pemisah vertikal dengan jarak kurang dari , yaitu. himpunan poin yang dipertimbangkan pada tahap ini sama dengan:

Untuk setiap titik dari himpunan, Anda harus mencoba mencari titik yang lebih dekat dengannya daripada . Misalnya, cukup dengan mempertimbangkan titik-titik saja yang koordinatnya berbeda tidak lebih dari . Selain itu, tidak masuk akal untuk mempertimbangkan titik-titik yang koordinat -nya lebih besar dari -koordinat titik saat ini. Jadi, untuk setiap titik kami mendefinisikan himpunan titik yang dipertimbangkan sebagai berikut:

Jika kita mengurutkan titik-titik himpunan berdasarkan koordinat -, maka akan sangat mudah untuk menemukannya: ini adalah beberapa titik yang berurutan hingga titik tersebut.

Jadi, dalam notasi baru tahap penyatuan tampilannya seperti ini: buatlah suatu himpunan, urutkan titik-titik di dalamnya berdasarkan -koordinat, lalu untuk setiap titik pertimbangkan semua titiknya, dan untuk setiap pasangan hitung jaraknya dan bandingkan dengan jarak terbaik saat ini.

Pada pandangan pertama, ini masih merupakan algoritma suboptimal: tampaknya ukuran himpunan akan berada pada urutan , dan asimtotik yang diperlukan tidak akan berfungsi. Namun yang mengejutkan, dapat dibuktikan bahwa ukuran masing-masing himpunan adalah kuantitas , yaitu. tidak melebihi suatu konstanta kecil, berapa pun titiknya. Bukti fakta ini diberikan pada bagian berikutnya.

Terakhir, mari kita perhatikan pengurutan, yang mana algoritma di atas berisi dua sekaligus: pertama mengurutkan berdasarkan pasangan (,), dan kemudian mengurutkan elemen-elemen himpunan berdasarkan . Faktanya, kita dapat menghilangkan kedua jenis ini di dalam fungsi rekursif (jika tidak, kita tidak akan mencapai perkiraan untuk tahap gabungan, dan perilaku asimtotik keseluruhan dari algoritme akan menjadi ). Sangat mudah untuk menghilangkan penyortiran pertama - cukup lakukan penyortiran ini terlebih dahulu, sebelum memulai rekursi: lagipula, di dalam rekursi, elemen-elemen itu sendiri tidak berubah, jadi tidak perlu melakukan penyortiran lagi. Penyortiran kedua sedikit lebih sulit; Anda tidak akan bisa melakukannya terlebih dahulu. Tapi, mengingat menggabungkan semacam(pengurutan gabungan), yang juga bekerja berdasarkan prinsip bagi-dan-taklukkan, kita cukup memasukkan pengurutan ini ke dalam rekursi kita. Biarkan rekursi, mengambil beberapa kumpulan titik (seperti yang kita ingat, diurutkan berdasarkan pasangan) mengembalikan kumpulan yang sama, tetapi diurutkan berdasarkan koordinat. Untuk melakukan ini, cukup gabungkan (dalam ) dua hasil yang dikembalikan oleh panggilan rekursif. Ini akan menghasilkan kumpulan yang diurutkan.

Estimasi asimtotik

Untuk menunjukkan bahwa algoritma di atas benar-benar berjalan, kita hanya perlu membuktikan fakta berikut: .

Jadi, mari kita pertimbangkan beberapa hal; Mari kita ingat bahwa himpunan adalah himpunan titik-titik yang koordinatnya terletak pada segmen tersebut , dan, sebagai tambahan, sepanjang koordinat tersebut baik titik itu sendiri maupun semua titik himpunan tersebut terletak pada garis yang lebarnya . Dengan kata lain, titik-titik yang kita pertimbangkan terletak pada persegi panjang berukuran .

Tugas kita adalah memperkirakan jumlah maksimum titik yang terletak pada persegi panjang ini; dengan demikian kami akan memperkirakan ukuran maksimum himpunan tersebut. Pada saat yang sama, ketika menilai, kita tidak boleh lupa bahwa poin yang berulang dapat terjadi.

Mari kita ingat apa yang diperoleh dari setidaknya dua hasil panggilan rekursif - dari himpunan dan , dan berisi titik-titik di sebelah kiri garis pemisah dan sebagian di atasnya - sisa titik garis pemisah dan titik-titik di sebelah kanannya. . Untuk pasangan titik mana pun dari , serta dari , jaraknya tidak boleh kurang - jika tidak, ini berarti fungsi rekursif tidak berfungsi dengan benar.

Untuk memperkirakan jumlah maksimum titik dalam sebuah persegi panjang, kita membaginya menjadi dua kotak, menetapkan semua titik ke kotak pertama, dan sisanya ke kotak kedua, yaitu. . Dari pertimbangan di atas dapat disimpulkan bahwa pada masing-masing persegi, jarak antara dua titik paling sedikit adalah .

Mari kita tunjukkan hal itu di setiap kotak tidak lebih dari empat poin. Misalnya, hal ini dapat dilakukan sebagai berikut: bagilah persegi menjadi 4 subkotak dengan sisi . Maka pada masing-masing subkotak ini tidak boleh terdapat lebih dari satu titik (karena diagonalnya genap sama dengan , yang mana lebih kecil). Oleh karena itu, tidak boleh ada lebih dari 4 titik di seluruh persegi.

Jadi, kita telah membuktikan bahwa sebuah persegi panjang tidak boleh memiliki lebih banyak titik, dan oleh karena itu, ukuran himpunan tidak boleh melebihi , yang perlu kita buktikan.

Pelaksanaan

Mari kita perkenalkan struktur data untuk menyimpan suatu titik (koordinatnya dan angka tertentu) dan operator perbandingan yang diperlukan untuk dua jenis pengurutan:

struct pt (int x, y, id; ) ;< b.x || a.x == b.x && a.y < b.y ; } inline bool cmp_y (const pt & a, const pt & b) { return a.y < b.y ; } pt a[ MAXN] ;

inline bool cmp_x (const pt & a, const pt & b) ( kembalikan a.x

Untuk memudahkan implementasi rekursi, mari kita perkenalkan fungsi tambahan yang akan menghitung jarak antara dua titik dan memeriksa apakah lebih baik daripada jawaban saat ini:< ) = dist, ansa = a.id , ansb = b.id ; }

dobel ; ke dalam ansa, ansb;

inline void upd_ans (const pt & a, const pt & b) ( double dist = sqrt ((a.x - b.x ) * (a.x - b.x ) + (a.y - b.y ) * (a.y - b.y ) + .0 ) ; if ( dist

Terakhir, implementasi rekursi itu sendiri. Diasumsikan bahwa sebelum dipanggil, array telah diurutkan berdasarkan -koordinat. Rekursi hanya diberikan dua petunjuk, , yang menunjukkan bahwa ia harus mencari jawaban untuk . Jika jarak antara dan terlalu kecil, maka rekursi harus dihentikan, dan algoritma sepele harus dilakukan untuk menemukan pasangan terdekat dan kemudian mengurutkan subarray berdasarkan koordinat -.

batal rec (int l, int r) ( jika (r - l<= 3 ) { for (int i= l; i<= r; ++ i) for (int j= i+ 1 ; j<= r; ++ j) upd_ans (a[ i] , a[ j] ) ; sort (a+ l, a+ r+ 1 , & cmp_y) ; return ; } int m = (l + r) >> 1 ;<= r; ++ i) if (abs (a[ i] .x - midx) < ) { for (int j= tsz- 1 ; j>int midx = a[ m].x ;< ; -- j) upd_ans (a[ i] , t[ j] ) ; t[ tsz++ ] = a[ i] ; } }

rek (l, m) , rek (m+ 1 , r) ;