Phát hiện hai loại đa giác gần như đơn giản


22

Tôi quan tâm đến sự phức tạp của việc quyết định xem một đa giác không đơn giản nhất định có gần như đơn giản hay không, theo một trong hai giác quan chính thức khác nhau: đơn giản yếu hoặc không tự giao . Vì các thuật ngữ này không được biết đến rộng rãi, hãy để tôi bắt đầu với một số định nghĩa.

  • Một đa giác P là chu kỳ khép kín của đoạn thẳng nối một số dãy hữu hạn p0,p1,p2,,pn1 điểm trên mặt phẳng. Các điểm pi được gọi là các đỉnh của đa giác và các đoạn pipi+1modn được gọi là các cạnh của nó . Chúng ta có thể chỉ định bất kỳ đa giác bằng cách chỉ liệt kê các đỉnh của nó theo thứ tự.

  • Một đa giác là đơn giản nếu tất cả n đỉnh là khác biệt và các cạnh chỉ giao nhau tại các điểm cuối của chúng. Tương tự, một đa giác là đơn giản nếu nó đồng nhất với một vòng tròn và mọi cạnh đều có chiều dài dương. Tuy nhiên, nói chung, các đỉnh và cạnh của đa giác có thể giao nhau tùy ý hoặc thậm chí trùng khớp. 1

  • Xét hai đường đa giác AB có giao điểm là một đường con chung của cả hai (có thể là một điểm duy nhất). Chúng ta nói rằng AB chéo nếu điểm cuối của họ A(0),B(0),A(1),B(1) thay thế trên ranh giới của một khu phố của subpath chung AB . Một đa giác là tự vượt qua nếu nó có hai đường dẫn con chéo và không tự vượt qua khác. 2

  • Một đa giác rất đơn giản nếu đó là giới hạn của một chuỗi các đa giác đơn giản, hoặc tương đương, nếu có một sự nhiễu loạn nhỏ tùy ý của các đỉnh làm cho đa giác đơn giản. Mỗi đa giác đơn giản yếu là không tự vượt qua; tuy nhiên, một số đa giác không tự vượt qua không đơn giản.

Ví dụ, hãy xem xét sáu điểm a,b,p,q,x,y được hiển thị bên dưới.

nhập mô tả hình ảnh ở đây

  • Đa giác abpqyz rất đơn giản; xem hình bên trái

  • Đa giác rất đơn giản; hình ở giữa cho thấy một đa giác đơn giản gần đó. Tuy nhiên, đa giác này không đơn giản, vì nó truy cập p ba lần.papbpqyqzqp

  • Đa giác là tự chéo, bởi vì các đường dẫn con b p q zy q p a cross. Xem hình bên phải cho một số trực giác.papbpqzqyqbpqzyqpa

  • Cuối cùng, đa giác (mà gió hai lần quanh đa giác giữa) là không tự qua, nhưng nó không đơn giản. Theo trực giác, số lần quay của đa giác này là ± 2 , trong khi số lần quay của bất kỳ đa giác đơn giản nào cũng phải là ± 1 . (Một bằng chứng chính thức đòi hỏi một số trường hợp phân tích, một phần vì số lượng biến không thực sự rõ ràng cho đa giác với 0 góc!)papbpqyqzqpapbpqyqzq±2±10

Cập nhật (ngày 13 tháng 9): Trong hình bên dưới, đa giác không tự vượt qua và có số 1 , nhưng nó không đơn giản. Đa giác được cho là có một số lối đi con không đơn giản , nhưng nó không có đường dẫn phụ đơn giản . (Tôi nói "có thể tranh cãi" vì không rõ cách xác định khi hai lối đi không đơn giản đi qua!)abcabcxyzxpqrxzyx

nhập mô tả hình ảnh ở đây

Vì vậy, cuối cùng, đây là câu hỏi thực tế của tôi:

  • Làm thế nào nhanh chóng chúng ta có thể xác định xem một đa giác nhất định là không tự vượt qua?

  • Làm thế nào nhanh chóng chúng ta có thể xác định xem một đa giác nhất định là đơn giản yếu?

