算法与数据结构
文章平均质量分 79
闪星
聪明可爱的乐天派喜欢看书思考旅行玩游戏代码写的不算多喜欢想点子平时关注交互设计用户研究产品设计目标是做一个优秀的互联网产品创造者相信未来是美好的
展开
-
链表基础知识
1.为什么用LinkedList Array是一个非常有用的数据结构,但是有两个限制:(1)当改变原有array的size的时候需要将原有array的所有元素copy到新array中去(2)由于array的数据存储在内存中是连续空间,导致插入和删除都会带来其他数据的移动。 链表是由一系列的节点组成,这些节点可以处在不从的内存位置,通过指针将这些节点连接在一起原创 2012-09-20 13:39:35 · 1905 阅读 · 5 评论 -
树的底层实现(上)
本片内容是根据Adam Drozdek编写的英文版教材《数据结构与算法》整理的,主要是树的底层实现,以及相关的一些内容。后面会再整理一些应用到了树的经典算法题。由于知识点较多,所以分成两篇文章。1.基本介绍1.1树的出现 先来看看其他几种数据结构,链表相对数组更灵活,尤其是插入和删除操作,但是链表不能表示封层对象;栈和队列可以反应出分层,当时仅限于一维。所以引入原创 2012-10-12 20:34:49 · 2263 阅读 · 0 评论 -
树的底层实现(下)——平衡树
1.平衡树的定义及构建方法 平衡树(balanced search tree):任何节点的左右子树的高度差不大于1。平衡树给人的第一印象是扁平,h维持在O(lgN),所以查找很方便。 有多种方法构建平衡树,例如下面介绍的“通过有序序列构建”“DSW算法”“AVL tree”1.1通过有序序列构建 首先对数进行排序,然后依次去最中间的树原创 2012-10-12 20:53:39 · 1272 阅读 · 0 评论 -
递归
1.递归基本定义 递归的产生:某方法反复的调用自身。2.递归的思考流程第一步:找到f(n)与f(n-1)和f(n-2)的关系第二步:找到终止条件,例如n==1时的情况2.递归的缺陷在递归的方法调用过程中,会将方法的(1)parametersand local variables(参数和本地变量);(2)Dynamic link(动态链接);(3)Return原创 2012-10-20 18:43:57 · 655 阅读 · 0 评论 -
栈和队列的底层实现及迷宫问题
一:栈1.栈的应用背景 栈是一种线性数据结构,并且只能在某一端存数据和取数据。关键词:先进先出。2.栈的两种实现方法:2.1用ArrayList实现栈具体代码如下:import java.util.ArrayList;public class ArrayListAsStack { ArrayList stack = new ArrayList(原创 2012-10-22 17:27:13 · 6116 阅读 · 3 评论 -
蒙特卡罗思想计算圆周率的三种算法
本篇文章介绍计算圆周率的几种算法,都是应用蒙特卡罗思想:或称计算机随机模拟方法,是一种基于“随机数”的计算方法。方法一:蒙特卡罗方法,内切圆1.1思想 有一个以(0,0)为中心的2*2的正方形,及这个正方形的半径为1的内接圆,取这个正方形范围内的一点,则这个点落入内接圆的概率为PI/4。1.2程序程序分为两部分:(1)随机生成正方形内的一点(2)计算原创 2012-12-14 13:29:21 · 7539 阅读 · 3 评论 -
多路搜索树
1.B-tree出现的意义前面介绍了树的数据结构,但是用树对硬盘、磁带等二级存储设备上读写数据时,会有问题。我们都知道,I/O操作的基础单元是block,当需要从硬盘上读数据时,包含该数据的整个block都会读进内存。而二叉树的节点可能不在同一个block里,这样对树进行遍历时,就会进行多次的block更换。如下图所示,不同的block用方框隔开。 B-Tree就能减少访问二级存储原创 2013-02-28 20:25:28 · 1604 阅读 · 0 评论 -
图的底层实现
1.图数据结构出现的背景上面几篇内容都是关于树,树在表示层次关系的数据类型时很适合,但是也仅限于“parent-child”的表示,兄弟节点等其他关系只能间接的表示,而图“graph”就能很好的弥补这个缺陷。图的应用也很广泛,我也遇到过,例如网络中的路由器在路径的选择上就是根据最小路径的算法;在进行用户行为分析时,也可以将用户的行为轨迹对应成图,进而对图进行分析,例如有哪些功能并没有使用,原创 2013-02-28 21:30:26 · 854 阅读 · 0 评论