zoukankan      html  css  js  c++  java
  • 字典序问题

    问题描述:

    在数据加密和 数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由26个小写英文字母组成,即A={a,b...z}.该字母表产生的长序字符串是指定字符串中 字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次.例如,a,b,ab,bc,xyz,等字符串是升序字符串.现在对字母 表A产生的所有长度不超过6的升序字符串按照字典排列编码如 下:a(1),b(2),c(3).........,z(26),ab(27),ac(28),..................
     

    对于任意长度不超过6的升序字符串,迅速计算出它在上述字典中的编码.

    算法分析:如上代码,思想为,例如egh这样的情况,那我们先把只有一位长的情况和两位长的加起来,即为26C1和26C2,然后找出起始位为a,b,c,d的三位单词的情况,它 们也排在efg之前,即为25C2,24C2,23C2,22C2(这里需要注意并不是26C2了,因为如果为a开头,那后面两位只能从b以后的数开始 选,即25个,b开头的为24个以此类推),然后考虑e开头的,因为在上面的情况过后就是高位以e开头的情况,这个时候需要注意,eah,ebh这样的并 不合理,所以我们要将getp(buffer[i],size-i,buffer[i-1]-'a'+1),buffer[i]和buffer[i-1] 进行比较即为e和g进行比较然后通过比较只有ef为开头的才合理,然后我们计算从efa到efz,继而到最后一位由于ega,egb这种不存在(通过 buffer的比较可知),因此没有其他在eg开头的情况了,即是egh是eg开头的三位数的第一种情况,此时我们的定位工作就完毕了。

  • 相关阅读:
    寄存器总结
    汇编知识积累
    windbg 配置符号路径
    UNICODE环境下读写txt文件操作
    vs2010 安装项目完成桌面快捷方式无法定位程序文件夹 解决方法
    spring源码解析之属性编辑器propertyEditor
    springboot国际化与@valid国际化支持
    No identifier specified for entity
    springboot 项目中css js 等静态资源无法访问的问题
    Git教程
  • 原文地址:https://www.cnblogs.com/disneyland/p/4491561.html
Copyright © 2011-2022 走看看