Vấn đề đầu tiên có thể được giải quyết trong thời gian như sau. Vì có n đỉnh, nên có các đường con từ đỉnh đến đỉnh O ( n 2 ) ; chúng ta có thể kiểm tra xem bất kỳ đường dẫn cụ thể nào là đơn giản trong thời gian O ( n 2 ) (bằng vũ lực). Đối với mỗi cặp đường dẫn con từ đỉnh đến đỉnh đơn giản, chúng ta có thể kiểm tra xem chúng có giao nhau trong thời gian O ( n ) không . Nhưng đây không thể là thuật toán tốt nhất có thể.O(n5)nO(n2)O(n2)O(n)

Tôi không biết liệu vấn đề thứ hai có thể được giải quyết trong thời gian đa thức hay không. Tôi nghĩ rằng tôi có thể nhanh chóng tính toán một số quay được xác định rõ ràng cho bất kỳ đa giác không đơn giản nào (trừ khi liên kết các cạnh đa giác chỉ là một đường dẫn, trong trường hợp đó đa giác phải đơn giản yếu); xem câu trả lời của tôi dưới đây Tuy nhiên, ví dụ đa giác mới trên ngụ ý rằng không tự đi qua và quay số 1 nhưng điều đó không có nghĩa một cách yếu ớt đơn giản.

Chúng ta có thể xác định xem một đa giác đã cho có đơn giản trong thời gian bằng cách kiểm tra mọi cặp cạnh cho giao nhau hoặc trong thời gian O ( n log n ) bằng thuật toán quét tiêu chuẩn hoặc thậm chí trong thời gian O ( n ) bằng cách sử dụng Chazelle thuật toán tam giác. (Nếu đa giác đầu vào không đơn giản, bất kỳ thuật toán tam giác nào cũng sẽ đưa ra một ngoại lệ, vòng lặp vô hạn hoặc tạo ra đầu ra không phải là một tam giác hợp lệ.) Nhưng không có thuật toán nào trong số các thuật toán này giải quyết được các vấn đề tôi hỏi. O(n2)O(nlogn)O(n)


1 Branko Grünbaum. Đa giác: Meister đã đúng và Poinsot đã sai nhưng đã thắng thế . Beiträge zur Đại số und Geometrie 53 (1): 57 Tắt71, 2012.

2 Xem, ví dụ: Erik D. Demaine và Joseph O'Rourke. Thuật toán gấp hình học: Liên kết, Origami, Polyhedra . Nhà xuất bản Đại học Cambridge, 2007.


Tôi không hiểu tại sao người ta lại bỏ phiếu cho câu hỏi này?!
Kaveh

Tôi có thể hoàn toàn hiểu sai câu hỏi, và vì vậy có lẽ đây là cách giải quyết, nhưng dường như với tôi rằng cách bạn đếm các đỉnh có nghĩa là câu hỏi thứ hai nhất thiết phải mất thời gian theo cấp số nhân. Hãy để tôi giải thích: Trong ví dụ cuối cùng của bạn, bạn sử dụng cùng một đỉnh nhiều lần. Có vẻ dễ dàng để xây dựng các biểu đồ trong đó có một số lượng chu kỳ duy nhất theo cấp số nhân.
Joe Fitzsimons

Nếu đầu vào của bạn là đa giác được đưa ra như trong ví dụ của bạn, thì đầu vào có thể là số mũ theo số mũ mà không bao giờ lặp lại một chu kỳ. Nếu biểu đồ chứa biểu đồ ví dụ của bạn (2 và 3) dưới dạng sơ đồ con, thì nó có các chu kỳ không giao nhau và các chu kỳ giao nhau. Do đó, bạn cần đọc toàn bộ chuỗi để đảm bảo bạn không có bất kỳ chu kỳ giao nhau nào (có thể có hoặc không bao gồm). Điều này làm mất thời gian theo cấp số nhân trong trong trường hợp xấu nhất. n
Joe Fitzsimons

1
@JoeFitzsimons: Đầu vào chỉ là một chuỗi các điểm (nghĩa là các cặp số thực), không cần phải phân biệt. Kích thước đầu vào là độ dài của chuỗi này, không phải số lượng điểm duy nhất. n
Jeffε

2
@Kaveh: Có thể quá trừu tượng / chuyên ngành? Quá nhiều từ? Tôi có nên đặt tên cho các điểm Ga, Ka, Naa, Taa, Tin, Khat ?
Jeffε

Câu trả lời:


2

