Мені дають вправу, на жаль, я сам не досяг успіху.
Існує набір прямокутників і прямокутник . Використовуючи алгоритм підмітання площини, визначте, чи повністю покритий набором .
Більш детально про принцип алгоритмів розгортки ліній див. Тут .
Почнемо з початку. Спочатку ми знаємо алгоритм розгортки ліній як алгоритм пошуку перетину відрізків ліній, який вимагає двох структур даних:
- набір точок подій (він зберігає кінцеві точки сегментів та точки перетину)
- статус (динамічна структура для безлічі сегментів, що перетинає лінію розгортки)
Загальна ідея: припустимо, що лінія розгортки - це вертикальна лінія, яка починає наближатися до набору прямокутників зліва. Сортуйте всі координати прямокутників і зберігайте їх у у збільшенні - слід приймати . Почніть з першої точки події, для кожної точки визначте набір прямокутників, які перетинаються за заданою координатою, визначте безперервні відрізки прямокутників перетину та перевірте, чи повністю вони покривають у поточній координаті . Якщо як двійкове дерево, воно прийме . Якщо будь-яка частина залишається непокритою, це не повністю охоплений.
Деталі: Ідея алгоритму перетину сегментів полягала в тому, що перетинаються лише суміжні сегменти. На основі цього факту ми побудували статус і підтримували його протягом усього алгоритму. Я намагався знайти подібну ідею в цьому випадку, і поки що не мав успіху, єдине, що можу сказати, - це два прямокутники, що перетинаються, якщо їх відповідні координати та перетинаються.
Проблема полягає в тому, як будувати і підтримувати , і то , що складність створення і підтримки є. Я припускаю, що R дерева можуть бути дуже корисними в цьому випадку, але, як я виявив, дуже важко визначити мінімальний обмежуючий прямокутник за допомогою R дерев.
Чи маєте ви якесь уявлення про те, як вирішити цю проблему, зокрема, як побудувати ?