切换到宽版
  • 7308阅读
  • 1回复

文件压缩 [复制链接]

上一主题 下一主题
离线gelanjie
 
只看楼主 倒序阅读 0 发表于: 2005-11-06
文件压缩

zip.exe

  提高文件的压缩率一直是人们追求的目标。近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比原来更大的压缩率。

  该算法具体如下:对一个长度为n的字符串S,首先根据它构造n个字符串,其中第i个字符串由将S的前i-1个字符置于末尾得到。然后把这n个字符串按照首字符从小到大排序,如果两个字符串的首字符相等,则按照它们在S中的位置从小到大排序。排序后的字符串的尾字符可以组成一个新的字符串S',它的长度也是n,并且包含了S中的每一个字符。最后输出S'以及S的首字符在S'中的位置p。举例:

  S: example

  1、构造n个字符串

  example
  xamplee
  ampleex
  mpleexa
  pleexam
  leexamp
  eexampl

  2、将字符串排序

  ampleex
  example
  eexampl
  leexamp
  mpleexa
  pleexam
  xamplee

  3、输出 xelpame S'

  7    p

  由于英语单词构造的特殊性,某些字母对出现的频率很高,因此在S'中相同的字母有很大几率排在一起,从而提高S'的压缩率。虽然这种算法利用了英语单词的特性,然而在实践的过程中,人们发现它几乎适用于所有的文件压缩。

  任务1:zip1.pas(zip1.exe)
  读入字符串S,输出S'和p。
  输入文件zip1.in包含两行,第1行是一个整数n(1 <=n<=10000),代表S的长度,第2行是字符串S。
  输出文件zip1.out包含两行,第1行是S',第2行是整数p。

  任务2:zip2.pas(zip2.exe)

  读入S'和p,输出字符串S。
  输入文件zip2.in包含三行,第1行是一个整数n(1<=n<=10000),代表S'的长度,第2行是字符串S',第3行是整数p。
  输出文件zip2.out仅包含一行S。
  输入样例1:
  7
  example

  输出样例1:
  xelpame
  7

  输入样例2:
  7
  xelpame
  7

  输出样例2:
  example
离线75249
只看该作者 1 发表于: 2006-11-19
你可真会转贴啊!
快速回复
限100 字节
 
上一个 下一个