Đường dẫn không giao nhau ngắn nhất cho đồ thị được nhúng trong mặt phẳng euclide (2D)


14

Thuật toán nào bạn sẽ sử dụng để tìm đường đi ngắn nhất của đồ thị, được nhúng trong mặt phẳng euclide, sao cho đường dẫn đó không chứa bất kỳ giao điểm nào (trong phần nhúng)?

Ví dụ: trong biểu đồ bên dưới, bạn muốn đi từ . Thông thường, một thuật toán như thuật toán của Dijkstra sẽ tạo ra một chuỗi như:(0,0)(-3,2)

[(0,0)3(0,3)2(1,2)4(-3,2)]= =7+2.

Đồ thị đầy đủ:

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

Con đường ngắn nhất:

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

Con đường không giao nhau ngắn nhất:

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

Tuy nhiên, đường dẫn này tự giao nhau trên mặt phẳng euclide, do đó tôi muốn một thuật toán sẽ cho tôi chuỗi không giao nhau ngắn nhất, trong trường hợp này:

[(0,0)3(0,3)3(0,6)5(-3,2)]= =11.

Con đường này dài hơn con đường ngắn nhất, nhưng nó là con đường không giao nhau ngắn nhất.

Có một thuật toán (hiệu quả) có thể làm điều này?

Nguồn TikZ


2
Vấn đề tốt đẹp! (+1). Bạn có thể nói bất cứ điều gì về ứng dụng hoặc bối cảnh mà vấn đề này phát sinh không? Tôi tò mò. (PS Trên một lưu ý riêng: Cách rõ ràng của câu hỏi hóc búa này là xem liệu bạn có thể giới thiệu một đỉnh mới cho mọi điểm giao nhau hay không, tức là mọi điểm mà một cạnh có thể giao nhau với một cạnh khác. Tuy nhiên, tôi nhận ra rằng đối với một số / nhiều ứng dụng điều này có thể là không thể.)
DW

2
@DW đây là tôi đang cải cách vấn đề lừa / ngựa không thành tiếng của Babibu ; ứng dụng là thuật toán heuristic ESPidean TSP của anh ấy, tôi không chắc anh ấy có ý định sử dụng nó như thế nào, nhưng tôi tưởng tượng anh ấy muốn biết liệu anh ấy có thể tìm thấy một con đường giữa hai điểm không, khi anh ấy đã đến thăm một số điểm khác (chuyến tham quan tối ưu của Euclidean TSP sẽ không giao nhau). Và vâng, nếu bạn có thể giới thiệu các nút mới, điều đó sẽ rất tuyệt, nhưng câu hỏi là nếu bạn không thể (và bạn không thể giới thiệu các thành phố mới cho TSP Euclid).
Realz Slaw

1
Hãy để tôi thử chuyển đổi vấn đề tồn tại đường dẫn thành 3SAT. Thực hiện một cách để vượt qua hai tín hiệu trong khi không băng qua hai con đường dường như là thách thức lớn nhất.
John Dvorak

1
Vâng. Tôi có nghĩa là giải SAT thông qua điều này.
John Dvorak

2
n

Câu trả lời:


11

NP-đầy đủ để thậm chí quyết định xem con đường nào tồn tại không.

Rõ ràng có thể xác minh bất kỳ đường dẫn cụ thể nào là một đường dẫn hợp lệ trong biểu đồ đã cho. Do đó, bài toán độ dài giới hạn nằm trong NP, và tập hợp con của nó cũng là bài toán đường dẫn bất kỳ.

Bây giờ, để chứng minh độ cứng NP của bài toán đường dẫn bất kỳ (và do đó là bài toán độ dài giới hạn), chúng ta hãy giảm SAT-CNF cho vấn đề này:


Cấu trúc toàn cầu là một mạng lưới các mảnh dây liền kề bởi một cột của các mệnh đề. Công thức logic là thỏa đáng nếu tồn tại một đường không giao nhau qua biểu đồ.

Không thể vượt qua hai phần của con đường, nhưng không cần thiết phải vượt qua hai dây logic. Thay vào đó, luồng đường dẫn được đưa ra một cách nghiêm ngặt: một điểm dây được cho bởi hai nút. Trình tự các điểm dây qua đó đường đi qua bị ép bởi sự giảm. Logic được đại diện bởi nút nào được chọn. Bất kỳ con đường nào cũng có thể được chọn miễn là nó đi qua tất cả các điểm dây.

Trong sơ đồ này, đường dẫn được biểu thị bằng đường cong màu đỏ và luồng logic được biểu thị bằng các dây màu đen:

lưới dây bên trái, cột của các mệnh đề bên phải.

Bây giờ hãy xây dựng từng thành phần.


Dây điện sử dụng ba gạch: đường chéo, điểm nhánh và dây dọc. Hãy bắt đầu với cái khó nhất:

