Sayangnya saya diberi latihan, tetapi saya tidak berhasil.
Ada satu set persegi panjang dan persegi panjang . Menggunakan algoritma plane sweeping menentukan apakah sepenuhnya dicakup oleh set .
Untuk detail lebih lanjut tentang prinsip algoritma garis sapu lihat di sini .
Mari kita mulai dari awal. Awalnya kita tahu algoritma garis sapu sebagai algoritma untuk menemukan persimpangan segmen garis yang membutuhkan dua struktur data:
- set titik acara (ini menyimpan titik akhir segmen dan titik persimpangan)
- status (struktur dinamis untuk himpunan segmen yang memotong garis sweep)
Gagasan Umum: asumsikan bahwa garis sapuan adalah garis vertikal yang mulai mendekati himpunan segi empat dari kiri. Urutkan semua koordinat persegi panjang dan simpan dalam dalam urutan yang meningkat - harus mengambil . Mulai dari titik kejadian pertama, untuk setiap titik tentukan himpunan persegi panjang yang berpotongan pada koordinat diberikan , identifikasi segmen kontinu persegi panjang persimpangan dan periksa apakah mereka mencakup R 0 sepenuhnya pada koordinat x saat ini . Dengan T sebagai pohon biner, ia akan mengambil O ( log n ) . Jika ada bagian darix Q O ( n log n ) x tetap terbuka bahwa R 0 tidak sepenuhnya tertutup.
Detail: Gagasan algoritme persimpangan segmen adalah bahwa hanya segmen bersebelahan yang bersinggungan. Berdasarkan fakta ini kami membangun status dan mempertahankannya di seluruh algoritma. Saya mencoba untuk menemukan ide yang sama dalam kasus ini dan sejauh ini tidak berhasil, satu-satunya hal yang dapat saya katakan adalah dua persegi panjang berpotongan jika koordinat x dan y yang sesuai tumpang tindih.
Masalahnya adalah bagaimana membangun dan memelihara , dan apa kompleksitas bangunan dan mempertahankan T adalah. Saya berasumsi bahwa pohon R dapat sangat berguna dalam kasus ini, tetapi ketika saya menemukan itu sangat sulit untuk menentukan persegi panjang batas minimum menggunakan pohon R.
Apakah Anda punya ide tentang cara mengatasi masalah ini, dan khususnya cara membangun ?