26X26 matrisini, her alfabe ve kenar olarak sözcük olarak yönlendirilmiş köşe grafiğini temsil edecek şekilde yaparsanız. Örneğin, kelime - APPLE A ve E köşelerini A'dan E'ye doğru yönlendirilmiş şekilde bağlayın. Şimdi sorun, grafikte en büyük Eulerian izi (maksimum kenar sayısını içeren, her kenarı bir kez köşelerin tekrarlanmasıyla ziyaret ederek) bulmaya indirgeniyor. O (E) algoritmasından biri, bir çift köşeden rastgele başlamak olacaktır. Aralarında bir yol bulun. Mümkün olana kadar yolu rahatlatmaya devam edin.
update
@ GlenH7 www.hackerearth / jda'da benzer bir soruyu son zamanlarda çözdüm, en iyi çözümle ilgili göreceli puanlar vardı ve aşağıdaki yaklaşımla en yüksek puanları aldım-
Verilen kelimelerin listesi. Onlar tarafından oluşturulabilecek en uzun zinciri bulun. Bir zincir, her kelimenin son sözcüğün sonunda biten * bir harfle başlaması durumunda geçerlidir.
Yaklaşım =
1) alfabelerin grafiğini köşeler ve kelimelerin kenarları olarak yapar. Birden fazla kenar kullanmak yerine, kenar sayısına eşit bir ağırlık kullanın.
2) Maksimum kenarlı grafiğin güçlü bir şekilde bağlanmış bileşenini bulun. Diğer kenarları geçici olarak atın.
3) Her köşe için bağımsızlığını geçmişine eşit yapın.
4) Şimdi grafikte öküz devresi var. Bul onu.
5) Şimdi kalan grafikte (wrt orignal grafik seçilen güçlü bağlı bileşende ilk tepe noktası ile en uzun iz bulmak.Bunun NP sert olduğunu düşünüyorum.
6) Elerian devresini izlere dönüştüren Elerian devresine yukarıdaki izi ekleyin.
Neden - Bu sorunun büyük olasılıkla NP zor olduğunu kabul ediyorum (tahmin edin, matematiksel olarak değil). Ancak yukarıdaki yaklaşım, tekdüze dağıtılmış kelimelerin uzun bir listesi (1000+) olduğunda (yani yukarıdaki yaklaşım için wc olması amaçlanmadığında) en iyi sonucu verir. Diyelim ki, verilen listeyi yukarıda belirtilen grafiğe dönüştürdükten sonra, neyse ki bir eulerian grafik olduğu ortaya çıkıyor ( koşullar için http://en.wikipedia.org/wiki/Eulerian_path ), o zaman şüphesiz bu cevabı söyleyebiliriz yukarıdaki soru P'dir ve aslında grafikteki eulerian yoludur ( bunu yapmak için çok basit bir yaklaşım için http://www.graph-magics.com/articles/euler.php adresine bakın ve grafiğinizin tek http://www.geeksforgeeks.org/strongly-connected-components/ve diğer küçük scc'leri geçici olarak temizlemezse, çünkü tek scc için euler yolu vardır). Bu yüzden şanslı olmayan vakalar için (neredeyse tüm vakalar) onları şanslı vakalara dönüştürmeye çalışırım (yani, eulerian iz koşulu yerine getirilir). Bu nasıl yapılır? Alakasız kenarlar için artan derinlik araması yapmayı denedim (verimden daha büyük olan tepe noktasından başlayarak ve gittikçe daha büyük olan tepe noktasında biten bir yoldaki kenar kümesi). Artan derinlik araması, önce yoldaki bir kenarın tümünü, yoldaki iki kenardan daha fazla aradığım anlamına gelir. İlk bakışta, derinlik aramasının O (düğümler ^ i) alacağını ve dolayısıyla şanslı bir durum olana kadar O'nun (düğümler + düğümler ^ 2 + düğümler ^ 3 + ....) toplam zaman karmaşıklığını alacağı görünebilir. Ancak itfa edilmiş analiz, O (kenarlar) olduğunu ortaya çıkaracaktır. Bir kez azalır şanslı durumda bul eulerian devre.
Buraya kadar hepsi polinom zamanıydı. Bu neredeyse en iyi çözümü verecektir. Ancak çözümünüzü daha da arttırmak için (mükemmel çözüm NP serttir), seçilen scc'deki köşe noktalarından birine bakarak uzun bir yol bulmak için kalan grafikte bazı açgözlü yaklaşımları deneyin. Şimdi bunu daha da arttırmak için yukarıda bulunan eulerian izine ekleyin.