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?










share|improve this question



















  • 1




    Seminal algorithm by Donald Knuth. also see wikipedia
    – rici
    Nov 8 at 22:31















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?










share|improve this question



















  • 1




    Seminal algorithm by Donald Knuth. also see wikipedia
    – rici
    Nov 8 at 22:31













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?










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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













  • 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













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.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    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

























    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.






    share|improve this answer


























      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.






      share|improve this answer
























        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.






        share|improve this answer














        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.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 9 at 5:55

























        answered Nov 9 at 5:48









        Matt Timmermans

        17.9k11432




        17.9k11432



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            How do I collapse sections of code in Visual Studio Code for Windows?

            ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