テキストを最大幅の行に均等に分割するための線形時間アルゴリズムがあります。SMAWK(またはKnuth&Plass)を使用し、「均等」という意味:http : //en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
上記のアルゴリズムに、最大行幅ではなく、テキストを分割する行数を考慮に入れるアルゴリズムまたは凹型コスト関数がありますか?線形時間でも?
つまり、入力が目的の行幅ではなく、目的の行数である改行(または段落の形成、またはワードラップ)アルゴリズムを探しています。
実際には使用できないアプローチを説明するために、各単語ペアの間にN個の単語とN-1個のスペースがあり、Mは目的の行数(M <= N)です。各スペースの後に、最大で1つ(場合によってはゼロ)の改行があります。これで、アルゴリズムは可能な組み合わせのそれぞれにブレークを配置し、「不規則性」を計算して最適なものを返します。もっと速くする方法は?
また、そのような問題には名前がありますか?問題のどの「家族」に属しますか?(たとえば、「ビン梱包」)完全に最適なソリューションが必要ない場合、非常に良いソリューションだけで、はるかに速く解決することは可能ですか?(特定の入力に対して常に同じ、場合によっては最適ではないソリューションがあれば、何らかの形のヒューリスティックが使用可能になります)。
更新
チャンドラチェクリは、「ダイナミックプログラミングに関するクラインバーグとタルドスの章の問題」を提案しました。これは良い読み物でしたが、行数ではなく幅に基づいて改行を処理します。この問題に適応できるかもしれませんが、これは私が今考えていることです。ここにソリューションへの良いリンクがあります、彼らは線形時間でそれを解決するとさえ主張しています:http : //web.media.mit.edu/~dlanman/courses/cs157/HW5.pdf
また、SkienaのThe Algorithm Design Manualには「8.5パーティションの問題」という章がありますが、これはまさにトピックに関連しているように見えますが、今でも読んでいます。(残念ながら、私が理解したことから、それは二次的な時間の複雑さを持っています)