Có vẻ như câu hỏi đầu tiên có thuật toán (mặc dù điều này cũng có khả năng không tối ưu). Giả sử rằng có một giao cắt, chìa khóa để tìm thấy nó dường như là các cạnh phải được tìm thấy là ngay lập tức ở hai bên của đường dẫn chung. Do đó, chúng tôi xem xét tất cả các cặp cạnh liên tiếp. Có một số bậc hai trong số này. Nếu chúng ta tìm thấy một cặp cặp cạnh có đỉnh a b cd e f sao cho các cạnh b ce f giống nhau, thì chúng ta đi theo đường dẫn chung chung đến cuối và kiểm tra các cạnh rời khỏi nó. Nếu chúng tạo thành một giao thoa cùng vớiO(n3)abcdefbcef d e , sau đó chúng ta đã hoàn thành, nếu không chúng ta đi đến cặp tiếp theo. Theo sau đường dẫn chung là nhiều nhất là một hoạt động thời gian tuyến tính, vì vậy toàn bộ thuật toán là O ( n 3 ) .abdeO(n3)

Phân tích này có thể không chặt chẽ vì số lần một đường dẫn chung có độ dài tuyến tính sẽ được theo sau không phải là tuyến tính trong số lượng cặp. Chỉ nên có một số lượng không đổi. Tương tự, nếu độ dài của đường dẫn chung dài nhất là không đổi, thì chúng ta vẫn ổn về lượng thời gian theo đường dẫn chung. Tôi hy vọng rằng trường hợp xấu nhất xảy ra khi có một subpath duy nhất của chiều dài đó là chung choO(O(n). Sau đó, cóO(n)tương tác và trong mỗi tương tácO(O(n)O(n)các cạnh đang được theo dõi. Vì vậy, ngay cả số lượng các cạnh được theo sau lào(n2)và giới hạn được cung cấp bởi số lượng cặp. Do đó, tôi đoán rằng giới hạn thực sự của thuật toán này làO(n2).O(n)o(n2)O(n2)


1
"Theo đường dẫn chung chung nhiều nhất là hoạt động theo thời gian tuyến tính ..." Điều này có đúng không? Hãy nhớ rằng các đường dẫn phụ không giống nhau. Một người có thể gấp lại qua lại theo hình ảnh của người kia. Trên thực tế, nó thậm chí còn không rõ ràng (với tôi) khi bạn biết bạn đã hoàn thành.
Pat Morin

Điểm tốt. Là một bước tiền xử lý, có thể đặt đa giác ở một dạng chuẩn nào đó không? Chúng tôi sẽ tạo ra những con đường ngay lập tức thu mình lại, cũng như các đỉnh thẳng hàng với các nước láng giềng trực tiếp. Sau đó, câu mà bạn trích dẫn sẽ được xác định rõ hơn - đường dẫn phụ chung bao gồm các cạnh có cùng các đỉnh và bạn biết rằng bạn đã hoàn thành vì bạn nhấn các đỉnh khác nhau. Chứng minh rằng câu trả lời vẫn giữ nguyên trong đa giác ở dạng chuẩn không nên quá khó.
Chris Gray

@ChrisGray: Có thể, nhưng không hoàn toàn dễ dàng như bạn đã đề xuất. Nếu hình ảnh của là một cái cây, thì việc đệ quy tất cả các chuyển đổi cuối cùng sẽ giảm P xuống một điểm. PP
Jeffε

Vâng, bạn đã đúng, ý tưởng đó sẽ không hiệu quả. Con số ngoài cùng bên phải bạn đưa ra ở trên sẽ được giảm xuống một điểm.
Chris Gray

Tôi dự định để tiền thưởng hết hạn; một nửa số điểm sẽ được tự động trao cho câu trả lời này.
Jeffε

2

Theo đề nghị của Pat Morin, đây là ý tưởng của tôi để tính toán số lần lượt. Xin lỗi nếu điều này là một chút cẩu thả; Tôi vẫn đang chiến đấu với những con quỷ ký hiệu. Hơn nữa, nhận xét của Pat cho câu trả lời của Chris cho thấy rằng tôi đã bỏ qua một số trường hợp thoái hóa quan trọng. Nhưng dù sao tôi cũng sẽ đăng nó ở đây trong trường hợp người khác thấy nó hữu ích.

Đối với bất kỳ chỉ số , chúng ta hãy θ ( p i ) = θ ( p i - 1 , p i , p i + 1 ) biểu thị góc bên ngoài ký kết tại đỉnh p i ; đây là góc ngược chiều kim đồng giữa các tia p i - 1 p ip i p i + 1 , bình thường đến phạm vi - pi q iiθ(pi)=θ(pi1,pi,pi+1)pipi1pipipi+1 . (Tất cả số học chỉ số là ngầm định mod n .) Số lần quay của P được xác định là T u r n ( P ) = 1πθiπnP Hãy để tôi gọi một đỉnhpilà mộtspurnếugócbên trongtạipibằng0. Góc bên ngoàiθitại một spur là không rõ ràng; nó có thể làπhoặc-π. Tổng quát hơn, số lần quay củaPđược xác định rõ khi và chỉ khiPkhông có nhịp (và không có đỉnh lặp lạipi=

Turn(P)=12πi=0n1θ(pi).
pipi0θiππPP ). Không khó để chứng minh rằng T u r n ( P ) là một số nguyên nếu nó được xác định rõ; cụ thể, T u r n ( P ) = ± 1 nếu P là đa giác đơn giản.pi=pi+1Turn(P)Turn(P)=±1P

Bây giờ giả sử chứa một bước đi có dạng p r s r q , trong đó p q và đường dẫn r s là sự đảo ngược của đường dẫn s r . Sau đó s là một spur; cuộc gọi rgốc của s . Trong trường hợp này, hãy để tôi xác định các góc ngoài tại s như sau: ~ θ ( s ) = pi s g nPprsrqpqrssrsrss (Nhưng nếu θ ( p , r , q ) = 0 ? Như Pat quan sát, điều này thực sự có thể xảy ra. Có lẽ có một số cách đệ quy để định nghĩa ˜ θ ( s )

θ~(s)=πsgnθ(p,r,q)={πif θ(p,r,q)>0πif θ(p,r,q)<0
θ(p,r,q)=0θ~(s) ngay cả trong trường hợp này, nhưng tôi không biết nó là gì.)

Nếu đơn giản yếu, thì có một n -gon đơn giản ˜ P tùy ý gần với P ; tet ~ s là đỉnh của ~ P gần P . Như ~ P tiếp cận P , góc nội bộ tại ~ s phương pháp tiếp cận zero. Nó không khó để chứng minh (bằng quy nạp vào độ dài của r s ) mà góc bên ngoài θ ( ~ s ) phương pháp tiếp cận ~ θ ( s ) .PnP~Ps~P~PP~Ps~rsθ(s~)θ~(s)

Nếu bao gồm toàn bộ các bộ tiếp theo sự đảo ngược của nó, r s r , sau đó các góc ngoài tại thúc đẩy rs vẫn chưa được xác định rõ. Nhưng trong trường hợp này, tôi tin rằng P là một cách yếu ớt đơn giản nếu và chỉ nếu đi bộ r s là phi tự qua. (Có nhiều trường hợp phức tạp hơn trong đó tôi không thể xác định số quay được sửa đổi hợp lý, cụ thể, nếu đa giác di chuyển qua lại trong một lần đi bộ. Nhưng trong tất cả các trường hợp như vậy, dường như đa giác rất đơn giản nếu và chỉ khi nó là không tự vượt qua.)PrsrrsPrs

Ngược lại, nếu chúng ta định nghĩa đối với bất kỳ phi spur đỉnh p i , bây giờ chúng ta có một cái giếng xác định quay số ~ T u r n ( P ) = Σ i ~ θ ( p i ) / 2 π = T u r n ( ~ P ) , mà phải là ± 1 nếu P là một cách yếu ớt đơn giản.θ~(pi)=θ(pi)piTurn~(P)=iθ~(pi)/2π=Turn(P~)±1P

Tôi không còn tự tin rằng có thể được tính trong thời gian tuyến tính. Khó khăn chính là việc đi bộ r s chính nó có thể chứa spurs. Thuật toán ngây thơ mà tìm thấy thư mục gốc của mỗi spur bởi brute force thực sự mất Θ ( n 2 ) thời gian trong trường hợp tồi tệ nhất; xem xét một n -gon mà có một subwalk chiều dài Ω ( n ) mà chỉ đơn giản xen kẽ giữa hai điểm.Turn~(P)rsΘ(n2)nΩ(n)

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.