算法数据结构
Kevin&Swift
每天进步一点点.记录生活的一部分
展开
-
冒泡排序的相关注意事项
今天看了一下C语言的书本 ,搞懂了曾经还不是非常懂得冒泡排序,特意来记录一下冒泡排序的核心就是先遍历数组整个的大小,然后把最大的放在最后面,然后再遍历数组的大小减1 把倒数第二大的数字放在倒数第二个,依次这样循环下去要注意这里的pass 必须要从1开始,否则要产生越界!void bubbleSort(int list[], int arraySize){ int原创 2015-10-18 12:16:55 · 2034 阅读 · 0 评论 -
速算24点 深搜的进一步体会
题目描述速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整原创 2015-11-25 08:37:42 · 1884 阅读 · 2 评论 -
图的一些概念和应用
比较好的博客有http://www.cnblogs.com/mcgrady/archive/2013/09/23/3335847.htmlhttp://blog.chinaunix.net/uid-26548237-id-3483650.html图有有向完全图,无向完全图,还有联通分量,深搜,广搜原创 2015-12-05 15:04:46 · 273 阅读 · 0 评论 -
各种树的应用
二叉查找树定义 是根的所有左子树都比他小,所有的右子树 都比他大,二叉查找树的几种操作主要是增加 查找 和删除 具体可以看这个博客http://www.cnblogs.com/aiyelinglong/archive/2012/03/27/2419972.html在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高原创 2015-11-17 20:13:19 · 600 阅读 · 0 评论 -
n个节点总共能创建几种不同的二叉树
用到了递归的思想先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系。那么,如果固定一个节点后,有两种情况,一是左子树还剩一个节点,此刻类型数量为f(1),第二种情况是右子树生一个节点,此刻类型数量为f(1),固有f(2) = f(1) + f(1)如果有三个节点呢?我们需要考虑固原创 2015-11-30 14:17:11 · 6556 阅读 · 0 评论 -
排序方法的总结
http://blog.csdn.net/hkx1n/article/details/3922249http://blog.csdn.net/weiwenhp/article/details/8622728插入排序的操作#include#includevoid InsertSort(int a[],int length) { int i,j,k,temp;原创 2015-12-28 15:54:47 · 524 阅读 · 1 评论 -
Nim游戏和全排列
Nim游戏是一个数学博弈论问题,可以转化为二进制的异或运算,虽然自己还不大懂,先把代码贴上,还有好的博客http://blog.csdn.net/u013050857/article/details/46417307http://blog.csdn.net/fanoluo/article/details/40663065主要是异或情况下为0的话先手必败,否则的话先手必胜,全原创 2016-03-18 18:42:05 · 467 阅读 · 0 评论 -
八皇后问题
主要是好久没有刷这种算法的题了,有点生疏,现在先把代码贴上吧,主要是一个深搜的使用,这里0,1,2应该是记录行列还有对角线的 具体以后再解释 先贴上代码#include#includeusing namespace std;//用于计数的值 和记录有没有被访问过int cnt = 0,n,vis[3][10000];void dfs(int cur){ if(cur == n原创 2016-02-26 18:21:49 · 377 阅读 · 0 评论 -
大整数相乘问题
先把好的博客贴上 代码明天再说。。。http://blog.csdn.net/chhuach2005/article/details/21168179原创 2016-03-26 21:45:30 · 437 阅读 · 0 评论 -
最近点对问题
最近点对的问题 可以用分治法的方法 取一条中垂线后,分为比中垂线x值小的坐标和比中垂线x值大的坐标,随后再继续分下去,求出最近点对即可,要注意在线条两端的端点,在合并最小集的时候,要注意这种情况的存在 位运算与1来判断是否是奇数 向右移1位表示是除2#include #include using namespace std;//代表输入的点的坐标 和分为2部分 第一部分和第二部分的点的坐标原创 2016-04-18 19:51:16 · 316 阅读 · 0 评论 -
动态规划 找零钱问题
这个用贪心的话 会出错 记录一下这个例子 比如金额是10块,面币为2 5 6 11 10 按照贪心的话 肯定选6和2张2,但是只要2张5块就可以了,因此贪心法会出现问题,所以,需要用动态规划,写出状态转移方程,遍历金额,随后里面套一个面币数量的循环,当遍历到当前金额的时候 只要当前金额减去当前面币值大于0 随后取这个后的最小和不取这个后的最小即可,可能语言组织不大好,直接上代码吧#includ原创 2016-05-13 23:15:27 · 4987 阅读 · 0 评论 -
AVL树的创建与旋转
AVL树写的不耐烦了,索性一次性代码贴上。。。/** 2 * AVL树(C语言): C语言实现的AVL树。 3 * 4 * @author skywang 5 * @date 2013/11/07 6 */ #include #include #define HEIGHT(p) ( (p==NULL) ? -1 : (((Node *)(原创 2016-05-09 21:16:39 · 1266 阅读 · 0 评论 -
大顶堆以及堆排序
大顶堆的前提是一颗完全二叉树,随后其根节点都大于左右子树 则称为大顶堆 否则为小顶堆 首先介绍下堆调整,堆是一种数据结构,是一种完全二叉树(不一定是满二叉树),所以根节点与叶子节点满足关系如下:根节点下标为i,左叶子为下标2*i,右叶子下标为2*i+1,当然这里我们用数组来对堆进行存储。堆的子树必须满足如下关系,根节点大于左子树且大于右子树。堆调整的方法如下,检测根节点是否为叶原创 2015-11-17 20:00:16 · 1070 阅读 · 1 评论 -
对于KMP算法的理解(Sunday)算法的理解
KMP算法主要是用于两段字符串进行比较的时候,进行算法的优化,当匹配到某一个值不同的时候,两个字符串移动的指针不是回朔到开始的地方,而是模式串移动到next(j)的地方,而主串(也就是要匹配的串)的动指针加1,原先暴力匹配的算法的话,时间复杂度是O(m*n),而KMP算法的复杂度为O(m+n),关键的核心就在于next(i)数组的计算下面只能从别的代码上去抄了简单的暴力算法 int I原创 2015-10-31 20:28:45 · 671 阅读 · 0 评论 -
霍纳法则的相关应用
霍纳法则又叫秦九韶算法,在计算多项式的值得时候,避免了暴力的每项都求出,随后再求和的算法,可以是先系数乘以x的值,求和后,再加上系数,再乘以x的值具体可以见下面的算法也就是提取多项式的算法#includeusing namespace std;double horner(double a[], int n, double x) { double res = 0; //默原创 2015-10-18 12:27:59 · 509 阅读 · 0 评论 -
汉诺塔的相关应用
汉诺塔的应用,是递归的一种比较例子,题目藐视见下面就是一个递归的实现 ,先把a上的n-1个盘同过c移到b,再把a上的最后一只盘移到c,随后再把b上的n-1只盘通过a 移到c,描述就是这样#includeusing namespace std;void move(int n, char a, char b, char c) { if (n == 1) { //当只有一个盘子原创 2015-10-18 12:58:34 · 1613 阅读 · 0 评论 -
realloc malloc calloc的 区别
函数的声明void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内 它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL malloc用原创 2015-10-19 14:17:09 · 324 阅读 · 0 评论 -
大数转为二进制的栈的应用
今天花了好久的时间写了一个栈的二进制应用,最后还是被我写出了,感觉还是挺有成就感的,特意记录下普通整数转化,应该很简单,不多说了#includeusing namespace std;typedef struct{ int key;}stack;int top = -1;stack s[100];int main() { int n; cin >> n; while (原创 2015-10-13 22:14:56 · 484 阅读 · 0 评论 -
用栈来实现括号匹配问题
在这里只做简单的一个括号匹配的问题其实思想都是一样的,若碰到左的,都入栈,右的,且原来的栈不为空,则拿出来进行匹配,成功了则继续往下做,否则,直接跳出循环。在这里为了省略起见,用了stl#include#include#include#includeusing namespace std;int main() { int i, j, k, n, m; char s[100原创 2015-10-24 23:16:57 · 1844 阅读 · 0 评论 -
二叉树的相关学习
二叉树是树中比较重要的一个部分,对于二叉树的建立,还有遍历方式,主要分后序,中序,前序的遍历,而这个的前中后主要是根节点的访问顺序的不同,左子树和右子树的访问顺序是一样的,这其实是一个递归的顺序,因为访问到一个根节点的时候,又可以把下面的节点看成是一颗树,也可以用非递归,也就是队列或栈的方式来访问树,还有ACM的移到题目是已知前序,中序遍历,来叫你写出后序遍历的题目,只有知道两种访问顺序,才能构造原创 2015-11-04 14:41:16 · 393 阅读 · 0 评论 -
1001: Tanning Salon 用栈来解决
题目描述Tan Your Hide, Inc., owns several coin-operated tanning salons. Research has shown that if a customer arrives and there are no beds available, the customer will turn around and leave, thus cos原创 2015-10-26 14:22:16 · 566 阅读 · 0 评论 -
队列与循环队列的判空与判满的条件
循环队列的一些基本操作void InitQueue(SqQueue &Q){ // 构造一个空队列Q Q.base = (QElemType *)malloc(MAX_QSIZE*sizeof(QElemType)); if (!Q.base) // 存储分配失败 exit(OVERFLOW); Q.front = Q.rear = 0;}void Des原创 2015-10-25 22:18:29 · 19040 阅读 · 0 评论 -
用栈来实现表达式的计算
栈可以用来实现表达式的计算 分别用两个栈来存储运算符合运算数,默认#变成表达式的结束操作,现在运算符栈中放入一个#建,以便于后面的匹配,然后遍历字符串,若是运算符,则与运算符的头元素进行比较,优先级高,则运算数拿出两个,与运算符的头元素进行运算,随后入运算数的栈,在这里没搞明白为什么这个】遍历到的字符串不用入运算符的栈,若是等于,则表示括号匹配,运算符里面出一个元素,若是小于,则运算符入栈原创 2015-10-26 22:12:49 · 787 阅读 · 0 评论 -
归并排序
归并排序,要求输入的两个数组是升序排列好的,才能做归并#includeusing namespace std;#includeint main() { int a[100],b[100],c[200],i,j,n,m,k,x,y; cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>m; for(j=0;j<m;j++) cin>>b[j]原创 2015-10-12 22:20:43 · 391 阅读 · 0 评论 -
多项式方面的应用(多项式用结构体来实现)
最近在数据结构学习中,学到了多项式方面的应用,因此,特意记录下,以后可以用#include#include#include#include#include#includeusing namespace std;#define P 0.0000001typedef struct { double coef; int exp;}polynomial;bool comp(po原创 2015-10-12 22:14:46 · 1318 阅读 · 0 评论 -
找硬币问题
有一个机器人 在(1,1)位置,在m*n的木板上放着硬币,1代表有,0代表无,机器人只能向下或者向右走,求能收集到的最大硬币。利用动态规划,在第一行和第1列每个位置上的最大值,为每个位置上是否有硬币,从(2,2)元素开始,这个位置上的最大值,为上一个位置,也就是左边或者是上边的值传递过来,因此只要求得两者的最大值再加这个位置上是否有值即可,最后只要输出最右下角的元素值,即为收到的最多硬币值 算原创 2016-05-20 22:41:47 · 679 阅读 · 0 评论