Chapter 5 String (reading notes)

版权声明

  • Algorithms 系列学习笔记来源于 Kevin Wayne 和 Robert Sedgewick 在 Coursera 网站上所授课程 Algorithms, parts I and II [1,2],课程教材 Algorithms 4th edition [3];
  • 该系列笔记不以盈利为目的,仅用于个人学习、课后复习及科学研究;
  • 如有侵权,请与本人联系([email protected]),经核实后即刻删除;
  • 本文采用 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0) 协议发布;

5. String

5.1 Background

  • Java 提供的8种基本数据类型:byte、short、int、long、float、double、char、boolean;
    • 助记:4种整型,2种浮点型,1种字符型,1种布尔型;
    • String 不是基本数据类型;
  • 字符串的2种表示方法:
    • 字符数组:
      • 转换方式:chars = str.toCharArray()
    • String:
      • 转换方式:str=new String(chars)
  • 基数和“基数”方法:
    • 基数:即进制数;
    • “基数”方法:一次只处理一位数的方法;

5.2 字符串排序

  • 字符串排序方法:
    • 低位优先:LSD,Least-Significant-Digit First;
    • 高位优先:MSD,Most-Significant-Digit First;
  • 键索引计数法:
    • 步骤:统计频率、根据频率求索引、数据分类、回写;
    • 适用范围:小整数键排序;
    • 时间复杂度: O ( 11 N + 4 R + 1 ) O(11N+4R+1)
    • 注意:通过compareTo()访问数据的时间复杂度下限为 n l o g n nlogn ,但键索引计数法通过访问数据,因此该方法进行排序的时间复杂度为线性级别;
    • 符号说明:
      • N:输入的字符串个数;
      • R:基数,即字母表中的字符数量;
  • 低位优先的字符串排序:
    • 基于键索引计数法;
    • 适用范围:仅适用于等长字符串排序;
  • 高位优先的字符串排序:
    • 基于键索引计数法;
    • 适用范围:可处理通用字符串排序问题,即不等长字符串排序;

5.3 单词查找树

  • 单词查找树:又称字典树,trie,发音同 try,E.Fredkin 在1960年根据该数据结构的作用(取出数据,retrieval)为其命名;
    • 用途:统计、排序和保存大量字符串(但不仅限于字符串);
    • 优点:利用字符串的公共前缀减少查询时间,减少无谓的字符串比较,查询效率高于哈希树;
  • R 向单词查找树:字母表中含有 R 个字符的单词查找树;
  • 单词查找树的性质:
    • 单词查找树的链表结构(形状)和键的插入、删除顺序无关;
    • 插入和删除操作需要访问数组的次数:
      • 最坏情况下为待处理字符串的长度加一;
      • 由数学证明知,在随机键构造的单词查找树中,未命中查找的成本与键的长度无关(通常仅需检查3-4个节点);
  • 三向单词查找树:TST,每个节点含有一个字符,三条连接(对应的键值分别小于、等于和大于当前键)和一个值;
    • 优点:三向单词查找树所需的空间小;
      • 三向单词查找树每个节点含有3条连接,而单词查找树中每个 节点含有 R 个连接;
  • 字符串符号表性能对比:
    • 二叉查找树:BST;
    • 2-3 树(红黑树):能保证最坏情况下的性能(实现平衡插入);
    • 哈希表;
    • 字典树(R 向单词查找树):随机情况下仅需常数次比较即可完成查找,空间开销大;
    • 字典树(三向单词查找树):需要执行对数次比较操作即可完成查找,空间开销小于 R 向单词查找树;

5.4 子字符串查找

5.4.1 各类字符串查找算法相关定义

  • 相关概念:
    • 模式:pattern,即子字符串;
    • DFA:Deterministic Finite Automaton,确定有限状态自动机;
    • NFA:Nondeterministic Finite Automaton,非确定有限状态自动机;
  • 子字符串查找算法:
    • 暴力子字符串查找算法;
    • KMP 子字符串查找算法:即 Knuth-Morris-Pratt 算法;
      • 优点:保障线性级别的性能,且无需在文本中回退;

5.4.2 各类字符串查找算法总结

算法 最坏情况 一般情况 文本中回退 额外空间需求
暴力查找 MN 1.1N 1
KMP 子串查找 M+N MR
  • 符号说明:
    • N:文本长度;
    • M:模式长度;
    • R:基数,即字母表中的字符数量;

References

[1] https://www.coursera.org/learn/algorithms-part1?.
[2] https://www.coursera.org/learn/algorithms-part2?.
[3] Sedgewick, R. & Wayne, K. (2016). Algorithms Fourth Edition. Boston: Addison-Wesley.

发布了118 篇原创文章 · 获赞 9 · 访问量 9781

猜你喜欢

转载自blog.csdn.net/Maximize1/article/details/103269874
今日推荐