25.6.17 闲话:拼数怎么做?
邻项交换
问题:
- 有一全序集
S 上的全序\prec ,给定S 中元素组成的序列p 。 - 定义了序列的价值
f(p) ,若q 是p 交换了一对p_{i+1}\prec p_i 的p_i,p_{i+1} 之后的排列,有f(q)\le f(p) 。 - 如何排列
p 以最小化f(p) ?
结论:排序
证明:如果没有完成排序,一定存在
如果是偏序,这个结论就不一定正确了。
拼数
考虑最小化,最大化是一样的。
考虑构造这么一个全序
- 定义
A\prec B 当且仅当A+B<B+A ,此处+ 为字符串拼接。
可以证明这是一个全序:
- 定义
a,b 分别为A,B 在\lvert\Sigma\rvert 进制下的数。 -
- 因此
a\prec b\land b\prec c\Longrightarrow a\prec c 。
而交换相邻的
不能比出大小的串按编号定义顺序,这样就是全序了。