Öklid düzlemine (2D) gömülü bir grafik için kesişmeyen en kısa yol


15

Öklid düzlemine gömülü bir grafiğin en kısa yolunu bulmak için hangi algoritmayı kullanırsınız, böylece yol herhangi bir kendi-kavşak içermemelidir (gömme içinde)?

Örneğin, aşağıdaki grafikte den gitmek istersiniz . Normalde, Dijkstra'nın algoritması gibi bir algoritma aşağıdaki gibi bir dizi üretecektir:(0,0)(3,2)

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

Tüm grafik:

resim açıklamasını buraya girin

En kısa yol:

resim açıklamasını buraya girin

En kısa kesişmeyen yol:

resim açıklamasını buraya girin

Ancak, bu yol öklid düzleminde kesiştiği için, bu durumda bana en kısa kesişmeyen diziyi verecek bir algoritma istiyorum , bu durumda:

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

Bu yol en kısa yoldan daha uzundur, ancak en kısa kesişmeyen yoldur.

Bunu yapabilen (verimli) bir algoritma var mı?

TikZ kaynakları


2
Güzel sorun! (1). Bu sorunun ortaya çıktığı uygulama veya içerik hakkında bir şey söyleyebilir misiniz? İlgimi çekti. (PS Ayrı bir notta: Bu bilmeceden çıkmanın en açık yolu, her kavşak noktası, yani bir kenarın başka bir kenarla kesişebileceği her nokta için yeni bir tepe noktası ekleyip ekleyemeyeceğinizi görmektir. bu mümkün olmayabilir.)
DW

2
@DW bu, Babibu'nun kötü yazılmış yanan eşek / midilli sorununu yeniden biçimlendiriyorum ; Uygulama onun Öklid TSP sezgisel algoritmasıdır, nasıl kullanmayı planladığından tam olarak emin değilim, ama birkaç noktayı daha önce ziyaret ettiğinde iki nokta arasında bir yol bulup bulamayacağını bilmek istediğini hayal ediyorum (Öklid TSP'nin en uygun turu kesişen olmamalıdır). Ve evet, eğer yeni düğümler getirebilirseniz, bu harika olurdu, ama soru şu ki, (ve Öklid TSP için yeni şehirler getiremiyorsanız).
Realz Lahana Salatası

1
Yol varlığı problemini 3SAT'a dönüştürmeye çalışayım. İki yolu geçmezken iki sinyali geçmenin bir yolunu bulmak en büyük zorluk gibi görünüyor.
John Dvorak

1
Evet. SAT'ı bununla çözmek istedim.
John Dvorak

Yanıtlar:


11

Herhangi bir yolun var olup olmadığına karar vermek bile NP-eksiksizdir .

Herhangi bir yolun, verilen grafikte geçerli bir yol olduğunu doğrulamak mümkündür. Böylece sınırlı uzunluk problemi NP'dedir ve alt kümesi, herhangi bir yol problemi de öyle.

Şimdi, herhangi bir yol sorununun (ve dolayısıyla sınırlı uzunluktaki sorunun) NP sertliğini kanıtlamak için, SAT-CNF'yi bu soruna azaltalım:


Küresel yapı , bir yan tümce parçaları sütunu ile bitişik tel parçalarının bir ızgarasıdır. Grafikte kesişmeyen bir yol varsa mantık formülü tatmin edilebilir.

Yolun iki parçasını geçmek imkansızdır, ancak iki mantık telini geçmek zorunludur. Daha ziyade, yol akışı kesinlikle verilir: bir tel noktası iki düğüm tarafından verilir. Yolun içinden geçtiği tel noktalarının sırası, indirgeme ile zorlanır. Mantık, hangi düğümün seçildiği ile temsil edilir. Tüm kablo noktalarından geçtiği sürece herhangi bir yol seçilebilir.

Bu şemada, yol kırmızı eğri ile temsil edilir ve mantık akışı siyah tellerle temsil edilir:

soldaki tel ızgara, sağdaki yan tümce sütun.

Şimdi her bileşeni oluşturalım.


Kablolama üç karo kullanır: geçiş, dallanma noktası ve dikey tel. En zor olanla başlayalım:

Geçişin arkasındaki temel fikir , her bir tel noktası çifti için bir yol hazırlamak ve olası yolları, aynı mantığı (uyumlu yolları) kodlayanlar dışındaki tüm çiftlerin birbirini kesecek kadar bükülmesidir. Tabii ki sadece iki paralel kenarın kesiştiğini söyleyemeyiz, ancak iki yolu kesişmek için ekstra sipariş-2 düğümleri ekleyebiliriz.

