
算法导论
九幽孤翎
蜉蝣只有认清自己的渺小,才能有化茧成蝶的一天
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法导论学习笔记——32 字符串匹配
研究问题:解决方法与时间复杂度32.1朴素字符串匹配就是以目标串中的每个元素为起点进行匹配,当匹配到模式串尾部,匹配成功,不然从下个元素重新匹配32.2Rabin-Karp 算法主要思想,通过预处理模式串与目标串第1到i个数之和对某个数的模,然后快速筛掉无效匹配32.3 ac自动机还没学,以后再补32.4 Knuth-Morris-Pratt主要思想:优化朴素的暴...原创 2020-03-24 14:47:42 · 509 阅读 · 0 评论 -
算法导论学习笔记——15 动态规划
15 动态规划动态规划的本质就是状态的转移,新状态=原状态+改变状态的收益,保存每种状态的值,用空间换时间,节省递归解决重复子问题的时间。动态规划两种实现方法:1.带备忘的自顶向下法仍用递归解决问题,但每一步保存当前状态的值下次直接调用这个值,与记忆化dfs的想法类似。2.自底向上法当子问题的求解只依赖于某个更小的子问题时,可以按规模从小到大求解。...原创 2020-03-17 14:56:17 · 533 阅读 · 0 评论 -
算法导论学习笔记第26章 & acm专题训练7——最大流
26最大流1.研究的问题可以把最大流问题用货运公司的运货来模拟。有一个源点持续不断地产生新货物,并通过有限条道路运往一个汇点,每条道路有限定的容量,且进入一个节点的速度和出一个节点的速度相同。求源点到汇点的最大速率。2.运用算法条件容量值为非负数,对于两个节点,u,v,(u,v)与(v,u)至多存在一个,如果不连通,令c(u,v)=0,不允许自循环,图必须连通.c(u,v)指的是容量,f...原创 2020-03-09 19:24:32 · 946 阅读 · 0 评论 -
算法导论学习笔记——12(补充)二叉树的遍历
1.中前序推层序遍历#include <bits/stdc++.h>using namespace std;const int maxn=50;int mid[maxn],fr[maxn];struct node{ int l,r;}a[maxn];int build(int la,int ra,int lb,int rb)//la,ra表示中序遍历 lb,rb表示前...原创 2020-03-02 03:47:41 · 380 阅读 · 0 评论 -
算法导论学习笔记——12.1二叉搜索树
map<int,int>mp[maxn];void insert(int idx) { if(!num[idx]) { num[idx] = m; mp[m]=idx; return ; } if(m > num[idx]) insert(idx * 2); else insert(idx * ...原创 2020-03-02 03:42:50 · 454 阅读 · 0 评论 -
算法导论学习笔记——10.2链表
10.2链表个人对链表的理解——一个简单的结构体struct node{ int l,r,key;}a[maxn];int ListSearch(k){ int x=st; while(x!=-1&&a[x].key!=k) x=a[x].r; return x;}void ListInsert(int x){ a[x].r=st; a[s...原创 2020-03-02 02:56:20 · 394 阅读 · 0 评论 -
算法导论学习笔记——8.2计数排序
8.2计数排序#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;typedef pair<long long,l...原创 2020-03-01 11:10:29 · 417 阅读 · 0 评论 -
算法导论学习笔记——7快速排序
7快速排序ll Partition(ll A[],ll p,ll r){ x=A[r]; i=p-1; for(j=p;j<=r-1;j++) { if(A[j]<=x) { i++; swap(A[i],A[j]); } } swap(A[i+1],A[r]); return i+1;}完整程序#include<cstdi...原创 2020-03-01 10:17:03 · 379 阅读 · 0 评论 -
算法导论学习笔记——6堆排序
6堆排序第一步:MaxHeapify纯翻译代码void MaxHeapify(ll A[],ll i){ l=left[i]; r=right[i]; if(l<=A.heapsize()&&A[l]>A[i]) largest=l; else largest=i; if(l<=A.heapsize()&&A[r]&...原创 2020-03-01 00:18:17 · 408 阅读 · 0 评论 -
算法导论学习笔记——5.1雇佣问题(未完待续)
5.1雇佣问题这章内容未编辑完因为概率论没学,所以真的看不懂这类概率期望的问题QAQ等到学完后回来完善纯翻译代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int maxn=1000000;ll n,i,best,...原创 2020-02-22 17:37:09 · 492 阅读 · 0 评论 -
算法导论学习笔记——4.2矩阵乘法的Strassen算法
4.2矩阵乘法的Strassen算法Strassen算法的时间复杂度为o(n^lg7),我非常不推荐用此类方法解决矩阵乘法的问题,下面的c++代码都是我以前整理的矩阵快速幂板子是一种远远优于Strassen算法的算法下面是矩阵乘法的伪代码直接给出我以前整理过的模板这边其实可以特判0来进行一个小优化void cheng(ll a[][N],ll b[][N],ll n)//a=a*b...原创 2020-02-22 17:11:07 · 1215 阅读 · 1 评论 -
算法导论学习笔记——4.1最大子数组问题
4.1最大子数组问题这类问题之前我都是用dp做的,通过刷新下标st与ed,来找到答案。pst指的是可能的开头(possible start);我的做法也是练习4.1-5的一个答案pst=st=ed=1,maxsum=-inf,sum=0;for(i=1;i<=n;i++){ sum+=a[i]; if(sum>=maxsum) st=pst,ed=i,maxsum=su...原创 2020-02-22 16:11:38 · 475 阅读 · 0 评论 -
算法导论学习笔记——2.3.1分治法——习题2-4逆序对数
前两天做树状数组和线段树专题时碰到过当时的做法如下思路:从前往后读,读一个数x,让a[x]+=1,然后让ans+=∑(i=x+1…n)a[i],这个地方用线段树或者树状数组优化降低时间复杂度为lgn再优化方法:离散化时间复杂度o(nlgn)学习了分治法后,发现分治法的时间复杂度也是o(nlgn)当然这里也能用离散化优化分治法代码#include <bits/stdc++.h&...原创 2020-02-22 10:20:57 · 746 阅读 · 0 评论 -
算法导论学习笔记——2.3.1分治法(归并排序)
2.3.1分治纯翻译代码void merge(ll A[],ll p,ll q,ll r){ ll n1,n2; n1=q-p+1; n2=r-q; for(i=1;i<=n1;i++) L[i]=A[p+i-1]; for(j=1;j<=n2;j++) R[j]=A[q+j]; L[n1+1]=inf; R[n2+1]=inf; i=1; j=1;...原创 2020-02-22 09:21:25 · 486 阅读 · 0 评论 -
算法导论学习笔记——2.1插入排序
2.1 插入排序纯翻译代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int maxn=1000000;ll n,A[maxn];int main(){ ll i,j,key; scanf("%lld",&...原创 2020-02-21 21:55:43 · 438 阅读 · 0 评论