| @ -0,0 +1,98 @@ | |||
| def extraSpace(S, M, i, j): | |||
| """ | |||
| Computes the number of extra characters at the end of | |||
| the line. | |||
| Between each word there is only once space. | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| :param i: start word index | |||
| :param j: end word index | |||
| """ | |||
| extraSpaces = M - j + i | |||
| for x in range(i, j + 1): | |||
| extraSpaces -= len(S[x]) | |||
| return extraSpaces | |||
| def badnessLine(S, M, i, j): | |||
| """ | |||
| Computes Line badness. This is the number of | |||
| extra spaces or infinity if the length exceeds M | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| :param i: start word index | |||
| :param j: end word index | |||
| """ | |||
| es = extraSpace(S, M, i, j) | |||
| if es < 0: | |||
| return float("infinity") | |||
| return es | |||
| def minBad(S, M, i): | |||
| """ | |||
| Computes the badness of a paragraph as the | |||
| badness of the worst line in the paragraph not | |||
| including the last line. | |||
| *this is recursive | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| :param i: start word index | |||
| """ | |||
| if len(S) == 0: | |||
| return 0 | |||
| # Calculate the current line's badness | |||
| curBad = 0 | |||
| k = i | |||
| while curBad > badnessLine(S, M, i, k): | |||
| curBad = badnessLine(S, M, i, k) | |||
| k = k + 1 | |||
| return max(curBad, badnessLine(S, M, k)) | |||
| def minBadDynamic(S, M): | |||
| """ | |||
| Write a procedure minBadDynamic that implements | |||
| the function mb' using dynamic program- | |||
| ming. It should take only two parameters: S and M | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| """ | |||
| pass | |||
| def minBadDynamicChoice(S, M): | |||
| """ | |||
| Write a procedure minBadDynamicChoice that implements | |||
| the function mb 0 using dynamic | |||
| programming. In addition to returning mb(S, M ), it | |||
| should also return the choices made | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| """ | |||
| pass | |||
| def printParagraph(S, M): | |||
| """ | |||
| which takes two parameters: S and M that displays the words in S on | |||
| the screen using the choices of minBadDynamicChoice. | |||
| What is the asymptotic running time of your | |||
| algorithm? | |||
| :param S: List of words | |||
| :param M: Max length of line | |||
| """ | |||
| pass | |||