- 博客(14)
- 收藏
- 关注
原创 算法分析与实践-大作业-圆排序问题
1.问题圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。2.解析圆排列问题主要用到了回溯法。问题的解空间是一棵排列数。按照回溯法遍历每种排列,求得最小排列长度的最优解。变量n为圆的个数数组r[n]存储每个圆的半径,x[n]存储每个圆的圆心坐标,bestr[n]存储最小圆排序的半径顺序。minlen存储最小排列长度。center函数计算该圆在排列中的横坐标(首个圆的圆心坐标为0)。compute函数计算当前排列长度。Backtrack函
2020-06-14 11:34:27
597
原创 算法分析与实践-作业13-读书笔记
《算法竞赛进阶指南》读书笔记在学习了算法设计与分析基础这门课后,我还翻阅了《算法竞赛进阶指南》这本书,这本书根据CCF-NOI信息学奥利匹克竞赛涉及的知识体系进行编写,对计算机程序设计的基本技能——数据结构与算法进行了深入的讲解。我觉得通过这本书,我了解到的东西还是比较丰富的。比如字典树的概念,在初学程序设计语言的时候,字符串的基本操作最令我头疼。而字典树是一种用于实现字符串快速检索的多叉树结构。下面我们来讨论一下Trie(字典树)的基本操作过程。初始化:一颗棵空树仅包含一个根节点,该点的字符指针均指
2020-06-08 23:28:16
241
原创 算法分析与实践-作业12-图的m着色问题
1.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析color[n]存储n个顶点的着色方案,可以选择的颜色为1到m。当t=1时,对当前第t个顶点开始着色:若t>n,则已求得一个解,输出着色方案即可。否则,依次对顶点t着色1-m, 若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。3.设计bool canSet(int
2020-05-30 20:45:54
765
原创 算法分析与实践-作业11-贪心策略:最优前缀编码
1.问题2.解析3.设计int v1, v2;struct Tree { int lChild; int rChild; int root; int weight;}tree[MAX];void findMin(Tree tree[], int k) { //初始化v1 for (int i = 0; i < k; ++i) { if (tree[i].root == -1) { v1 = i; break; } } //遍寻找到第一个权值最小的
2020-05-17 12:37:35
315
原创 算法分析与实践-作业9-LCS算法
1. 问题2. 解析3. 设计代码:void f(int B[][MAX],int i,int j) { if (i == 0 || j == 0) { return; } if (B[i][j] == 2) { f(B, i - 1, j-1); printf("%c ", X[i]); } else if (B[i][j] == 1) { f(B, i...
2020-04-25 23:22:21
172
原创 算法分析与实践-作业8-矩阵链的乘法
1.问题2. 解析3. 设计void g(int p[],int m[][MAX],int s[][MAX], int n) { int j, min; for (int r = 2; r <= n; ++r) {//问题规模 for (int i = 1; i <= n - r + 1; i++)//i为起点 { j = i + r - 1; ...
2020-04-16 23:03:51
174
原创 算法分析与实践-作业7-动态规划:投资问题
1. 问题2. 解析3. 设计void Invest(int f[][MAX],int n,int m) { //f用于存放项目与投资之间的效益关系,如f[1][2],表示对第一个项目投资两万元产生的效益 //F用于存放产生的最大效益,例如F[3][2],表示有3个项目时,投资2万元产生的最大效益 //A用于存放产生最大效益时,给第k个项目分配的资金 int F[MAX][MA...
2020-04-09 19:19:12
720
原创 算法分析与实践-作业6-选第k小元素:特定分治策略
1. 问题从无序数组中找到第k小的数2. 解析3. 设计int Select(int a[], int start,int end,int k) { while(i <= end){//对数组进行分组 int iend = i + 4; if (iend >= end) { iend = end; } quickSort(a, i, iend); ...
2020-04-06 20:31:18
331
原创 算法分析与实践-作业5-最近点对问题
1. 问题P为笛卡尔平面上n>1个点构成的集合,求最近的两个点的距离(n=2k)2. 解析蛮力算法:将每个点与其他点进行计算,求得最短的距离但需要两层遍历,复杂度较高分治算法:把点集P(点个数为n)按照x轴从小到大排列当n<=3时,使用蛮力算法当n>3时,将点集分为左右大小为⌈n/2⌉和⌊n/2⌋的子集Pl和Pr,通过递归调用每次将子集一分为二,求得子集中的最短...
2020-03-29 23:20:01
272
原创 算法分析与实践-作业4-二分归并排序
1. 问题对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2. 解析二分归并排序是典型的分治算法的应用。不断将数组规模分解为原来的1/2,直至无法分解。再不断升序归并,最终归并为一个升序数组。3. 设计void merge(int a[],int b[],int start,int middle,int end) { for (int i = start; i <...
2020-03-21 13:12:00
225
原创 算法分析与实践-作业3-检索算法
1. 问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2. 解析顺序查找:二分查找:3. 设计顺序查找:int Order_search(int T[], int n, int key) { for (int i = 0; i < n; i++) { if (找到) { 返回下标 }...
2020-03-12 11:02:53
192
原创 算法分析与实践-作业2-Floyd算法和Dijkstra算法
1. 问题用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径2. 解析Floyd算法Dijkstra算法3. 设计Floyd算法void Floyd(int n,int graph[][MAXG]) { int A[MAXG][MAXG]; for (...
2020-03-07 21:19:56
371
原创 算法分析与实践-作业1-Prim算法和Kruskal算法构成最小生成树
1. 问题在一个无向图G=(V,E)中,(u,v)代表连接顶点u与顶点v的边,而w(u,v)代表此边的权重,若存在T为E的子集且无循环图,使得w(T)最小,则此T为G的最小生成树。2. 解析Prim算法:Kruskal算法:3. 设计Prim算法:void prim(int x) {//参数为默认的初始访问点 visit[x] = 1;//visit数组判断是否被访问,1为被访...
2020-03-02 19:44:03
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人