算法-字符串

字符串排序

一、键索引计数法

  1. 时间复杂度:线性时间,排序N个键为0-R-1需要11N+4R+1次。因为不是继续比较的排序。计数排序嘛,分配型的排序方法,以空间换时间。
  2. 适用:小整数键
  3. 步骤:频率统计,频率转化为索引,数据分类,数据回写。
  4. 特点:是其他三种方法的基本操作

二、低位优先字符串排序(LSD Least-Significant-Digit First)

  1. 时间复杂度:基于键索引排序法 对基于R个字符的字母表的N个长度为W的元素,LSD需要访问~7WN+3WR次数组,空间复杂度为O(N+R)
  2. 适用:定长字符串
  3. 特点:是稳定排序的一种

三、高位优先字符串排序

  1. 时间复杂度:亚线性,最坏情况下为线性。
  2. 适用:不定长的随机字符串
  3. 特点:递归算法,和快排类似,采用切分,一定要搭配插排适用,不然空间复杂度爆炸(N+WR)。插排的阈值M应该为基数R的平方根级别。
  4. 最坏情况:数组含有大量重复键或较长的公共前缀(比如域名)

四、三向字符串快速排序

  1. 时间复杂度:N-Nw,w为字符数组中最长字符串的长度。
  2. 适用:含有较长的公共前缀或大量重复主键的情况。专门为了弥补MSD算法缺陷而设计的,结合三向切分快排思想。
  3. 特点:递归算法,三向快排的思想,较为通用(和归并排序的情况差不多,最好最坏情况上下界差距不是特别大)是原地排序的方法,空间复杂度为W+logN
五、KMP算法:
  1. 时间复杂度:M+N,M为模式长度,N为字符串长度
  2. 空间复杂度:~MR,R是基数
  3. 适用:重复字符的字符串,如AAAAB/BABABAB
  4. 特点:(1)代码简洁。(2)采用有限自动状态机(一个数组)记录输入后状态机的状态。(3)充分利用部分匹配串,指向字符串的指针i始终++,不再回溯,而指向模式的指针j模拟在状态机运行状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值