Алгоритм аккуратной печати абзаца на принтере - PullRequest
1 голос
/ 05 июня 2010

Прежде всего, это не домашняя работа, поэтому, пожалуйста, не отмечайте ее как homewrok

Я не понял этой проблемы. Кто-нибудь может мне это объяснить? Я не понимаю английский, а скорее суть проблемы.

альтернативный текст http://i47.tinypic.com/20jnwck.png

Ответы [ 2 ]

5 голосов
/ 05 июня 2010

Мой метод решения этой проблемы? ... Конечно, детка .... Вот ты иди .. заслужил серебряное блюдо.

[1] Поиск в Google, скажем, рассмотрим проблему аккуратной печати абзаца на принтере

[2] Выберите, скажем, ~ 10 сайтов, которые не являются очевидными побрякушками.

[3] Взгляните на исходный код на сайте ... выберите код, который хорошо структурирован и содержит множество комментариев.

[4] Вставьте его в визуальную студию .. напишите какой-нибудь быстрый код, который исключает алгоритм.

[5] Следите за ходом кода и сравните его с заявленной проблемой.

[6] Проверьте несколько результатов вручную. Если они не пройдут, перейдите к шагу 3.

[7] Выполните код, пока не поймете, как он работает.

И вот, пожалуйста ... Как научиться чему угодно за 7 безболезненных шагов.

Напитки все вокруг ...

Могу я принести тебе еще один коктейль?

Это вам удачный день ... У меня хорошее настроение ... Итак, вот небольшой псевдокод для вас .... с first Google hit ... даже есть номера строк, поэтому вы можете задавать вопросы о определенных строках ... славных дней ... grrrr.

Lets assume that for all k s where 1 <= k <= n lk < M. PRINT_NEATLY is a bottom-up dynamic-proramming algorithm for the above recursive equation.
Lets create another array lineend[n] to record the end of line word number.


PRINT_NEATLY(n, M, l)
1   for i  <-- n to 1
2       p <-- i
3       CharsLeft <-- M - lp
4       while (CharsLeft - lp+1 -1) > 0 and p < n
5           do  CharsLeft <-- CharsLeft - lp+1 - 1
6                   p <-- p + 1
7       if p = n
8           then c[i] <-- 0
9                   lineend[i] <-- n
10          else
11              c[i] <-- a big number, probably the Maximum nuber for this type.
12              sum_lk <-- 0
13              for j <-- i to p
14                  sum_lk <-- sum_lk + lj 
15                  cost <-- ( M -j + i - sum_lk )3 + c[j+1]
16                   if  cost < c[i]
17                       then c[i] <-- cost
18                               lineend[i] <-- j 

19    // Print paragraph
20    start <-- 1
21    while start <= n
22        do
23            for word <-- start to lineend[start]
24                print  ln
25            print newline
26            start <-- lineend[start] + 1
3 голосов
/ 05 июня 2010
  • Алгоритм должен печатать абзац "аккуратно"
  • Пробел в конце строки (кроме конца) не является "аккуратным"
  • Таким образом, алгоритм должен минимизировать такое заполнение
  • Точная мера "аккуратности" - это сумма квадратов отступа в каждой строке (очень распространенная мера составных ошибок, которая в основном подразумевает, что допустимо иметь много мелких ошибок, чем несколько больших).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...