![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法&数据结构学习笔记
hiyounger
这个作者很懒,什么都没留下…
展开
-
关于图ADT的一些算法——最短路径算法
带权的有向图,权值代表路径长度。假设顶点0为起点,设一个备用的精选顶点集vertexSet,数组weight[v]保存顶点0到顶点v之间的最短路径。 weight步骤 v vertexSet [0] [1]原创 2011-03-08 22:14:00 · 1182 阅读 · 0 评论 -
关于图ADT的一些算法——最小生成树算法(普利姆/Prim算法)
连通的带权无向图问题:用最小的权值连通所有的点,即从上图删去一些线,使留下的线的权值的总和最小且每个点都连通。第一步:先标记a,待选的有a->i,a->f,a->b,选择最小的a->i;第二步:添加i,与(a,i)中某个点相连的边做备选,有:a->b,a->f,选择最小的a->f;第三步:添加f,与(a,i,f)中某个点相连的边做备选,有a->b,f->g,选择最小的f->g;第四步:添加g,与(a,i,f,g)中某个点相连的边做备选,有a->b,g->e,g->d,选择最小的g->d;第五步:添加d,与(原创 2011-03-08 22:48:00 · 1520 阅读 · 0 评论 -
最大公约数算法——欧几里德算法
欧几里德算法又称辗转相除法,用于计算两个整数m和n(0≦mgcd(m,n)=gcd(n mod m,m),对于m>0;式中,n mod m表示n除以m之后的余数。代码如下:1、递归实现:void Swap(int &a,int &b){ int c=a;a=b;b=c;}int RGcd(int m,int n){ if(m==0) return n; return RGcd(n%m,m);}int Gcd(int m,int n){ if原创 2011-03-09 10:46:00 · 989 阅读 · 0 评论 -
中缀表达式转换为后缀表达式的算法
字符串postfixExp保存完成的后缀表达式,Stack栈用于临时存储操作符,字符串string为待转换的原表达式。按先后顺序依次遍历string的每个字符:(以下操作部分先后)1、遇到操作数,直接放入postfixExp的最后;2、遇到 ' ( ' 操作符,将其入栈;3、遇到其他除 ' ) ' 之外的操作符,若操作符优先级大于栈顶操作符,则操作符入栈,若操作符优先级小于或等于栈顶操作符,栈顶操作符出栈并放入postfixExp的最后,该操作符入栈;4、遇到 ' ) ' 操作符,Stack中的操作数顺序出原创 2011-03-09 11:49:00 · 641 阅读 · 0 评论 -
一些常见的排序算法
<br />为了便于说明,假设是升序排列,降序容易以此推断<br />1、选择排序<br /> 查找数列(含n个数)中的最大项并把它与最后一项交换,然后查找数列前n-1项中的最大项,并把它与这n-1项的最后一项交换,以此类推。<br />2、冒泡排序<br /> 比较相邻的两项数据,如果次序颠倒则交换之,最多需要比较n+1趟。第一趟结束,最大项已经到末尾,故比较n+1次;第二趟需比较n+2次,并且结束后最后两项已经排好。以此类推。<br />3、插入排序<br /> 一开始,数组是未排序的原创 2011-03-09 15:13:00 · 1176 阅读 · 0 评论 -
二叉树的遍历算法
运用递归可以很容易实现二叉树的前序、中序、后序遍历。伪代码如下:1、前序遍历:preorder(in bintree:BinaryTree)//Traverses the binary tree binTree in preorder.//Assumes that "visit a node" means to display the //node's data item.{ if(binTree is not empty) { Display the data in原创 2011-03-09 12:08:00 · 709 阅读 · 0 评论 -
一个淘宝的算法笔试题
<br />问题:有N个蛋和M个篮子,把蛋放到M个篮子里,每个篮子都不能为空。另外,需要满足:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的和得到。写出程序,使得输入一个(N,M),输出所有可能的分配情况。<br /> <br />#include<iostream>#include<math.h>#include<malloc.h>#include<fstream>using namespace std;struct solution{ int *ptr; s原创 2011-03-29 11:18:00 · 2104 阅读 · 2 评论 -
算法思想笔记——分治法
<br />1、合并排序<br />2、快速排序<br />3、折半查找<br />4、二叉树遍历<br />5、大整数乘法和Strassen乘法<br />6、最近对问题和凸包问题的分治解法<br /> <br /> <br /> <br />——简介——<br /> <br />大整数乘法:<br />把a的前半部分记为a1,后半部分极为a0;b的前半部分记为b1,后半部分记为b0;即a=a1×10^(n/2)+a0;b=b0×10^(n/2)+b0;<br />则有c=a×b=(a1×b1)×10^n原创 2011-04-10 20:38:00 · 996 阅读 · 0 评论 -
算法思想笔记——减治法
<br />1、插入排序<br />2、深度优先和广度优先查找<br />3、拓扑排序<br />4、生成组合对象算法<br />5、减常因子算法<br />6、减可变规模算法<br /> <br />——简介——<br /> <br />深度优先和广度优先:深度优先算法用栈实现,顶点有两种顺序种类,边可分为树向边和回边;广度优先算法用队列实现,顶点有一种顺序种类,边可分为树向边和交叉边。<br /> <br />拓扑排序:没有回路的有向图的拓扑排序是有解的,若有回路则无解。有解时,第一种算法是执行一次深度原创 2011-04-10 21:21:00 · 3936 阅读 · 0 评论