字符串学习(3)

来源:互联网 发布:淘宝如何推广自己的店铺 编辑:程序博客网 时间:2024/06/05 03:52

1、grep命令是一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。全称:global regular expression print,表示全局正在表达式版本,使用权限是所有用户。

Grep用来查找字符串,find用来查找单个字符。

 

2、卡特兰数公式h(n)=C(2n,n)/(n+1),适用于出栈情况求和。


3、哈夫曼编码是一种无损二进制编码算法,其加权路径长度最小,字符串”alibaba”的二进制哈夫曼编码有 13 bit

分析一:

构造哈夫曼树的最短路径,越接近根节点,权值越小,a,b,l,i从多到少,从根结点开始,左0右1构造哈夫曼树,依次为

a(0),b(10),l(110),i(111). 这样哈夫曼编码为0 110 111 10 0 10 0共13位,此为最短。

分析二:

哈夫曼树叶叫做最优二叉树,是权值越大的点离根结点越近,导致整个树权值最小。

选择最小的两个点作为左右结点,然后和作为父节点,在剩下的点以及父节点中选择最小的两个依次构造,形成哈夫曼树左边数值为0,右边是1.

哈夫曼编码是将各个点的值加起来最小,长度计算就是把各个点的值乘以路径长。

例如a(3),b(2),l(1),i(1)

 

长度就是3l+i+2b+1a=13

 

4、已知串S=”aaab”,其中Next数组值为:0123

分析:

前两位:next数组值前两位一定是01,即aaab的前两位aa对应01,即next数组第1、2位为0和1;

第三位:3a前面是2a(2a表示序号为2的a),2a的next数组值为1,将2a与1a相比较,两者都是a,所以3a的next值为2a的next值加1,即2;

第四位:4b前3a的next值为2,3a与2a相比较,二者相同,则其next值为2a的next值加1,即为3.

所以结果为0123.

 

如果比较的时候碰到与前一位字符“不同“时候,就要以前一位的next值为序号,找到这个序号对应的字符,再进行比较,如果与之相同,就用这一位的next+1;如果仍然不同,就继续重复这个操作直到这个操作找到相同字符为止。如果一直重复到第一位还找不到,则将所求位的next值置为1

 

分析二:


0 0