@orangelee-666
2020-01-17T20:48:55.000000Z
字数 4841
阅读 643
//通过调整原数的顺序,使数列有序。
//稳定性:两个相同元素排序后的相对位置不发生位置交换则稳定,反之不稳定
//排序范围
* 快速排序
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=0
dfn(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);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div 2];
repeat
while a[i]<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
j:=j-1;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;