计算机算法设计与分析
努力写题的tyf
这个作者很懒,什么都没留下…
展开
-
3.3最短路问题,输出路径
最优子结构证明:思路:从多段图第二段开始到最后一段,每段找到一个点到原点的距离距离最短代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int INF=0x3f3f3f3f;int matrix[103][103],d[103],vis[1...原创 2018-06-07 11:41:23 · 878 阅读 · 0 评论 -
求最大公约数的三种方法
最小公倍数=x*y/最大公约数1.辗转相除法:(第一种写法)int gcd(int x,int y){//x>y int z; while(x%y!=0){ z=x%y; x=y; y=z; } return y;}(第二种写法)int gcd(int x,int y){//x>y...原创 2018-03-08 20:02:37 · 543 阅读 · 0 评论 -
3.5最优二叉树
1.最优二叉树定义扩展二叉树:在对二叉搜索树进行搜索的时候,会遇到检索不成功的情况。当二叉搜索树出现空的子叶时,我们把它补全(以区间的形式),因此扩展二叉树是满二叉树。最优二叉树:即bi表示找到结点的概率,a0表示找到区间(负无穷,x1)的概率ai表示找到区间(xi,xi+1)的概率an表示找到区间(xn,正无穷)的概率对于二叉树中不能搜索到的结点(区间)我们称它伪结点,若树的根节点深度是0,那么...原创 2018-06-20 00:46:50 · 595 阅读 · 0 评论 -
1-1统计数字问题(详解)
题目描述:从1页到n页,统计0到9出现的次数题解一:暴力#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){ int c[10]={0}; int n; cin>>n; for(int i...原创 2018-03-22 18:08:53 · 20883 阅读 · 6 评论 -
2.1递归概念 -对全排列问题、整数划分问题、汉诺塔问题的理解
递归就是自己调用自己的概念。分为两个部分:1.结束条件(递归不能无限进行下去)2.递归方程(这一部分很难,需要发现规律,发现规律后,还要用编程思维把递归的方法表示出来)老师说的一句话我认为很重要:要动态的去学习递归,不要只是停留在静态的方程上(所以要手动模拟一下会理解更深)【例2-4】排列问题:思想:比如说123这3个数全排列,可以看成1为前缀,23全排列,2为前缀,13全排列……而23全排列,有...原创 2018-03-29 12:14:23 · 801 阅读 · 0 评论 -
2.2分治思想 - 二分搜索、大整数乘法、棋盘覆盖、Strassen矩阵乘法
分治的基本思想:当要求解一个输入规模n相当大的问题时,直接求解往往是非常困难的,甚至没法求出。正确的方法是, 首先应仔细分析问题本身所具有的特性,然后根据这些特性选择适当的设计策略来求解。在将这n个输入分成k个不同子集合的情况下,如果能得到k个不同的可独立求解的子问题,而且在求解之后,还可找到适当的方法把它们合并成整个问题的解,那么,可考虑使用分治法来求解。分治法所能解决的问题一般具有以下几个特征...原创 2018-04-25 20:00:19 · 688 阅读 · 0 评论 -
2.3合并排序的递归、非递归算法,自然合并排序
递归算法将待排元素分成大小大致相同的两个子集合,分别对这两个集合进行排序,最终将排好序的子集合合并。#include<iostream> #include<cstdio> void Merge(int s[],int t[],int b,int m,int e){//将s[b...m]与s[m+1...e]合并 int i=b;//i->前一...原创 2018-04-26 11:33:22 · 6830 阅读 · 1 评论 -
2.4快速排序的递归、非递归算法,随机快速排序
递归算法:注意Partition函数里的第2、3个while循环后要加' ; '哦。#include<iostream>#include<cstdio>using namespace std;int Partition(int a[],int p,int r) { int i=p,j=r+1; int x=a[p]; while(1){//同...原创 2018-05-03 11:42:45 · 306 阅读 · 0 评论 -
3.1斐波那契数列的递归、自顶向下、自底向上方法
递归有许多重复计算#include<iostream>#include<cstdio>using namespace std;int fibonacci(int x){ if(x<=1)return 1; return fibonacci(x-1)+fibonacci(x-2);}int main(){ int n; wh...原创 2018-05-17 10:09:53 · 3232 阅读 · 2 评论 -
3.2矩阵连乘问题 - 递归、自底向上的动规、自顶向下的动规
前提:输入矩阵的个数,和各个维度,保证Ai和Ai+1是可乘的(相邻之间可乘),求输出的矩阵相乘顺序,和相乘次数,使相乘次数最小。eg:输入 510 1 50 50 20 5(存到p[0:5]中)第i个矩阵的行、列分别是p[i-1],p[i]分析:1.分析最优结构:特征:计算A[i:j]的最优次序所包含的计算矩阵子链 A[i:k]和A[k+1:j]的次序也是最优的。矩阵连乘计算次序问题的最优解包含着...原创 2018-05-17 11:39:22 · 2896 阅读 · 9 评论 -
3.4递归、记忆化搜索、动态规划解决01背包问题
递归:自顶向下:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int w[100],v[100],flag[100];int knapsack(int n,int c){ if(n==0||c==...原创 2018-06-07 12:04:25 · 406 阅读 · 0 评论 -
4.1贪心算法:一般背包问题、活动安排问题
一般背包问题:代码如下:#include<iostream>#include<cstdio>using namespace std;struct A{ float v,w,avg,x; int seq;}pack[103];void sort_pack(A pack[],int n){ float t1,t2,t3,t4; fo...原创 2018-06-22 00:42:39 · 372 阅读 · 0 评论 -
补全作业
1.对于一个字节(8bit)的无符号整型变量,求其二机制中“1”的个数。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){ int n; while(scanf("%d",&n)!=EOF){ i...原创 2018-07-06 01:19:07 · 140 阅读 · 0 评论