摘要: 题目:输入一个无符号的一位整数的四则运算表达式,输出其结果。例如输入:1+3*6-2,则输出:17分析:因为不涉及到括号,只是简单的四则运算,我的想法是如果有乘除法先计算,没有的话就按照加减法从左到右的顺序进行计算。在开始的时候,首先检查是否有乘除法运算符,有的话就取出前后两个操作数进行计算,将结果保存起来。没有的话就将加减运算符先存起来。主要过程:1、输入的是一个四则运算的表达式,在计算机中按照字符串的形式存储。数据和运算符需要分开处理。2、引入一个整型的数组,其大小为字符串长度加一,加一是为了方便整型数组判断结束。3、对表达式字符串循环进行字符判断,如果是数字,则将数组存入引入的整型数组, 阅读全文
posted @ 2013-05-12 14:31 Rabbit_Dale 阅读(2370) 评论(1) 推荐(0) 编辑
摘要: 1、实验题目:长整型数运算,C中的long int所能表示的数据范围有限,现要求编程完成超过long int所能表示的数据范围以上的十进制正的长整数的加法和乘法运算。2、实验提示:两个参与运算的长整数可用char a[256], b[256]表示,整个程序中要求完成以下几个函数的编写:1) int readlongint(char * x); 此函数用于读入一个正的长整数到x中,函数返回长整数的实际长度;要求输入时检查所读入的字符串是否是合法的长整数,如不是提示用户直到输入合法的长整数为止;2) char *addition(char *x,char *y); 此函数用于实现用字符串表示的长整 阅读全文
posted @ 2013-05-07 20:08 Rabbit_Dale 阅读(3173) 评论(1) 推荐(1) 编辑
摘要: 实验题目:学生信息管理系统实验要求:用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。提示:用一个结构体类型表示学生信息 1 typedef struct node /*定义结构体*/ 2 { 3 int num; //学号 4 char name[15];//姓名 5 char sex[9]; //性别 6 int age; //年龄 7 int english; //英语成绩 8 int math; //数学成绩 9 int computer;//计算机成绩10 int av... 阅读全文
posted @ 2013-05-06 19:46 Rabbit_Dale 阅读(7964) 评论(1) 推荐(1) 编辑
摘要: 1、前言 前段时间忙着搞毕业论文,看书效率不高,导致博客一个多月没有更新了。前段时间真是有些堕落啊,混日子的感觉,很少不爽。今天开始继续看算法导论。今天继续学习动态规划和贪心算法。首先简单的介绍一下动态规划与贪心算法的各自特点及其区别。然后针对0-1背包问题进行讨论。最后给出一个简单的测试例子,联系动态规划实现0-1背包问题。2、动态规划与贪心算法 关于动态规划的总结请参考http://www.cnblogs.com/Anker/archive/2013/03/15/2961725.html。这里重点介绍一下贪心算法的过程。贪心算法是通过一系列的选择来给出某一个问题的最优解,每次选择一个当.. 阅读全文
posted @ 2013-05-04 11:18 Rabbit_Dale 阅读(18403) 评论(2) 推荐(3) 编辑
摘要: 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分别采用动态规划方法和贪心算法进行分析。本篇笔记给出活动选择问题的详细分析过程,并给出详细的实现代码进行测试验证。关于贪心算法的详细分析过程,下次在讨论。1、活动选择问题描述 有一个需要使用每个资源的n个活动组成的集合S={a1,a2,···,an},资源每次只能由一个活动使用。每个活动ai都有一个开始时间si和结束时间fi,且0≤si<fi<∞ 。一旦被选择后 阅读全文
posted @ 2013-03-16 18:10 Rabbit_Dale 阅读(9622) 评论(4) 推荐(3) 编辑
摘要: 前言: 书中列举四个常见问题,分析如何采用动态规划方法进行解决。今天把动态规划算法总结一下。关于四个问题的动态规范分析过程可以参考前面的几篇日志,链接如下: 装配线调度问题:http://www.cnblogs.com/Anker/archive/2013/03/09/2951785.html 矩阵链乘问题:http://www.cnblogs.com/Anker/archive/2013/03/10/2952475.html 最长公共子序列问题:http://www.cnblogs.com/Anker/archive/2013/03/11/2954050.html 最优二叉查找树问... 阅读全文
posted @ 2013-03-15 16:40 Rabbit_Dale 阅读(11467) 评论(2) 推荐(5) 编辑
摘要: 1、前言: 接着学习动态规划方法,最优二叉查找树问题。二叉查找树参考http://www.cnblogs.com/Anker/archive/2013/01/28/2880581.html。如果在二叉树中查找元素不考虑概率及查找不成功的情况下,可以采用红黑树或者平衡二叉树来搜索,这样可以在O(lgn)时间内完成。而现实生活中,查找的关键字是有一定的概率的,就是说有的关键字可能经常被搜索,而有的很少被搜索,而且搜索的关键字可能不存在,为此需要根据关键字出现的概率构建一个二叉树。比如中文输入法字库中各词条(单字、词组等)的先验概率,针对用户习惯可以自动调整词频——所谓动态调频、高频先现原则,... 阅读全文
posted @ 2013-03-13 22:58 Rabbit_Dale 阅读(10809) 评论(0) 推荐(2) 编辑
摘要: 1、基本概念 一个给定序列的子序列就是该给定序列中去掉零个或者多个元素的序列。形式化来讲就是:给定一个序列X={x1,x2,……,xm},另外一个序列Z={z1、z2、……,zk},如果存在X的一个严格递增小标序列<i1,i2……,ik>,使得对所有j=1,2,……k,有xij = zj,则Z是X的子序列。例如:Z={B,C,D,B}是X={A,B,C,B,D,A,B}的一个子序列,相应的小标为<2,3,5,7>。从定义可以看出子序列直接的元素不一定是相邻的。公共子序列:给定两个序列X和Y,如果Z既是X的一个子序列又是Y的一个子序列,则称序列Z是X和Y的公共子序列。例如 阅读全文
posted @ 2013-03-11 15:06 Rabbit_Dale 阅读(5447) 评论(1) 推荐(3) 编辑
摘要: 前言:今天接着学习动态规划算法,学习如何用动态规划来分析解决矩阵链乘问题。首先回顾一下矩阵乘法运算法,并给出C++语言实现过程。然后采用动态规划算法分析矩阵链乘问题并给出C语言实现过程。1、矩阵乘法 从定义可以看出:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×r的矩阵A左乘一个r×n的矩阵B,会得到一个m×n的矩阵C。在计算机中,一个矩阵说穿了就是一个二维数组。一个m行r列的矩阵可以乘以一个r行n列的矩阵,得到的结果是一个m行n列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的r个数与后一个矩阵第j列上的r个数对应相乘后所有 阅读全文
posted @ 2013-03-10 11:04 Rabbit_Dale 阅读(22073) 评论(7) 推荐(3) 编辑
摘要: 前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数。在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示。我写程序的错误如下程序所示: 1 #include 2 void print(int *a[3]) 3 { 4 printf("%d\n",a... 阅读全文
posted @ 2013-03-09 19:50 Rabbit_Dale 阅读(71576) 评论(4) 推荐(6) 编辑
摘要: 前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法思想。本书在第二章介绍归并排序时,详细介绍了分治算法的操作步骤,详细的内容请参考:http://www.cnblogs.com/Anker/archive/2013/01/22/2871042.html。而动态规划与此不同,适用于子问题不是独立的情况,也就是说各个子问题包含有公共的子问题。如在这种情况下,用分治算法则会重复做不必要的工作。采用动态规划. 阅读全文
posted @ 2013-03-09 18:10 Rabbit_Dale 阅读(7136) 评论(6) 推荐(2) 编辑
摘要: 前言:通常我们会遇到一些问题,采用一些标准的数据结构,如双链表、散列表或二叉查找数时,不能够满足操作要求,需要对这些数据结构进行扩张,添加一些额外的信息使得能够完成新的操作。附加的信息需要对数据结构的某些操作进行调整,这个是非常关键的步骤,决定着数据结构扩张是否能够实现。本章主要讨论了红黑树结构的扩张,介绍了两种扩张方式。第一种方式扩张使得红黑色能够支持动态集合上顺序统计,快速找出集合中第i小的数,或给出某个元素在集合的全序中的排名。第二种方式扩张使得红黑色能够进行区间操作,可以很快地找到集合中覆盖的区间。关于红黑色请参考第13章,http://www.cnblogs.com/Anker/.. 阅读全文
posted @ 2013-03-09 11:01 Rabbit_Dale 阅读(3513) 评论(4) 推荐(2) 编辑
摘要: 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工作中使用。1、递归 关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:(1) 递归就是在过程或函数里调用自身。(2) ... 阅读全文
posted @ 2013-03-04 22:12 Rabbit_Dale 阅读(38513) 评论(11) 推荐(15) 编辑
摘要: 问题描述:输入是一个大小为n的整型数组,要求输出数组的任何连续子数组中的最大值。例如:输入的数组为array[10] = {31,-41,59,26,-53,58,97,-93,-23,84};输出最大连续子数组和为array[2...6]:187 算法1:对所有满足0<=i<=j<=n的(i,j)整数对进行迭代,对每个整数对,程序都要计算array[i...j]的总和,并检验该总和是否大于迄今为止的最大总和。算法1的伪代码描述如下:1 maxsofar = 02 for(i=0;i<n;++j)3 for(j=i;j<n;++j)4 tmepsum = 05 f 阅读全文
posted @ 2013-03-03 21:44 Rabbit_Dale 阅读(5956) 评论(3) 推荐(3) 编辑
摘要: 寒假在不知不觉中快速结束了,这是我上学期间的最后一次寒假,于是在家里陪陪父母多呆了些时间。博客在2月份几乎没有更新,昨天已经返校,新的学期即将开始,我要继续坚持看书学习《算法导论》,由于时间关系,可能进展比较缓慢,但是我希望自己能够坚持下来,在最后一个学期能把这本书认真看完。 阅读全文
posted @ 2013-02-23 10:29 Rabbit_Dale 阅读(1015) 评论(0) 推荐(0) 编辑
摘要: 虽然早就放假了,我回家没什么事情可以做,就在学校多呆了10天。在学校里面坚持学习,同学们陆续的都回家了,室友今天下午也回家了。今天晚上宿舍就剩下我一个人了,明天我也总算是可以回家了。博客暂停更新了。祝大家新年快乐,阖家欢乐。开学了再来好好学习算法导论,坚信自己一定能够认真看完。 阅读全文
posted @ 2013-01-31 19:37 Rabbit_Dale 阅读(957) 评论(1) 推荐(0) 编辑
摘要: 摘要: 红黑树是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色,可以是RED或者BLACK。通过对任何一条从根到叶子的路径上各个着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。本章主要介绍了红黑树的性质、左右旋转、插入和删除。重点分析了在红黑树中插入和删除元素的过程,分情况进行详细讨论。一棵高度为h的二叉查找树可以实现任何一种基本的动态集合操作,如SEARCH、PREDECESSOR、SUCCESSOR、MIMMUM、MAXMUM、INSERT、DELETE等。当二叉查找树的高度较低时,这些操作执行的比较快,但是当树的高度较高时,这些操作的性能可能. 阅读全文
posted @ 2013-01-30 12:25 Rabbit_Dale 阅读(15540) 评论(11) 推荐(12) 编辑
摘要: 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基本动态集合的操作平均时间为θ(lgn)。1、二叉查找树 二叉查找树是按照二叉树结构来组织的,因此可以用二叉链表结构表示。二叉查找树中的关键字的存储方式满足的特征是:设x为二叉查找树中的一个结点。如果y是x的左子树中的一个结点,则key[y]≤key[x]。如果y是x的右子树中的一个结点,则key.. 阅读全文
posted @ 2013-01-28 21:49 Rabbit_Dale 阅读(10506) 评论(8) 推荐(5) 编辑
摘要: 今天在练习hash table时候,准备采用vetor和list进行实现,当我定义一个模板类的迭代器时候,出现错误。于是我在网上找找如何处理这个问题,最终解决了问题,记录在此以后,便于以后查看。我写的测试程序如下: 1 #include <iostream> 2 #include <vector> 3 #include <list> 4 using namespace std; 5 6 template <class T> 7 class Test 8 { 9 public:10 void insert(const T& x)11 {12 阅读全文
posted @ 2013-01-28 13:02 Rabbit_Dale 阅读(5015) 评论(0) 推荐(0) 编辑
摘要: 摘要: 本章介绍了散列表(hash table)的概念、散列函数的设计及散列冲突的处理。散列表类似与字典的目录,查找的元素都有一个key与之对应,在实践当中,散列技术的效率是很高的,合理的设计散函数和冲突处理方法,可以使得在散列表中查找一个元素的期望时间为O(1)。散列表是普通数组概念的推广,在散... 阅读全文
posted @ 2013-01-27 22:24 Rabbit_Dale 阅读(9467) 评论(9) 推荐(8) 编辑