2012-03-01 14 views
2

テキストを最大幅の行に均等に分割する線形時間アルゴリズム(またはKnuth & Plassによる二次時間アルゴリズム)があります。それはSMAWKを使用し、「均等」を意味します
http://en.wikipedia.org/wiki/Word_wrap#Minimum_raggednessテキストを一定数の行に均等に分割します

ではなく、最大ラインの口座に私はにテキストの区切りをご希望の行数を取ることになる上記のアルゴリズムのためのアルゴリズムや凹コスト関数は、あります幅?

つまり、入力が目的の行数であり、希望の行幅ではない改行(または段落の構成、または単語の折り返し)アルゴリズムを探しています。

実際に使用できない方法を説明するだけです。各単語のペアの間にNワードとN-1スペースがあります.Mは希望のライン数です(M < = N)。各スペースの後に、たかだか1つ(場合によってはゼロ)の改行があるかもしれません。さて、アルゴリズムは、可能な組み合わせごとにブレークを配置し、「不揃い」を計算し、最良のものを返そうとします。はるかに速くする方法?

+0

「不揃い」について説明できますか?どんな結果が他の方が良いかをどうやって決めるのですか?評価なしでは、改行のランダム挿入を返すことができますが、これは当てはまりません。 – amit

+0

テキストは左詰めです。つまり、余白が残っている可能性があります。換言すれば、無駄は、最大(最適、望ましい)線幅と実際の線幅との間の差である。今私たちは廃棄物の平方根を計算するので、本当に間違ったものを処罰するので、すべての廃棄物の四角形をまとめてください。それが「不安定さ」です。ギャップを避けようとします。つまり、可能な限り同じ幅を持つようにします。 Btw、上のWikipediaのリンクにすべてあります。 –

答えて

0

文字列の全長を必要な行数で割った値の最大長を計算することで、最大長の後に行を分割する問題に対して、与えられた行数を達成するという問題を単純に減らすことができます。多くの場合、実際の行の長さが最大長よりも小さくなるため、必要な行の数から1を引く必要があります。

+0

問題は、このようなアプローチでは商が少ないことが保証されます。つまり、それ以上の数が発生する可能性があります。例えば:私は6行が必要で、テキストは 'a aaaaaa aaaaa aaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'ですが、8行作成されます。 –

+0

はい、私の提案は1を引くことです。非常に短い行(または非常に長い単語)がない限り、実際にはうまくいくでしょう。 –

+0

私のポイントは、減算はむしろ恣意的と思われます.3行では動作しません。「aaaaa aaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaaa aaaaaaaaaaaaaaaaa」 –

関連する問題