Bu yol sorununun karmaşıklığı biliniyor mu?


9

Eşgörünüm: Yönlendirilmemiş bir grafikGiki belirgin köşe noktası ve bir tamsayı .stk0

Soru: , en fazla üçgeniyle kesişecek şekilde bir yolu var mı ? (Bu sorun için, yol üçgenden en az bir kenar içeriyorsa, bir yolla bir üçgenin kesiştiği söylenir.)stGk


3
Bu yanlış mı? Her kenara ağırlık atarız ve sonra en kısa st yolunu buluruz. Her kenarın ağırlığı, o kenarı içeren üçgenlerin sayısıdır. Bu yolun ağırlığı, karşıladığı üçgen sayısına eşit değildir, ancak minimum üçgen sayısına sahip bir st yoludur. (Olası sorun, bir veya daha fazla üçgeni iki kez sayabilmemizdir çünkü üçgenin iki kenarını ziyaret ederiz, ancak onları seçmemizin nedeni, üçgenin diğer kenarından geçmekten daha küçük olmaları ve aynı zamanda basit yol araçlarımız olması bir üçgenin iki kenarı yan yana).
Saeed

3
@Saeed anlamadım: fazla saymanın sizi yetersiz bir yol seçmediği iddiası nedir? Algoritmanız kesinlikle 2 yaklaşımdır. Belki bir düzeltme kenar eklemek(u,w) her yol için uvw her ikisini de içeren üçgen sayısına eşit ağırlıkta (u,v) ve (v,w)
Sasho Nikolov

2
Doğru, u'dan v'ye gidebiliriz ve sonra x'i seçeriz (uvw üçgeninde olmayan başka bir düğüm) o zaman yanlış olan w'ye gideriz (benim hatam uvw üçgeninde olmayan köşeler arasında kaçırmış olduğum) , ancak düzeltmenizle doğru çünkü her st yolu için α orijinal grafikte üçgenler bir ağırlık yolu var αyardımcı grafikte. Ayrıca, yeni grafikteki yolun ağırlığı her zaman en azından orijinal grafikteki ilgili yoldaki üçgen sayısıdır.
Saeed

1
Biraz daha düşündüm, düzelttikten sonra bile çalışmıyor. Üzgünüm Andras yanlış bir umut getirirsem. Düzeltmenin neden yanlış olduğunu görmek için köşeleri dikkate alınu>v>w>x bir yolda P ve bir üçgenimiz var u,v,w ve v,w,x ve kenarları varsayalım vx ve uwçok fazla üçgen olayı yaşarlar. Yapay yeni bir kenar kullanırsaku>w sonra üçgeni saydık v,w,xiki defa. PS: Akıl yürütmem yine yanlıştı çünkü basitçe değiştirdiğimizi düşündümu>v ve v>w yeni (çok) kenarlı u>w. Bu yapay kenarları her yol için eklersek önemsiz bir şekilde çalışır. Görünüşe göre NPC.
Saeed

1
Fikrim işe yaramayacak - birden fazla set tutmam gerekecek ve bence çok fazla olacak.
reinierpost

Yanıtlar:


1

İçinde kendinden kenar olmadığını varsayalım G.

Düğüm arasındaki her kenar için vi ve vj içinde G, İzin Vermek E[i,j]=1, ve E[i,j]=0kenar yoksa. hesaplamakn×n matris C[i,j]=k=1nE[i,k]E[k,j]her bir düğüm çifti arasındaki iki sekmeli yolların sayısını verir vi ve vj. Sonra arasındaki kenar içinvi ve vj içinde G hesaplamak D[i,j]=E[i,j]C[i,j] aksi halde D[i,j]=kenarın parçası olduğu üçgen sayısını verir (veya kenar yoksa sonsuzluk). Hesaplamak için gerekli matris çarpımıC maliyetler O(n3) (genişliğine bağlı olarak daha hızlı hesaplanabilir G).

Şimdi hesapla n×n matris A, öyle ki A[i,j]=min(D[i,j],mink(D[i,k]+D[k,j]E[i,j])). A en kısa yollar D Üçgenin iki kenarı boyunca uzanan yolları hesaba katmak için iki adede kadar artırılmış uzunluk.

Şimdi aralarındaki en kısa yolu hesapla vi ve vj içinde G yeni bir grafik üzerinde A Dijkstra kullanan (ağırlıklı) bitişiklik matrisidir (tüm kenar ağırlıkları pozitif olduğundan) yani A[i,j]k, nerede A (mesafe matrisini veren) tropik semiringin kapanmasıdır.

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.