算法设计与分析期末复习大全(算法填充题+综合题)
目录
- 算法填充题
- 子集生成问题
- 全排列生成问题
- 哈密顿回路问题
- 八皇后问题
- 最大子段和问题
- 最长公共子序列问题
- 综合题
- 1. 贪心法(设计+证明)
- 2.0/1背包问题(证明+动态规划法计算过程)
- 3.货币兑付问题(证明+动态规划法计算过程)
- 4.多段图最短路径问题(证明+动态规划法计算过程)
- 5.多机调度或批处理调度(限界函数设计+搜索过程)
- 6.TSP问题(搜索空间树及算法)
算法填充题
子集生成问题
- 问题描述
子集生成是暴力求解算法中比较经典的问题,给出集合A,求得相应的子集,进行打印。
- 解法一:增量构造法
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 300
int A[100];
void print_subset(int n,int *A,int cur)
{for(int i=0;i<cur;i++)printf("%d ",A[i]);//输出子集 当前的集合 printf("\n");int s=cur?A[cur-1]+1:0;//确定当前最小的可能值 如果这里不是 这里特殊的就是cur==0时 其他的就是选比前一个大1的 for(int i=s;i<n;i++){A[cur]=i;//将i加入当前的集合print_subset(n,A,cur+1);// 递归构造子集 }
}
int main()
{int n;scanf("%d",&n);print_subset(n,A,0);
}
- 解法二:位向量法
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 300
int B[100];
void print_subset(int n,int *B,int cur)
{if(cur==n){for(int i=0;i<cur;i++)if(B[i])printf("%d ",i);printf("\n");return ;}B[cur]=1;print_subset(n,B,cur+1);//选 B[cur]=0;print_subset(n,B,cur+1);//不选
}
int main()
{int n;scanf("%d",&n);print_subset(n,B,0);
}
- 解法三:二进制法(简单)
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 300
int B[100];
void print_subset(int n,int s)
{for(int i=0;i<n;i++)if(s&(1<<i))printf("%d ",i);printf("%n");
}
int main()
{int n;scanf("%d",&n);for(int i=0;i<(1<<n);i++)print_subset(n,i);
}
原文链接:https://blog.csdn.net/liyanfeng1996/article/details/52821868
全排列生成问题
- 问题描述
对于给定的集合A{a1,a2,…,an},其中的n个元素互不相同,如何输出这n个元素的所有排列(全排列)。
- 算法实现 (递归)
#include <iostream>
using namespace std;
const int maxn=1000;
int a[maxn];
void swap(int i,int j)
{int temp=a[i];a[i]=a[j];a[j]=temp;
}
void perm(int k,int m,int pk,int pm)//k,m一般取起始和终点位置,k是不断变化的
{//k是中间变量,m初始化为参与拍列元素的起始坐标和终止坐标//pk和pm分表表示参与排列元素的起始和终止坐标,不变的量。if(k==m){//当k换到最后的时候,便是出口,是已经交换好的序列for(int i=pk;i<=pm;i++) cout<<a[i];cout<<endl;}else{for(int i=k;i<=m;i++){swap(k,i);//一部分一部分的交换,最后进行还原perm(k+1,m,pk,pm);//模拟一下过程,一开始求解N确定一个元素后,求解N-1,依次类推。swap(k,i);//还原}}
}
int main()
{int x;cin>>x;for(int i=1;i<=x;i++)a[i]=i;perm(1,x,1,x);return 0;
}
原文链接:https://blog.csdn.net/qq_29980371/article/details/72553303
哈密顿回路问题
- 问题描述
算法
算法实现
采用邻接矩阵存储,数组 arc[n][n] 存储顶点之间的边的情况,为了避免在函数之间传递参数,将数组arc设为 全局 变量,设数组 x[n] 表示哈密顿回路经过的顶点。
八皇后问题
- 问题描述
在8 x 8的棋盘上摆放8个皇后,而且八个皇后中的任意两个是不能处于同一行、同一列、或同一斜线上。也可以拓展到n皇后问题,即在n✖n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。
算法
算法实现
皇后k摆放在k行x[k]列的位置
最大子段和问题
- 问题描述
- 算法实现
变量center表示序列的中间位置,数组 a[n] 存放整数序列
最长公共子序列问题
- 问题描述
- 算法实现
综合题
1. 贪心法(设计+证明)
贪心算法的设计思想:
- 贪心算法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。贪心算法对于大部分的优化问题都能产生最优解,但不能总获得整体最优解,通常可以获得近似最优解。
贪心算法的证明:
2.0/1背包问题(证明+动态规划法计算过程)
- 证明(反证法)
- 动态规划法计算过程
3.货币兑付问题(证明+动态规划法计算过程)
题目: 在面值为(v1, v2, …, vn)n种货币中,需要支付y值的货款,应如何支付才能使货币支付的张数最少。设计动态规划算法求解该问题。
证明
解决
示例:面值(1, 2, 5, 10),支付8
示例:面值(2, 5, 10),支付8
4.多段图最短路径问题(证明+动态规划法计算过程)
问题
证明
动态规划法计算过程
5.多机调度或批处理调度(限界函数设计+搜索过程)
问题描述
限界函数设计
搜索过程
(1)在根结点,将sum1和sum2分别初始化为0,估算目标函数的上界为41,将根结点加入待处理结点表PT.
6.TSP问题(搜索空间树及算法)
- 问题描述 假设有一个旅行商要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。旅行商有一个要访问城市的列表和每两个城市之间旅行的开销。需要求出开销最短的一种走法。
- 搜索空间树
- 算法
算法设计与分析期末复习大全(算法填充题+综合题)相关推荐
- 计算机算法设计与分析期末考试试卷,算法设计与分析期末考试卷及答案a
<算法设计与分析期末考试卷及答案a>由会员分享,可在线阅读,更多相关<算法设计与分析期末考试卷及答案a(15页珍藏版)>请在人人文库网上搜索. 1.一填空题(每空2分,共30分 ...
- 算法设计与分析--期末复习重点总结
目录 一.算法概述 1.算法的定义与特性 2.数学证明法 3.算法复杂性分析方法 4.渐进分析 二.递归与分治策略 1.递归概念 2.递归算法设计示例 3.递归算法分析 4.分治基本思想 5.分治算法 ...
- 哈工大2019年春算法设计与分析期末复习
本文原载于我的博客,地址:https://blog.guoziyang.top/archives/22/ 第二章 算法分析的数学基础 2.1 复杂性函数的阶 阶为复杂性函数的主导项. 如函数 T ( ...
- 算法设计与分析期末复习不挂科
算法的基本概念 算法概念 通俗讲:算法是解决问题的一种方法或一个过程 严格讲:算法是解某一特定问题的一组有穷规则的集合 且满足以下性质: 有限性:算法在执行有限步之后必须终止 确定性:算法的每一个步骤 ...
- 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...
中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...
- 算法设计与分析课程复习笔记11——单源最短路径
算法设计与分析课程复习笔记11--单源最短路径 单源最短路径 最短路径问题 输入:有权有向图G=(V,E) 路径p={ v 0 , v 1 , . . . , v k v_0, v_1, . . . ...
- 2020-2021中科院陈玉福算法设计与分析期末考试
2020-2021中科院陈玉福算法设计与分析期末考试 中科院沈阳计算所 时文康 于2020.12.31 一.(20 分)简答题 1,陈述算法在最坏时间下的时间复杂度和平均时间复杂度:这两种评估算法复杂 ...
- 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案...
中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...
- 计算机算法设计与分析期末试题,算法设计与分析期末考试试卷(D卷)(含答案).doc...
算法设计与分析期末考试试卷(D卷) 一.选择题(0分,每题分) .D A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐 ...
- 算法设计与分析考前复习
算法设计与分析考前复习 qiwang的NOJ系统在考前一天崩了,强烈建议开发新OJ 另外,由于以下这些题是我上完数电实验用了下午和晚上时间写的,可能会出一些错. 分治法复习 二分查找 描述 给定一个单 ...
最新文章
- python2 队列的使用_python双端队列原理、实现与使用方法分析
- Android自定义Dialog及与Activity的交互
- Qt工作笔记-对QImage的进一步认识(关于α通道)
- Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...
- 【VMware vSAN 6.6】2.5.硬件部署选项:我们有软硬件项目解决方案
- DRILLNET 2.0------第十八章 起下钻水力参数计算模型
- 三星香港 android8.0,三星A8 Star官方港版安卓8.0固件刷机包:TGY-G8850ZHS3ASD1
- JavaWebDay13_课程回顾,Tomcat软件,Servlet入门.
- 【Android安全】Android root原理及方案 | Magisk原理
- 怎么把解压的文件在HTML打开,解决电脑rar压缩包文件怎么打开?教你正确打开方式...
- 2022-2027年中国卫星遥感行业市场深度分析及投资战略规划报告
- 接口与继承系列教材 (十)- Java 内部类详解
- 第一颗国产 TTL 转 HDMI 1.4,视频信号转换芯片LT8618EXB
- CBS paper防伪安全纸
- Java集合之Set集合
- 全球与中国厂内物流自动化市场深度研究分析报告
- 视频号容易被限流的8个雷区,这些规则你一定要知道!
- el+vue实战 ② 在el-table中的每一行加上头像/图片;去掉div标签自动换行问题;el-table表格中实现字数限制,只显示一行
- UED专栏 | 携程机票订后服务“航班助手”的三大设计秘籍
- VS2017制作包dtsx 碰见的一些问题(反序列化-复制变量等)