算法考点

算法考点

二:函数递推,关系,最好最坏,极限

查找,折半,效率分析(规模,效率提高几倍

图的最小生成树

prim

Copy
int logo[1010];//用来标记0和1 表示这个点是否被选择过 int map1[1010][1010];//邻接矩阵用来存储图的信息 int dis[1010];//记录任意一点到这个点的最近距离 int n;//点个数 int prim() { int i,j,now; int sum=0; /*初始化*/ for(i=1; i<=n; i++) { dis[i]=MAX; logo[i]=0; } /*选定1为起始点,初始化*/ for(i=1; i<=n; i++) { dis[i]=map1[1][i]; } dis[1]=0; logo[1]=1; /*循环找最小边,循环n-1次*/ for(i=1; i<n; i++) { now=MAX; int min1=MAX; for(j=1; j<=n; j++) { if(logo[j]==0&&dis[j]<min1) { now=j; min1=dis[j]; } } if(now==MAX) break;//防止不成图 logo[now]=1; sum+=min1; for(j=1; j<=n; j++)//添入新点后更新最小距离 { if(logo[j]==0&&dis[j]>map1[now][j]) dis[j]=map1[now][j]; } } if(i<n) printf("?\n"); else printf("%d\n",sum); } int main() { while(scanf("%d",&n),n)//n是点数 { int m=n*(n-1)/2;//m是边数 memset(map1,0x3f3f3f3f,sizeof(map1));//map是邻接矩阵存储图的信息 for(int i=0; i<m; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(c<map1[a][b])//防止重边 map1[a][b]=map1[b][a]=c; } prim(); } }

Kruskal

Copy
int n, m,sum; struct node { int start,end,power;//start为起始点,end为终止点,power为权值 } edge[5050]; int pre[5050]; int cmp(node a, node b) { return a.power<b.power;//按照权值排序 } int find(int x)//并查集找祖先 { if(x!=pre[x]) { pre[x]=find(pre[x]); } return pre[x]; } void merge(int x,int y,int n)//并查集合并函数,n是用来记录最短路中应该加入哪个点 { int fx=find(x); int fy=find(y); if(fx!=fy) { pre[fx]=fy; sum+=edge[n].power; } } int main() { while(~scanf("%d", &n), n)//n是点数 { sum=0; m=n*(n-1)/2;//m是边数,可以输入 int i; int start,end,power; for(i=1; i<=m; i++) { scanf("%d %d %d", &start, &end, &power); edge[i].start=start,edge[i].end=end,edge[i].power=power; } for(i=1; i<=m; i++) { pre[i]=i; }//并查集初始化 sort(edge+1, edge+m+1,cmp); for(i=1; i <= m; i++) { merge(edge[i].start,edge[i].end,i); } printf("%d\n",sum); } return 0; }

矩阵分解,LU分解

高斯消元法

Copy
for i=1 to n do A[i][n+1] =b[i] for i =1 to n-1 do for j= i+1 to n do for k = i to n+1 do A[j][k] = A[j][k] – A[i][k]*A[j][i]/A[i][i]

邻接矩阵,传递闭包(wallshall

Copy
for(i=0;i<n;i++) for(j=0;j<n;j++) if(M[j][i]>=1) for(k=0;k<n;k++) M[j][k]+=M[i][k]; //O(n3)

Floyd

O(n3)

快排(完整过程,复杂度,中间过程,效率分析

Copy
// 输入:子数组A[l..r] // 输出:分裂点/基准点pivot的位置 p ← A[l] i ← l; j ← r+1 repeat repeat i ← i + 1 until A[i] ≥ p repeat j ← j - 1 until A[j] ≤ p swap( A[i], A[j] ) until i ≥ j   swap( A[i], A[j] )  swap( A[l], A[j] ) return j //最优O(nlog2n),最差O(n2),平均O(nlog2n)

归并排序(完整过程,效率分析

Copy
Merge(B[0..p-1],C[0..q-1],A[0..p+q-1]) i=0,j=0,k=0; while i<p and j<q do if B[i]≤C[j] A[k]=B[i], i=i+1 else A[k]=C[j], j=j+1 k=k+1 if i=p copy C[j..q-1] to A[k..p+q-1] else copy B[i..p-1] to A[0..p+q-1] //O(nlog2n)

哈夫曼编码

A,B,C,D,E权值5,4,3,2,1

A->11,B->10,C->00,D->011,E->010

分治法(代码填空,时间效率

posted @   KelvinVS  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示