Yolların kuzeyden batıya ve güneyden doğuya geldiğini varsayalım: her yolu kuzeyden uyumlu bir yolla doğudan bir çizgi üzerinde toplayabiliriz (bazı uyumsuz yollar birbirini keser); çiftlerin sırasını tersine çevirerek her çifti birbirleriyle çaprazlayın; yolları güney ve batı uç noktalarına dağıtır. Bu en iyi bir diyagramla açıklanır. Burada, her bir düğüm çifti bir tel noktasını temsil eder. Aynı renk koduna sahip yollar (aynı mantığı taşıyan) kesişmez, farklı bir renk kodunun yaptığı yollar:

yukarıdakilerin grafiksel tasviri

Dallanma noktası ve dikey tel aynı şekilde çalışır, ancak ilişkilendirilecek daha az yol vardır:

Burada iki çift yol yeterlidir.  Tel esasen dalın tahrip olduğu bir dallanma noktasıdır

Cümle kutusu aynı mantığı izler: her değişmez okuma yoluna giden yollarından birini ortaya çıkarır, sonra güneye yakınsa (en kuzeydeki terim veya kuzeydeki terim kuzeye yakınsa) veya kuzeye (terim kuzeyin güneye yaklaşması). Okuma teli (uç noktalardaki bir düğüm) dal başına bir yol haline gelir. Her okuma yolu, değişmez değeri reddedilirse değişmezin gerçek yolunu, değilse yanlış yolu kesişir. Yakınsak yolun bir yan tümce sınırını aşabileceğini veya geçmeyebileceğini unutmayın. Tutarlılık için, için bir diyagram :¬A¬B

resim açıklamasını buraya girin

Okuma telini farklı bir şekilde dallayarak, VE ve OR geçitlerinin gelişigüzel bir ağacını kodlamak için bu azalmayı genellemek mümkündür. Özellikle, SAT-CNF ve SAT-DNF'nin her ikisi de yukarıda tarif edildiği şekilde kesişmeyen yol problemine indirgenebilir.


Vay canına, aferin adamım. Henüz incelemedim, ancak koyduğunuz iş inanılmaz.
Realz Lahana Salatası

Tamam, sadece anlayışımı özetlemek istiyorum: ilk gadget'ı kullanarak, herhangi bir iki gerçek yol çiftini geçebilir ve kullanılan yolları koruyabiliriz. Bu nedenle, yolları döşemek için düzlemsellik konusunda endişelenmenize gerek yoktur (PlanarCircuitSat içindeki xor gadget'ı devreler için yaptığı gibi). Daha sonra son gadget'ı kullanarak, keyfi mantık cümleleri (artık düzlemlilik hakkında endişelenmek zorunda kalmadan) oluşturulabilir. Bu doğru mu?
Realz Lahana Salatası

Bu doğru görünüyor, ancak genel bir düzen için iki şey sağlamanız gerekiyor: Tüm aygıtları bir NIP yolu ile çalıştırabilmeniz (bu her zaman mümkün olmalı - eğer bir yol merkezde sıkışırsa, yolun yalnız uçlarını bir araya getirin) ve okuma telindeki tüm yolların, tel içinde tersine çevrilemeyecek şekilde birbirine geçtiği (bana gerçek maddeler olmadığı garanti edilir ( değişmez bir değeri geçmez) ve tüm yan tümceler devrenin dışındaysa (aynı yüzde başlangıç ​​ve bitiş).
John Dvorak

okuma telindeki tüm yolların birbirini geçmesini sağlamak - emin olmak istiyorsanız, n yoldan dallayın ve hemen hepsini geçin. Ancak bunun asla gerekli olmadığını düşünüyorum.
John Dvorak

1
Global yapı için OpenOffice Draw ve geri kalanı için [yEd] (www.yworks.com/products/yed) kullandım. Bunu (ile <sub>) içinde düzenlemeli miyim ?
John Dvorak

-1

Sorun Turan 1944. için bugüne kadar görünüyor teori ve algoritmalar iyi bir anket gibi bu görünüyor, Geçişi Grafikleri sayısı: Teori ve Hesaplama Mutzel tarafından. wikipedia geçiş sayısı grafik altında bazı bilgiler var


1
Belki bu bir yorum olarak daha iyidir?
Juho

bilimsel olarak "hangi algoritmayı kullanırsınız" temel soruya cevap verir
vzn

1
Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
John Dvorak

jan, stackexchange meta dosyasından bir referans gösterir. Bu geçerli bir fikir olsa da, bilim / matematikte atıfların rolü bir programlama ipuçları sitesinden farklıdır .... [itiraf etmek gerekirse ref şu anda daha ayrıntılı bir cevap için bana mevcut değildir] .. yine de böyle bir şey mümkün jans inşaat, yararlı / değerli olsa da, zaten literatürde ve bilimde, standart sürecin bir parçası / onu bulmak için [girişim] için en iyi uygulamalar ....
vzn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.