自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Manacher(马拉车)算法详解

算法的主要思路是维护一个最右回文子串,利用该区间的对称性,计算当前遍历位置为中心的回文半径,回文半径就是从中心(如果为奇回文串,就包含中心位置)到回文串一端的距离。我们可以再每个字符之间加入特殊字符,奇回文串的中心不变,偶回文串的中心就变成了特殊字符。还有另一种枚举的方法,是中心扩散法,利用了回文串的对称性,枚举每一个字符,然后从中心向两边比较,时间复杂度也为。求最长回文子串的方法,最容易想到的就是暴力枚举,将所有的回文子串都找出来,然后找做大的,时间复杂度就相当高了。,回文串可以分为奇回文串和偶回文串,

2023-07-24 14:30:40 1297 3

原创 基础分块、基础莫队详解

分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。我们很容易可以发现,在块间移动时,也有可能会有很大的震动,所以在排序时可以使用奇偶性排序,让奇数块和偶数块采用相反的对右端点的排序。我们将所以的查询都抽象成点,放到坐标轴里观察,上面的问题其实转化为我们从原点开始,我们要不重不漏的走完这些点,走到一个点就记录一个点的答案。线段树一次操作的复杂度是树的高度,而分块一次操作的复杂度取决于块的大小,我们可以写出一次操作进行的运算次数为。

2023-10-29 10:07:19 173 3

原创 new/delete详解

new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。答案是B类会引起报错。这是编译器优化的结果,因为A类中使用的是C++默认的析构函数,这是编译器已经知道析构函数什么都不会做,也就不需要记录具体的元素个数,所以编译器就没有额外申请空间,返回的指针就是动态内存正确的开始位置,所以可以正常运行。

2023-10-24 18:02:34 58

原创 全网最细【树状数组】

树状数组是利用数的二进制特征进行检索的一种树状的结构。它用于维护前缀和的数据结构,支持单点修改、区间查询;区间修改、区间查询等一系列操作。树状数组维护的元素要满足结合律和可差分的性质。

2023-09-01 17:58:19 64 1

原创 最小表示法详解

最坏情况,字符串S有大量相同元素,但不是全相同,使得。时间复杂度分析,一般情况,序列随机时间复杂度为。这里有几道运用最小表示法的习题,来练习一下吧!位置为下一个循环同构串的开头,那一定存在以。所有循环同构的字符串中字典序最小的字符串。内,就不会有最终的答案,我们就可以直接将。为开头的循环同构串是比前者更优的,因为。都不是最终的答案,所以就可以直接跳到。我没可以画一个图来理解,如下图。内,就不会有最终的答案呢?每次遍历,都能到最大值,两个区间是完全相同的,且。这里的优化类似字符串。

2023-07-18 22:35:53 148 1

原创 分治法及应用(附练习)

虽然没有优化,但是这个递归式给了我们优化的思路,我们可以想办法降低递归的时间消耗,就是减少计算矩阵乘法的次数或是改变分块的方式,改变分块的方式显然是行不通的,因为你将一个块矩阵分的小一些,其他块矩阵一定会变大,相当于没怎么变,那就只有减少计算矩阵乘法的次数了。分治是一个简单但是非常有效的算法,它的思想也很简单,就是将原问题分成几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再将这些问题的结果合并,就得到的原问题的解。下面我们分析一下归并排序的时间复杂度,有人会说,这很简单呀,不就是。

2023-07-02 00:23:58 503 1

原创 详解快速幂(附习题)

再将这些结果累乘起来,并且利用模运算的性质,在累乘过程中不断取模,防止溢出,最后就可以得到最后的答案。写成一个二进制累加的形式,再利用幂的运算规则,就可以将。的就将其乘起来,并且不断取模保证不溢出,最后遍历完。都会溢出),这时就需要快速幂来解决这个问题。,并且这样一个大的数字很难存储在计算机中(的一个二进制位,我将幂次写成二进制的形式。的二进制位,循环结束,得到的乘积就是结果。快速幂其实就是利用了分治的思想,将。的位置,就是上式中乘数的幂次。两个部分,一直细分,直到幂次。,这个结果就是模运算的结果。

2023-06-23 20:05:59 75

原创 平衡二叉树详解及C++实现

平衡二叉搜索树

2023-06-08 19:38:14 738 1

原创 KMP算法(C语言)——next数组的求解

简介:KMP算法是D.E.Knuth、J,H,Morris 和 V.R.Pratt 发表的一个模式匹配算法,可以大大避免重复遍历的情况(即消除了主串指针回溯的),从而提高算法效率。

2023-04-06 19:49:57 655

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除