Minimizing total empty space in a paragraph - algorithm
up vote
0
down vote
favorite
For an application I want to find a way to minimize, by penalizing, the total empty space at the end of each line of a paragraph. I have a set of words W = [w1, w2, w3, ..., wn] that constitute the text I want the paragraph to contain and gor each word wi I have its corresponding length li. I also know the maximum amount of characters, including spaces, that a line can fit:m. I cannot hiphenate words.
In this situation I have defined a relation that describes the cost of the empty space of a line starting with the word i and finishing with the word j is given by c(i, j) = (m - (j - i) - sum_k=i^k = jlk)^3. So c(i, j) must be positive, otherwise I need to break the line and if j = n, I don't penalize the empty space of the last line: c(i, n) = 0.
With this parameters, I have found an algorithm that minimizes the cost of each line, before passing to the next one and calculates the total cost. However, minimizing the cost of each line does not necessarily mean that the total cost is also minimized.
Any process I can think of that would minimize the total cost requires a huge number of permutations of the number of words in each line and, hence, cannot be implemented. Any ideas of a viable algorithm to calculate the minimal cost?
algorithm optimization pseudocode paragraph
add a comment |
up vote
0
down vote
favorite
For an application I want to find a way to minimize, by penalizing, the total empty space at the end of each line of a paragraph. I have a set of words W = [w1, w2, w3, ..., wn] that constitute the text I want the paragraph to contain and gor each word wi I have its corresponding length li. I also know the maximum amount of characters, including spaces, that a line can fit:m. I cannot hiphenate words.
In this situation I have defined a relation that describes the cost of the empty space of a line starting with the word i and finishing with the word j is given by c(i, j) = (m - (j - i) - sum_k=i^k = jlk)^3. So c(i, j) must be positive, otherwise I need to break the line and if j = n, I don't penalize the empty space of the last line: c(i, n) = 0.
With this parameters, I have found an algorithm that minimizes the cost of each line, before passing to the next one and calculates the total cost. However, minimizing the cost of each line does not necessarily mean that the total cost is also minimized.
Any process I can think of that would minimize the total cost requires a huge number of permutations of the number of words in each line and, hence, cannot be implemented. Any ideas of a viable algorithm to calculate the minimal cost?
algorithm optimization pseudocode paragraph
1
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
For an application I want to find a way to minimize, by penalizing, the total empty space at the end of each line of a paragraph. I have a set of words W = [w1, w2, w3, ..., wn] that constitute the text I want the paragraph to contain and gor each word wi I have its corresponding length li. I also know the maximum amount of characters, including spaces, that a line can fit:m. I cannot hiphenate words.
In this situation I have defined a relation that describes the cost of the empty space of a line starting with the word i and finishing with the word j is given by c(i, j) = (m - (j - i) - sum_k=i^k = jlk)^3. So c(i, j) must be positive, otherwise I need to break the line and if j = n, I don't penalize the empty space of the last line: c(i, n) = 0.
With this parameters, I have found an algorithm that minimizes the cost of each line, before passing to the next one and calculates the total cost. However, minimizing the cost of each line does not necessarily mean that the total cost is also minimized.
Any process I can think of that would minimize the total cost requires a huge number of permutations of the number of words in each line and, hence, cannot be implemented. Any ideas of a viable algorithm to calculate the minimal cost?
algorithm optimization pseudocode paragraph
For an application I want to find a way to minimize, by penalizing, the total empty space at the end of each line of a paragraph. I have a set of words W = [w1, w2, w3, ..., wn] that constitute the text I want the paragraph to contain and gor each word wi I have its corresponding length li. I also know the maximum amount of characters, including spaces, that a line can fit:m. I cannot hiphenate words.
In this situation I have defined a relation that describes the cost of the empty space of a line starting with the word i and finishing with the word j is given by c(i, j) = (m - (j - i) - sum_k=i^k = jlk)^3. So c(i, j) must be positive, otherwise I need to break the line and if j = n, I don't penalize the empty space of the last line: c(i, n) = 0.
With this parameters, I have found an algorithm that minimizes the cost of each line, before passing to the next one and calculates the total cost. However, minimizing the cost of each line does not necessarily mean that the total cost is also minimized.
Any process I can think of that would minimize the total cost requires a huge number of permutations of the number of words in each line and, hence, cannot be implemented. Any ideas of a viable algorithm to calculate the minimal cost?
algorithm optimization pseudocode paragraph
algorithm optimization pseudocode paragraph
edited Nov 8 at 22:17
asked Nov 8 at 22:08
Desperados
565
565
1
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31
add a comment |
1
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31
1
1
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Let G be a graph, wherein each vertex V_x_y represents a partial paragraph consisting of y lines that use a total of x words. The graph has an edge from V_x_y to V_z_(y+1) if z > x and words w_(x+1) through w_z fit on a line. Every such edge has cost c(x+1,z), i.e, the cost of the additional line that it represents.
Now, your problem is to find the least cost path from V_0_0 to a vertex V_n_y that consumes all words.
You can use Dijkstra's algorithm to find this path in O(n^2 log n) time or better, or A* to find it even faster if you formulate a decent admissible heuristic.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Let G be a graph, wherein each vertex V_x_y represents a partial paragraph consisting of y lines that use a total of x words. The graph has an edge from V_x_y to V_z_(y+1) if z > x and words w_(x+1) through w_z fit on a line. Every such edge has cost c(x+1,z), i.e, the cost of the additional line that it represents.
Now, your problem is to find the least cost path from V_0_0 to a vertex V_n_y that consumes all words.
You can use Dijkstra's algorithm to find this path in O(n^2 log n) time or better, or A* to find it even faster if you formulate a decent admissible heuristic.
add a comment |
up vote
1
down vote
accepted
Let G be a graph, wherein each vertex V_x_y represents a partial paragraph consisting of y lines that use a total of x words. The graph has an edge from V_x_y to V_z_(y+1) if z > x and words w_(x+1) through w_z fit on a line. Every such edge has cost c(x+1,z), i.e, the cost of the additional line that it represents.
Now, your problem is to find the least cost path from V_0_0 to a vertex V_n_y that consumes all words.
You can use Dijkstra's algorithm to find this path in O(n^2 log n) time or better, or A* to find it even faster if you formulate a decent admissible heuristic.
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Let G be a graph, wherein each vertex V_x_y represents a partial paragraph consisting of y lines that use a total of x words. The graph has an edge from V_x_y to V_z_(y+1) if z > x and words w_(x+1) through w_z fit on a line. Every such edge has cost c(x+1,z), i.e, the cost of the additional line that it represents.
Now, your problem is to find the least cost path from V_0_0 to a vertex V_n_y that consumes all words.
You can use Dijkstra's algorithm to find this path in O(n^2 log n) time or better, or A* to find it even faster if you formulate a decent admissible heuristic.
Let G be a graph, wherein each vertex V_x_y represents a partial paragraph consisting of y lines that use a total of x words. The graph has an edge from V_x_y to V_z_(y+1) if z > x and words w_(x+1) through w_z fit on a line. Every such edge has cost c(x+1,z), i.e, the cost of the additional line that it represents.
Now, your problem is to find the least cost path from V_0_0 to a vertex V_n_y that consumes all words.
You can use Dijkstra's algorithm to find this path in O(n^2 log n) time or better, or A* to find it even faster if you formulate a decent admissible heuristic.
edited Nov 9 at 5:55
answered Nov 9 at 5:48
Matt Timmermans
17.9k11432
17.9k11432
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216897%2fminimizing-total-empty-space-in-a-paragraph-algorithm%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Seminal algorithm by Donald Knuth. also see wikipedia
– rici
Nov 8 at 22:31