用于在打印机上整齐打印段落的算法

时间:2010-06-05 07:05:18

标签: algorithm text formatting

首先,这不是作业,所以请不要将其标记为homewrok

我不明白这个问题。任何人都可以向我解释一下吗?这不是我不理解的英语,而是问题的一般要点。

alt text http://i47.tinypic.com/20jnwck.png

2 个答案:

答案 0 :(得分:5)

我解决这个问题的方法是什么?...当然宝贝......在这里,你可以去银盘子。

[1] Google搜索说:考虑在打印机上整齐打印段落的问题

[2]选择说~10个不明显的谷壳的网站。

[3]快速查看网站上的源代码...选择一些结构合理且有大量注释的代码。

[4]将它弹出到visual studio ..编写一些删除算法的quciky代码。

[5]遵循代码流程并将其与所述问题进行比较。

[6]手动检查一些结果。如果他们没有通过第3步。

[7]贯穿代码,直到你理解它是如何工作的。

然后你去......如何在7个无痛的步骤中学习任何东西。

周围喝酒......

我可以再给你一杯鸡尾酒吗?

这是你幸运的一天......我心情很好......所以,这里有一些伪代码......来自第一个 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

答案 1 :(得分:3)

  • 该算法应该打印段落“整洁”
  • 行末(底部除外)的填充空间不是“整洁”
  • 因此,算法应该最小化这种填充
  • “整洁度”的精确度量是每条线上填充的平方和(复合误差的一个非常常见的衡量标准,这基本上意味着它有许多小错误比几个大错误更容易接受)。