Metni maksimum genişlikteki satırlara eşit olarak bölmek için doğrusal bir zaman algoritması vardır. SMAWK (veya Knuth & Plass) kullanır ve "eşit olarak" şu anlama gelir: http://en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
Maksimum algoritma genişliği yerine metnin girmesini istediğim satır sayısını hesaba katacak algoritma için bir algoritma veya içbükey bir maliyet fonksiyonu var mı? Ayrıca doğrusal zamanda?
Başka bir deyişle, girdinin istenen satır genişliği değil, istenen satır genişliği olduğu bir satır kesme (veya paragraf oluşturma veya sözcük kaydırma) algoritması arıyorum.
Sadece pratik olarak kullanılamaz bir yaklaşımı tanımlamak için: Her bir kelime çifti arasında N kelime ve N-1 boşlukları vardır, M istenen çizgi sayısıdır (M <= N). Her boşluktan sonra en fazla bir (muhtemelen sıfır) satır sonu olabilir. Şimdi, algoritma, "düzensizliği" hesaplayarak ve en iyisini döndürerek, her olası kombinasyonda kesmeleri yerleştirmeye çalışacaktır. Nasıl daha hızlı yapılır?
Ayrıca, böyle bir sorunun adı var mı? Hangi "aile" sorunlarına ait? (Örneğin "çöp kutusu ambalajı") Mükemmel bir şekilde en iyi çözüme ihtiyacım olmazsa, sadece çok iyi bir çözüm, çok daha hızlı çözmek mümkün mü? (belirli bir girdi için her zaman aynı, muhtemelen en uygun olmayan çözüm olsaydı, bir tür buluşsal yöntem kullanılabilir olabilir).
Güncelleme
Chandra Chekuri, "dinamik programlama hakkındaki Kleinberg ve Tardos bölümünde bir sorun" olduğunu önerdi. İyi bir okumaydı ama satır sayısından ziyade genişliğe dayalı satır kesmesi ile ilgileniyor. Şimdi anlamaya çalıştığım bir şey olan bu probleme uyarlanabilir olabilir. İşte çözüm için iyi bir bağlantı, hatta doğrusal zamanda çözdüğünü iddia ediyorlar: http://web.media.mit.edu/~dlanman/courses/cs157/HW5.pdf
Ayrıca, Skiena'nın Algoritma Tasarım El Kitabında tam olarak konuyla ilgili gibi görünen "8.5 Bölüm Sorunu" adlı bir bölüm var, hala okuyorum, zor. (Ne yazık ki, anladığım kadarıyla kuadratik zaman karmaşıklığı var)