Bảo hiểm hình chữ nhật theo đường quét


9

Thật không may, tôi không may là tôi không thành công.

Có một tập hợp các hình chữ nhật và một hình chữ nhật . Sử dụng thuật toán quét mặt phẳng xác định xem có được bao phủ hoàn toàn bởi tập hợp . R 0 R 0 R 1 . . R nR1..RnR0R0R1..Rn

Để biết thêm chi tiết về nguyên tắc của thuật toán quét dòng xem tại đây .

Hãy bắt đầu từ đầu. Ban đầu, chúng tôi biết thuật toán quét dòng là thuật toán tìm giao điểm phân đoạn dòng đòi hỏi hai cấu trúc dữ liệu:

  • một tập hợp của các điểm sự kiện (nó lưu các điểm cuối của các đoạn và điểm giao nhau)Q
  • một trạng thái T (cấu trúc động cho tập hợp các phân đoạn mà đường quét giao nhau)

Ý tưởng chung: giả sử rằng đường quét tôi là đường thẳng đứng bắt đầu tiếp cận tập hợp các hình chữ nhật từ bên trái. Sắp xếp tất cả các tọa độ x của hình chữ nhật và lưu trữ chúng trong Q theo thứ tự tăng dần - nên lấy Ôi(nđăng nhậpn) . Bắt đầu từ điểm sự kiện đầu tiên, với mọi điểm xác định tập hợp các hình chữ nhật cắt nhau tại tọa độ cho x, xác định các đoạn liên tục của hình chữ nhật giao nhau và kiểm tra xem chúng có bao phủ R0 hoàn toàn tại tọa độ hiện tại không x. Với T là cây nhị phân, nó sẽ lấy Ôi(đăng nhậpn) . Nếu bất kỳ phần nào củaR0 vẫn chưa được khám phá thìR0 không được bao phủ hoàn toàn.

Chi tiết: Ý tưởng của thuật toán giao cắt phân đoạn là chỉ các phân đoạn liền kề giao nhau. Dựa trên thực tế này, chúng tôi đã xây dựng trạng thái T và duy trì nó trong suốt thuật toán. Tôi đã cố gắng tìm một ý tưởng tương tự trong trường hợp này và cho đến nay không thành công, điều duy nhất tôi có thể nói là hai hình chữ nhật cắt nhau nếu tọa độ x tương ứng của chúng ytrùng nhau.

Vấn đề là làm thế nào để xây dựng và duy trì , và sự phức tạp của việc xây dựng và duy trì T là gì. Tôi giả sử rằng cây R có thể rất hữu ích trong trường hợp này, nhưng vì tôi thấy rất khó để xác định hình chữ nhật giới hạn tối thiểu bằng cách sử dụng cây R.TT

Bạn có ý tưởng nào về cách giải quyết vấn đề này không, và đặc biệt là cách xây dựng ?T


1
Là những hình chữ nhật thẳng hàng trục hay không? (Bạn có thể làm một trong hai cách, nhưng sẽ dễ dàng hơn nếu có.)
Louis

@Louis, chúng ta hãy đơn giản hóa nó một chút, giả sử có các hình chữ nhật được căn chỉnh theo trục, nhưng tất nhiên trường hợp chung thú vị hơn
com

Những điểm nào của hình chữ nhật là điểm sự kiện? Tất cả các góc, trên cùng bên trái ...?
Raphael

@Raphael, chỉ x là điểm sự kiện
com

Câu trả lời:


6

Hãy bắt đầu với hình chữ nhật được căn chỉnh theo trục, vì có một loại đối số trực tiếp dễ dàng. Chúng tôi sẽ quét một đường thẳng đứng. Các sự kiện là điểm cuối của các cạnh ngang của hình chữ nhật. Như chúng ta đã quét chúng tôi duy trì một tập hợp các khoảng thời gian trên dòng quét được "che đậy" bởi R i , i 1 :nRii1

  • Thêm khoảng cách dọc được bao phủ bởi hình chữ nhật vào đường quét khi chúng ta gặp R i lần đầuRTôiRTôi
  • Xóa khoảng cách dọc được bao phủ bởi hình chữ nhật khỏi đường quét khi nó di chuyển qua R iRTôiRTôi

