数据结构与算法
总结常见的数据结构与算法
xiaok0707
这个作者很懒,什么都没留下…
展开
-
浅谈格雷编码
1. 格雷码的定义格雷码是一个二进制数系,其中两个相邻数的二进制位只有一位不同. 3 位二进制数的格雷码序列为 000,001,011,010,110,111,101,100,(可以看成一个环,第一个格雷码 000 与最后一个格雷码 001 也只有一位不同).规定序列的下标以 0 为起点,即 G(0)=000,G(7)=100G(0)=000,G(7)=100G(0)=000,G(7)=100.2. 构造格雷码通过观察找规律,可以得到以下两种手动构造格雷码的方法.2.1 交替构造从全 0 格雷码原创 2020-10-11 16:09:27 · 6840 阅读 · 1 评论 -
浅谈Manacher算法
1. 前言给定一个长度为 nnn 的字符串 S,Manacher 算法可以在 O(n)O(n)O(n) 的时间内计算出分别以 S 中的每个字符为中心,最大回文子串的长度. 通常 Manacher 算法可以用来求解一个字符串中的最长回文子串,或者是统计一个字符串中所有回文子串的个数等.2. 字符串预处理首先需要对带求解的字符串 S 填充分隔符,在每个字符的两边都插入一个特殊的符号,这里我们取 # 作为分隔符,比如 ABCD 填充之后变成了 #A#B#C#D#;再比如 ABC 填充之后变成了 #A#B#C原创 2020-08-20 12:09:56 · 211 阅读 · 0 评论 -
浅谈摩尔投票算法
1. 前言摩尔投票算法可以在线性时间复杂度 O(n)O(n)O(n) 和常数空间复杂度 O(1)O(1)O(1) 的前提下找出一组数据中的多数元素,多数元素的定义是:假设一共有 nnn 个数,那么多数元素就是出现次数严格大于 ⌊n2⌋\lfloor \frac{n}{2} \rfloor⌊2n⌋ 的数.2. 分治思想以 LeetCode169-多数元素 为例,要找出一个数组中的多数元素,可以采用分治思想.在这道题目中,明确了给定的数组一定存在多数元素,那么根据多数元素的定义可知,多数元素有且只有原创 2020-08-02 22:51:07 · 884 阅读 · 0 评论 -
浅谈表达式求值问题
1. 前言经常会遇到这样一种类型的编程题目,给定一个合法算术运算式字符串(本文不考虑非法情况的判断和处理),求出它的计算结果,通常字符串中包含了 +-×/ 四则运算、改变运算优先级的括号 () 以及整数数字.例如,要求程序输入 2×5+6×(3+2)2×5+6×(3+2)2×5+6×(3+2) 这样一个字符串,输出其正确的计算结果也就是 404040 .2. 表达式表示法表示方法有 3 种,分别是前缀表达式(波兰表达式)、中缀表达式、后缀表达式(逆波兰表达式),以之前的例子 2×5+6×(3+2)原创 2020-07-24 20:49:32 · 1105 阅读 · 0 评论 -
浅谈KMP算法
前言KMP算法用于解决字符串匹配问题,现有两个字符串 S 和 P,请求出字符串 P 在字符串 S 中首次出现的位置,通常 S 被称为文本串,P 被称为模式串. 我们规定字符串的下标从 0 开始,文本串 S 的长度为 nnn,模式串 P 的长度为 mmm. 在下面这个例子中,模式串 P 在 S 中首次出现的位置是 3.暴力匹配解决这个问题最直接的方法就是用模式串 P 的开头依次与文本串 S 中的每一个下标对齐,然后判断 S 和 P 的后续字符是否完全相等. 在最差的情况下,算法的复杂度是 O(nm)O原创 2020-07-21 18:16:03 · 765 阅读 · 0 评论