2024.02.01_学习日记
天气:阴
学习地点:家
学习时长:5h
学习内容
- mysql索引
B树,有一个degree值,当前节点数满了就取中间元素向上溢出,从下往上。具体看视频。
B+树,跟b树一样,但是向上溢出要的时候元素要保留,并且生成一个指针,从左指向右。所有数据都会出现在叶节点。
hash存储,容易引发hash碰撞,因为经过哈希函数计算后,可能算出来的值一样,这个时候往后面加链表就行。
聚集索引和二级索引:聚集索引放id,挂全部信息,二级索引放后面的信息,挂id,如果找一个名字的所有信息,就先在二级索引里找名字,名字下面挂了id,然后回表查询id对应的全部信息。
索引设计原则: - manacher算法
暴力解法:从左往右遍历每个位置,看左右两边是不是相等,然后统计最大回文子串长度,但是会有奇偶情况,所以把每个字符两边都加一个#sharpe,然后再遍历,最后结果除以2即可。
manacher解法:
回文直径、回文半径:回文的长度、长度/2
R:从左往右遍历的时候,每个位置回文直径的右边界位置,只增不减,一直更新。
C:遍历的时候最右边界位置的那个中心位置。
这个题核心是,首先把字符串中间两边加上#,然后生成一个数组,数组内容是当前位置的最大回文半径,同时有R和C两个值需要更新,初始值为-1。一共有四种情况,第一种i位置在R范围外面,这时候只能暴力寻找回文半径,然后是在R范围内,首先找到2C-i位置,就是相对于中心点的对称位置i1,这个位置三种情况,第一,i1左回文位置半径在L右边,这时候i的回文半径=i1回文半径,第二,i1左回文位置半径在L左边,这时候i半径就是R-i,第三,回文半径跟L重合,这时候i半径需要暴力尝试从R位置开始,R位置内的一定重合。一共四种情况,代码首先看边界条件,空就返回0。然后求出i最少的回文半径先给到当前位置,当R < i的时候,等于1,>i的时候,就等于R-i和carr【i1】这个半径的最小值。然后再对其依次遍历,当i位置+最小半径和-最小半径不越界的时候,如果这两个位置相等,carr【i】+1,否则break,然后更新一下R和C,更新max(整个数组最大回文子串长度),最后返回max-1,因为半径大小-1才是最后的最大回文长度。 - 最长回文子串(lc5)
这个题就是用manacher算法写,生成数组可以用“#”+’#’.join(s)+’#’,用列表也可以,最后记得join,这个题要想清楚最后生成字符串时候的开始位置和结尾位置。