1 问题
开场白:前天和同学一起去K歌,同学们唱的很HIGH,有些甚至在点歌的时候,时不时点几首超难的歌,结果谁也不会唱,直接pass 掉。“谦让”是俺们的美德嘛,所以,我总是让着他们。但是我发现了一个奇怪的现象,我明明点了歌,结果准备了好久都没轮到我唱。后来才发现,点歌系统里面,可以将预定的歌提到最前,打个比方,现在预定的歌按照顺序是:A,B,C。你如果将B提前的话就变成了B,A,C。但缺点是它只能允许你这么干,可是假如我只是想将某首歌排到我指定的地方(我不想让它排到第一,那样太显眼了!),难道真的不可以了吗? 这不禁激发了我的兴趣,我想了一下,发现其实是可以的。
我当时的想法有点复杂,这说明自己的思维还不成熟。当时似乎是以一种直觉的方式,发现的这样一个命题:我取了个名字叫K命题:……^_^
前提:对于已存在的一种序列 s = {a,b,c,..},假设只允许做一种操作op,它用于将s中的任何元素提到最前。
结论:利用操作op,可以构造序列s的任何排列S。
要想证明这样命题不难。因为我们假设要求的序列S= {x1, x2, .. xn)我们只需按照xn, xn-1, xn-2, .. x1的顺序来操作就行了。但是,我们也只是找到了一个解,可能有些操作是冗余的。那么,有最好的方案吗?有没有一种方案,使得我们的操作步骤最少?有。