Thật dễ dàng để làm điều này với cây nhị phân để các bản cập nhật mất thời gian . (Về cơ bản, vấn đề là 1 chiều. Bạn tìm hiểu xem các điểm cuối có nằm trong một khoảng không được che chắn và mở rộng / hợp nhất một cách thích hợp khi thêm và kéo dài chúng khi xóa không.)Ôi(đăng nhậpn)

Sau đó, bạn chỉ cần kiểm tra xem, trong khoảng , không có khoảng nào trong số các khoảng không được phát hiện đã giao với nhịp dọc của R 0 . Toàn bộ điều là O ( n log n ) thời gian một không gian O ( n ) .R0R0Ôi(nđăng nhậpn)Ôi(n)

Đối với trường hợp chung, thủ thuật rõ ràng không quá nhanh. Sử dụng thuật toán đường quét tiêu chuẩn để tính toán toàn bộ phân vùng phẳng được tạo bởi các hình chữ nhật.

Rõ ràng một số tập hợp giống như đĩa của các mặt bao phủ R 0 . Chính nó, điều này không cho chúng ta biết đủ, vì điều chúng ta quan tâm là liệu có bất kỳ khuôn mặt nào trong số này nằm trong R 0 và bên ngoài các hình chữ nhật khác hay không. Để làm điều này, chúng tôi sửa đổi cấu trúc một chút, để khi chúng ta thêm một cạnh, chúng ta gắn thẻ một bên với danh tính của hình chữ nhật bên trong. Điều này thêm O ( 1 ) trên không, vì vậy việc xây dựng là thời gian O ( n 2 log n ) ; không có giả định trên các hình chữ nhật, đầu ra có thể là Ω ( n 2 )F'R0R0Ôi(1)Ôi(n2đăng nhậpn)Ω(n2) về kích thước, vì vậy chúng tôi đang sử dụng nhiều không gian đó trong trường hợp xấu nhất, vì vậy thời gian là "tối ưu tồn tại" mặc dù không "nhạy cảm đầu ra".

Cuối cùng, được bao phủ chừng nào không ai trong số các khuôn mặt trong F ' đã chỉ mép không được gắn thẻ như là một trong các R i . Vấn đề là nếu một cạnh của f nằm trong R i , thì toàn bộ f cũng vậy. Hãy tưởng tượng việc quét một đường thẳng qua f trực giao dọc theo cạnh này: nó chỉ có thể để R i ở ngoài f hoặc f được giới hạn bởi hơn một cạnh của R i .R0F'RTôifRTôiffRTôiffRTôi

Vì vậy, kết luận là trường hợp đặc biệt là và trường hợp chung là ít nhất là O ( n 2 log n ) , nhưng tôi nghi ngờ nó có thể được cải thiện.Ôi(nđăng nhậpn)Ôi(n2đăng nhậpn)


Cảm ơn bạn rất nhiều vì đã trả lời của bạn. Có vài điều tôi muốn làm rõ về trường hợp chung. - sự kiện là tọa độ x được định trước, trạng thái T - trạng thái - "không được phát hiện", vì tôi hiểu khoảng thời gian tương ứng với x i của một trong các R được phát hiện bởi bất kỳ R i , i 1 nào khác . Phần với R 0 tôi không hiểu. Tôi nghĩ rằng trên mỗi lần lặp (thêm) chúng ta nên kiểm tra xem khoảng cách có giao nhau với R 0 không , có đúng không? QxTxTôiRRTôi,Tôi1R0R0
com

RTôiRTôi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.