代码改变世界

随笔分类 -  Algorithm

前缀,中缀,后缀表达式学习笔记(2)

2012-05-03 15:51 by MichaelYin, 501 阅读, 收藏, 编辑
摘要: 前面一章已经将前缀,中缀,后缀表达式的基本概念进行了介绍,同时也介绍了编程中较常用的中缀表达式转换到后缀和前缀表达式的方法。接下来主要针对前缀,中缀和后缀表达式求值来进行相应的讨论。 在上一篇BLOG中的开始就阐述了中缀表达式求值的过程,中缀表达式求值比较符合人脑的计算方式,而对于计算机来说并不是十分高效,需要多次对表达式进行遍历。下面贴出我自己实现的直接对中缀表达式按人脑计算方式进行求值的代码... 阅读全文

前缀,中缀,后缀表达式学习笔记(1)

2012-05-02 16:40 by MichaelYin, 9007 阅读, 收藏, 编辑
摘要: 表达式简介 最近看书的时候接触到了后缀表达式,恰好看SICP中间也碰到了类似的问题,就花时间好好将这部分内容进行了整理。 前缀表达式(Prefix Notation)是指将运算符写在前面操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也叫做“波兰表达式”。比如- 1 + 2 3 后缀表达式(Postfix Notatio... 阅读全文

算法学习之栈

2011-10-10 20:16 by MichaelYin, 993 阅读, 收藏, 编辑
摘要: 最近趁着找工作做了很多关于数据结构和算法的题,在这里也将涉及到栈的一些不错的知识点和题目以及代码贴出来,一方面是为了夯实基础,另外一方面方便大家更好的掌握数据结构中的栈 栈的特性其实一说对数据结构有稍微了解的人都知道,后进先出,但是在解决问题的过程中熟练的使用合适的数据结构我觉得才是对栈真正的理解 首先来讲一个很经典的问题,就是出栈顺序,题目是这样的,比如现在又1 2 3 4 5五个数字,规定... 阅读全文

编程之美2.18学习笔记

2011-08-14 11:45 by MichaelYin, 542 阅读, 收藏, 编辑
摘要: 解题过程中没有使用书上提供的动态规划的算法,在这里把解题思路写一下。 题目是这样的,有个包含2n个元素的无序数组,现在用算法将这个数组进行分割,使得两个子数组的和最相近 我们首先来想像将数组分割后的情况,假设分割后的两个数组分别为A和B,A[0]和B[0]之间肯定是存在一个差值的,假设我们用A[0]-B[0],得到的值加上A[1]-B[1],这样最后得到的值的绝对值肯定是所有情况里面最小的,因为最... 阅读全文

二叉树的非递归遍历

2010-12-23 21:59 by MichaelYin, 5262 阅读, 收藏, 编辑
摘要: 二叉树的遍历如果使用递归调用基本没什么问题,这里主要是讲如何使用非递归方法实现二叉树的遍历。 由于递归调用程序实际上使用了栈来保存方法中的变量值,在非递归遍历的方法中我们需要基于栈的方法。先来看看这个方法 节点temp在这里是起一个标识的作用,首先沿根节点往左下方进行查找,将存在的节点压入栈,里面的那个while循环结束后栈的最顶端一定是一个null,所以栈pop一下,然后这时进行读取操作,读... 阅读全文

算法学习之快速排序

2010-12-20 22:01 by MichaelYin, 352 阅读, 收藏, 编辑
摘要: 快速排序通常是用于排序的最佳实用选择,因为它的平均性能相当好。 快速排序和先前讲到的合并排序一样,体现了算法设计中的分治的思想。我们首先将问题进行分解,将数组划分成两个部分A[p…q-1]和A[q+1…r],使得A[p…q-1]中的元素小于等于A[q],然后分别解决前面一个数组和后面一个数组的排序,最后进行合并,由于这两个数组是就地排序(in place)的,所以不用像合并排序中一样进行过多的合... 阅读全文

算法排序之堆排序

2010-12-08 23:06 by MichaelYin, 378 阅读, 收藏, 编辑
摘要: 堆排序的重点在于对堆的理解,首先堆是一种数组对象,同时,它也可以被视为一棵完全二叉树,树中的每个节点从上到下,从左到右和数组中的每个元素是一一对应的,二叉树的每一层都是填满的,除了最后一层以外。 比如数组中的第一个元素就是二叉树的根节点,第二个就是元素就是根节点的左边的子节点,而第三个节点就是根节点的右边的子节点,然后第四个节点就是根节点的左边的子节点的左边的子节点,这样以此类推。 通过给定的... 阅读全文

算法学习之合并排序

2010-10-30 20:02 by MichaelYin, 510 阅读, 收藏, 编辑
摘要: 在我的前面的一篇Post中我讲了排序算法中很基本的插入排序,插入排序实现的算法思想是增量方法,即排好子数组之后,加入一个新的元素,然后再进行一个排序操作,保证重新生成按序排列的数组。 这篇Post我将简单的讲讲排序算法另外一种算法,合并算法,合并算法采用分治法的思路,即问题划分成n个规模较小而结构和原来问题相似的子问题,递归解决这些子问题,然后合并结果,最终得到原来问题的解。 合并算法主要分为... 阅读全文