Ý tưởng cơ bản đằng sau giao cắt là chuẩn bị một đường dẫn cho mỗi cặp điểm dây và uốn cong các đường có thể đủ để tất cả các cặp ngoại trừ các cặp mã hóa cùng logic (đường dẫn tương thích) giao nhau. Tất nhiên chúng ta không thể chỉ nói hai cạnh song song cắt nhau, nhưng chúng ta có thể giới thiệu thêm 2 nút thứ tự để tạo hai đường dẫn giao nhau.

Giả sử các đường dẫn từ bắc sang tây và từ nam sang đông, chúng ta có thể: thu thập từng đường dẫn từ phía bắc với đường dẫn tương thích từ phía đông trên một đường (một số đường không tương thích sẽ giao nhau); lai mỗi cặp với nhau bằng cách đảo ngược thứ tự các cặp; phân phối các đường dẫn đến điểm cuối phía nam và phía tây của họ. Điều này được giải thích tốt nhất bằng một sơ đồ. Ở đây, mỗi cặp nút đại diện cho một điểm dây. Các đường dẫn có cùng mã màu (mang cùng logic) không giao nhau, các đường dẫn mã màu khác thực hiện:

mô tả đồ họa ở trên

Điểm nhánhdây dọc hoạt động như nhau, nhưng có ít đường dẫn hơn để tương quan:

Hai cặp đường dẫn là đủ ở đây.  Dây thực chất là một điểm nhánh với nhánh bị phá hủy

¬Một¬B

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

Có thể khái quát mức giảm này để mã hóa một cây AND và OR tùy ý bằng cách phân nhánh dây đọc theo cách khác nhau. Cụ thể, SAT-CNF và SAT-DNF đều có thể giảm đến vấn đề đường dẫn không giao nhau theo cách được mô tả như trên.


Wow, người đàn ông làm tốt lắm. Tôi chưa xem xét nó, nhưng công việc bạn đưa vào thật tuyệt vời.
Realz Slaw

OK, tôi chỉ muốn tóm tắt sự hiểu biết của mình: sử dụng tiện ích đầu tiên, người ta có thể vượt qua bất kỳ cặp đường dẫn theo nghĩa đen nào và duy trì các đường dẫn được sử dụng. Do đó, người ta không phải lo lắng về tính phẳng khi đặt đường dẫn (như tiện ích xor trong PlanarCircuitSat dành cho các mạch). Sau đó, sử dụng tiện ích cuối cùng, người ta có thể tạo các mệnh đề logic tùy ý (không còn phải lo lắng về tính phẳng). Điều này có đúng không?
Realz Slaw

Điều này có vẻ đúng nhưng bạn phải đảm bảo hai điều cho bố cục chung: Bạn có thể cấp nguồn cho tất cả các tiện ích bằng đường dẫn NIP (điều này luôn luôn có thể - nếu một đường dẫn bị kẹt ở trung tâm, bạn có thể giới thiệu các tiện ích dây cho mang các đầu đơn độc của đường dẫn lại với nhau) và rằng tất cả các đường dẫn trong dây đọc giao nhau theo cách mà không thể đảo ngược trong dây (có vẻ như tôi được đảm bảo nếu không có mệnh đề đúng ( không vượt qua bất kỳ nghĩa đen nào) và nếu tất cả các mệnh đề nằm ở bên ngoài mạch (trên cùng một mặt thì bắt đầu và kết thúc là)).
John Dvorak

đảm bảo rằng tất cả các đường dẫn trong dây đọc giao nhau đều dễ dàng - nếu bạn muốn chắc chắn, chỉ cần rẽ nhánh n đường dẫn, sau đó băng qua tất cả chúng ngay lập tức. Tôi nghĩ rằng điều này không bao giờ cần thiết, tuy nhiên.
John Dvorak

1
Tôi đã sử dụng OpenOffice Draw cho cấu trúc toàn cầu và [yEd] (www.yworks.com/products/yed) cho phần còn lại. Tôi có nên chỉnh sửa nó trong (với <sub>) không?
John Dvorak

-1

vấn đề dường như bắt nguồn từ Turan 1944. đây có vẻ như là một cuộc khảo sát tốt về lý thuyết và thuật toán, Số lượng đồ thị chéo: Lý thuyết và tính toán của Mutzel. wikipedia có một số thông tin dưới số lượng biểu đồ


1
Có lẽ điều này là tốt hơn như là một nhận xét?
Juho

nó trả lời một cách khoa học câu hỏi cơ bản "bạn sẽ sử dụng thuật toán nào"
vzn

1
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
John Dvorak

jan trích dẫn một ref từ meta stackexchange. Mặc dù đó là một ý tưởng hợp lệ, vai trò của trích dẫn trong khoa học / toán học khác với một trang web về mẹo lập trình .... [phải thừa nhận rằng hiện tại ref không có sẵn cho tôi để có câu trả lời chi tiết hơn] .. dù sao thì nó hoàn toàn có thể giống như jans xây dựng, trong khi hữu ích / đáng giá, đã có trong tài liệu và trong khoa học, một phần của quy trình chuẩn / thực tiễn tốt nhất để [cố gắng] xác định vị trí của nó ....
vzn
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.