@orangelee-666
2020-01-17T12:48:55.000000Z
字数 4841
阅读 762
//通过调整原数的顺序,使数列有序。
//稳定性:两个相同元素排序后的相对位置不发生位置交换则稳定,反之不稳定
//排序范围
* 快速排序
sort(a+1, a+n+1)
selection sort; insertion sort; bubbie sort merge sort 计数排序(数据量大,数据本身小)
基数排序
radix sort
........
push-back()//末尾插入元素pop-back()//末尾弹出元素empty()//返回是否为空size()//返回大小
字符组成的序列
一个模式串a,一个待匹配串p,找到a的字串与p相等。
暴力算法:
取a每个位置比较
设a长度n,b长度m,平均复杂度o(n)
Best O (n) worst 0(n*m)
哈希:string->int
对应关系
n+m,有一定概率出错。
* KMP克努特.莫里斯.普拉特算法:a的第i个前缀等于最长的后缀的长度。*
Next [1] = 0;…cpp// O (n)For (int I = 2; i<=m; i++){Int t = next [i-1];While (t && a[t]! = a [t-1]) t = next[t];Next [i] = t+ (a[t] == a [i-1]);}
一堆串a,一个串p。
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。
消息身份验证代码 (MAC)哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码 (MDC) 哈希函数则用于数据完整性
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法
O(logn) O(1) O(1) 最小堆最简单的实现是二叉堆,这种实现在上述各种操作的时间复杂度均为$O(\log n)。
对于个数,建立二叉堆的时间复杂度为。
$O(\log n)$。
while(x<=n)T[x]+=val, x+=x & -x//修改while(x) ret+=t[x], x-=x&-x//求值
跑得比线段树还快。。。
假定所有节点的编号都是1-n,边编号1-n;
tarjan
dfn[x]//一个节点在Dfs时访问到的程序
low[x]某种最小值
tarjan主要基于dfs
dfn[x]=low[x]=++index;s.push(x);instack[x]=ture;for each edge(x,y)if[!dfn(y)];{dfs(y);low(y)=min(low(x),low(y));{else if instack(y)low(x)=min(low(x),low(y));}}if [dfn(x)]==[low)(x)];{while (1){t=s.pop(); instack(x)=false;if(t==x)break;}}
dfs(u,fa);{dfn(u)=low(u)=++index;int n=ch=0dfn(v,u)low(u)=min(low[v],low[u])if(low[v]==dfn[v]) bridges.push_back(u,v);if(low[v]==dfn[u]) is_ap(u)=1;++_ch;elsse if(a!=NULL && v!=f[a]){low[u]=min(low[u]////)}}
错误程序
简单最短路:不重复的边
无负权边:不可能出现重复的边
Dijkstra算法的特点是:图上不能含有负权边、适合在稠密图上运行
堆优化Dijkstra算法的特点是:图上不能含有负权边、适合在稀疏图上运行。
Bellman-Ford算法的特点是:能够检测负权环。
O(nm) Floyd算法的特点是:能求出所有点对间最短路、代码简短且常数小、适合在稠密图上运行。
O(n^3);空间O(n^2)SPFA(实际上不存在)
m+nlsgn边权最小的生成树
O(v2) O(elog2v) O(elog2e) 状态(f的值) 转移 决策(决定) 后交叉性 搜索
多个函数互相调动
search
DAG:youxiangwuhuan
空间复杂度可以优化到O(V)。普通O(N*V)。
物体有一个变为无限个。
* 详见:https://baike.so.com/doc/5989126-6202093.html
0和1除外,只能被1和它本身整除的数叫素数
虽然这个语言已经快被我们遗忘了,但是经典就是经典。
procedure sort(l,r: longint);vari,j,x,y: longint;begini:=l;j:=r;x:=a[(l+r) div 2];repeatwhile a[i]<x doinc(i);while x<a[j] dodec(j);if not(i>j) thenbeginy:=a[i];a[i]:=a[j];a[j]:=y;inc(i);j:=j-1;end;until i>j;if l<j thensort(l,j);if i<r thensort(i,r);end;