算法学习笔记
记录常用算法学习的笔记
余 一
人类的悲欢并不相通
展开
-
【算法】素数(质数)判断方法
素数(质数)的判断在算法问题中经常遇到,这里小结几种常用的判断方法。首先,我们来看一下素数(质数)的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。我们可以从它的定义得到判断素数的 第一个方法: 从2到n - 1, 判断是否存在能被n整除的数,既(n%i == 0, 2 <= i <= n - 1),如果有就不是素数,否则为素数。(这里为了比原创 2017-11-29 17:05:32 · 62851 阅读 · 8 评论 -
【算法】快速排序
快速排序的思想快速排序通过将一个数组划分成两个子数组, 然后通过递归调用自身为每一个子数组进行快速排序来实现.如何进行划分设定关键字(基准数), 将比关键字小的放在一组, 比关键字大的放在另一组.下面将以数组[6,1,2,7,9,3,4,5,10,8]为例, 演示排序过程原创 2018-02-22 11:20:27 · 314 阅读 · 0 评论 -
堆排序
注:该篇文章会与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。 堆排序依赖的是一种堆的数据结构。什么是堆呢? 堆要满足两个特点:堆是一棵完全二叉树任意父节点大于它的两个子节点(大根堆) 堆是顺序储存,也就是说它的所有节点存放在数组中。因为它是连续的,可以通过下标来获取它的父节点...原创 2019-07-21 09:26:09 · 133 阅读 · 0 评论 -
数据结构&算法学习笔记: 线段树
单点更新、区间求和以及求区间求最大值#define lson rt<<1, left, m#define rson rt<<1|1, m + 1, rightconst int maxn = 1e5+5;using namespace std;struct Node{ int value; int left,right; int...原创 2018-02-16 21:47:35 · 299 阅读 · 0 评论 -
数据结构&算法学习笔记: 快速幂&矩阵快速幂
1.快速幂 时间复杂度: O(logN)int pow(int a, int n){//计算a^n int res = 1; while(n > 0) { if(n & 1) //n % 2 == 1 res = res * a; a = a * a; n = n >> 1; } re原创 2018-03-06 15:26:50 · 320 阅读 · 0 评论 -
数据结构&算法学习笔记: BP算法&KMP算法
1.暴力(普通)匹配算法(BP算法)/* BP(Bruth-Force)算法, 简单的模式匹配算法最好的平均时间复杂度O(n+m)最坏的平均时间复杂度O(n*m)主串长度为n,子串长度为m */int Index_BF(string S, string T, int pos){//从S的pos位置开始,返回子串T在S中第一次出现的位置序号,未出现则返回-1 int i...原创 2018-03-07 19:50:07 · 1109 阅读 · 0 评论 -
数据结构&算法学习笔记 二叉查找树
链表、堆栈和队列都是线性数据结构。树是非线性的、二维的数据结构。树的节点包含两个或更多的链接。二叉树是所有节点都包含两个链接的树。 同一个节点的子节点称为兄弟节点。二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。一颗二叉查找树(没有值相同的节点)有这样的特征:它的任何左子树上的值都小于其父节点的值,而它的任何右子树上的值...原创 2018-02-01 15:20:02 · 403 阅读 · 0 评论 -
动态规划(Dynamic Planning) Summary
动态规划思想中包含了贪心思想、和记忆化思想。 其中,记忆化思想是主体思想(同一件事情不做两次,保证每一个状态最多只处理一次),这样保证了动态规划的高效性。动态规划的特点是:大问题可以划分若干个子问题(子问题与大问题性质相同但是规模变小)计算子问题中存在重叠的部分处理动态规划的要点:要会用问题的特征参数描述当前问题状态转移方程(状态值之间的关系)(最重要的一点,找到状态转移方程,问题也就基原创 2017-11-11 09:57:07 · 1654 阅读 · 0 评论