![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
本居小鈴
无尽深渊中,唯有你与我共行。
展开
-
逆序对问题的简单求法
逆序对 暴力求逆序对 根据逆序对的定义,也就是,所有元素前面元素比它大之和,具体可以看下面的代码。 long long solve(std::vector<int> & a) { long long ans = 0; for (int i = 0; i < a.size(); ++ i) for (int j = i - 1; j >= 0; -- j) if (a[j] > a[i])原创 2022-04-04 10:21:07 · 564 阅读 · 0 评论 -
【日志】常用的判断素数方法——Miller-Rabin素性检验
Miller-Rabin素性检验 Miller-Rabin素性检验是一种能够判断素性的高效算法。 费马小定理 当ppp是一个素数,且1≤a≤p−11\le a \le p-11≤a≤p−1时,有: ap−1≡1(modp) a^{p-1} \equiv 1 \pmod p ap−1≡1(modp) 这就是费马小定理。 通过费马小定理进行素性检验 如果逆着推过来,当1≤a≤p−11\le a \le p-11≤a≤p−1时,如果上述式子成立,则ppp不就是一个素数了嘛? 然而,这个是错误的。仍然存在一些(无穷原创 2022-03-21 00:51:43 · 280 阅读 · 0 评论 -
【日志】KMP
KMP 前缀函数 通俗来讲,前缀函数数组就是截止到第iii个位置时,最长的真前缀与真后缀相等的长度。当然,根据这个定义,第一个字符开始的位置其长度即为0。 通常前缀函数数组记为π\piπ,不是圆周率。 计算前缀函数 暴力 根据前缀函数的定义,当然可以通过暴力寻找真前缀与真后缀匹配的长度。当然时间复杂度也很感人。 递推 如果仔细想想的话,从i−1i-1i−1到iii,只是多了一个字符,所以上一个状态到现在的状态的关系就是多了后面一个字符。 如果多出来的字符可以匹配,那么自然是从上面的状态+1即可。 如原创 2022-02-28 10:49:46 · 64 阅读 · 0 评论 -
【日志】归并排序
文章目录步骤代码应用求逆序数 归并排序使用了“分而治之”的思想, 把大的区间分解为一个个小的区间,小的区间再分解为更小的区间,直到这个区间不再可分,那么可以保证这个最小区间一定是有序的,接着将小区间归并为大区间,从而完成排序。 步骤 分割区间 运用分治的思想,将原本大区间分割为小区间,直到区间不再可分,此时可以保证这样的区间一定是有序的区间。 归并区间 对两个子区间合并为一个大区间(合并的结果位于转移数组内),基于上面的分割结果,得到的两个区间一定是有序的结果,合并区间的时候也是按有序归并。 转移区间原创 2022-01-11 20:29:30 · 372 阅读 · 0 评论