2014-02-26 109 views
1

我想这是一个有点CS的问题,而不是一个“编程”的问题,但它来是因为该程序我想写的了,所以......肢解字符串排序

假设我有一串字符串,我按照ASCII顺序对它们进行排序。假设我现在用“Z”替换每个“A”。该列表是否仍然按排序顺序?

答案显然是“不”。例如,如果我们的排序列表最初读数

  • 安迪
  • 贝丝
  • 查理

然后切割后,它会读取

  • Zndy
  • 贝丝
  • Charley

这显然是错误的; Zndy应该在最后,而不是开始。


现在让我稍微改变一下过程。假设不是用“Z”替换“A”,而是用“AZ”代替它。该名单仍然排序现在??

好,同时我们原来的例子,它成为

  • AZndy
  • 贝丝
  • 查理

...这仍然正确排序。

在这一点上,我无法证明这总是成功找到一个失败的例子。任何人都可以为我解决这个问题吗?

回答

1

这是事实。

在排序列表中,每行都有一个属性,它是下一行公共前缀的长度。

在排序和维护排序顺序后,对该行的公共前缀长度之后的行进行的任何更改都不重要。

0

考虑编写你的证据考虑以下几点:

  1. 考虑:字符串列表是为了(即[I] < A [1 + 1])
  2. 断言:如果更换与AZ是仍然秩序列表

    考虑每个字符串之前是...... [A] ..... 后每个字符串将.... .... [AZ] ....

(其中每个字符串可能会或可能不会有一个“A”的证明留作练习提问吧

​​

休息

1
  • 是否的问题整个列表在切割之后仍然可以归类为任意字符串仍然存在的问题排序。列表案例应该通过归纳进行。 (我想!

  • 给定任意一对字符串,它们共享一个相同字符的前缀(可能是空的)。下一个字符[或缺少]是定义两者的相对顺序的“活动字符”。

  • 如果通用前缀不包含“A”,则残缺不会改变它。

  • 如果通用前缀确实包含“A”,则残缺将相同地更改这两个前缀,因此它们保持相同。

  • 如果一个字符串在公共前缀后面立即结束,则发生的任何其他字符串都不会影响相对排序。

  • 如果一个字符串中的活动字符是“A”,那么它不能是另一个字符串中的“A”。 (否则,它不会是活动字符,它将位于共享前缀中。)在活动字符后添加“Z”不会影响相对顺序。

也就是说,我认为,构成了完整的证据...