随笔分类 -  数据结构和算法

摘要:通用数据结构 可以简单的按照速度将通用数据结构划分为:数组和链表(最慢),树(较快),哈希表(最快)。增、删、改、查是四大常见操作,不过其实可以浓缩为两个操作:增和查。删除操作和和修改操作都是建立在查找操作上的,所以完美的数据结构应该是具有较高的插入效率和查找效率。 通用数据结构关系 可以根据下图选 阅读全文
posted @ 2016-10-05 14:19 lz3018 阅读(13907) 评论(2) 推荐(4) 编辑
摘要:基本概念 邻接:如果两个顶点被同一条边连接,就称这两条边是邻接的。 路径:路径是边的序列。 连通图:如果至少有一条路径可以连接起图中的所有顶点,就称图为连通图。 极大连通子图:非连通图中包含几个连通图,其中包含最多顶点的称为极大连通子图。 一般用两种方法表示图:邻接矩阵和邻接表。(如果两个顶点被同一 阅读全文
posted @ 2016-08-27 11:05 lz3018 阅读(245) 评论(0) 推荐(0) 编辑
摘要:概述 查找就是在由若干记录组成的集合中找出关键字值与给定值相同的记录。如查找成功,返回找到的记录的信息或者在表中的位置,查找失败就返回一个代表失败的标志。一个查找算法的优劣取决于查找过程中的比较次数,使用平均比较长度(平均比较次数)ASL来衡量查找算法的效率,ASL是和指定值进行比较的关键字的个数的 阅读全文
posted @ 2016-08-17 13:05 lz3018 阅读(919) 评论(0) 推荐(0) 编辑
摘要:排序算法种类繁多。根据处理的数据规模与存储特点,可分为内部排序和外部排序:前者处理的数据规模不大,内存足以容纳;后者处理的数据规模较大,必须将数据存放于外部存储器中,每次排序的时候需要访问外存。根据输入的不同形式,分为脱机算法和在线算法:前者待排序的数据是以批处理的形式给出的;而在云计算之类的环境中 阅读全文
posted @ 2016-08-05 17:38 lz3018 阅读(12021) 评论(0) 推荐(0) 编辑
摘要:1) 双链表在最前端和最后端各设置一个哑节点。这两个节点分别称为头结点和尾节点。头结点的next指向首节点,首节点的prev指向头结点。头结点其他域为null。尾节点的prev指向末节点,末节点的next指向尾节点。尾节点其他域为null。 在链表为空时,头结点和尾节点已经存在了,并且此时头结点的n 阅读全文
posted @ 2016-08-03 10:06 lz3018 阅读(928) 评论(0) 推荐(0) 编辑
摘要:链表 链表是使用一段任意的存储单元存储线性表(元素之间是一对一的关系,除了第一个和最后一个元素之外)元素的数据结构,链表有两个基本单元组成,由于是不刻意使用连续的存储空间存储元素,所以无法使用物理上的相邻来表示线性表的对应关系,所以就需要创建类结构Node,其中除了表示元素数据的字段之外还需要维护一 阅读全文
posted @ 2016-08-02 17:06 lz3018 阅读(1883) 评论(0) 推荐(1) 编辑
摘要:可以仿照利用数组实现栈的过程,使用数组实现队列。以front指向队首元素,值始终为数组首元素a[0]。出队时,front保持不变,删除队首元素,其余元素依次向前移动,时间复杂度是O(n)。入队时,根据队列大小将元素存储到相应位置。上述实现因为不断移动元素,效率太低。因此以下使用环形数组的形式来构造队 阅读全文
posted @ 2016-08-02 11:23 lz3018 阅读(4435) 评论(0) 推荐(0) 编辑
摘要:我们平常书写的四则运算表达式属于中缀表达式,形式为"9+(3-1)*3+10/2",因为所有的运算符号都在两操作数之间,所以称为中缀表达式。我们使用中缀表达式来计算表达式的值,不过这种形式并不适合计算机求解。接下来,我们将中缀表达式转化为后缀表达式,所谓的后缀表达式就是操作符位于操作数后面的不包含括 阅读全文
posted @ 2016-08-01 19:00 lz3018 阅读(3532) 评论(0) 推荐(0) 编辑
摘要:1)编写程序,求解a^b。其中b是正整数。 方法1. 这种使用连乘计算幂值的算法,复杂度是O(n)。不过如果将连乘拆分为若干相乘的表达式就可以减少做乘法的次数,自然也能提高算法效率。 方法2:快速幂计算 以a^10为例,一般方法是a^10=a*a*a*a*a*a*a*a*a*a,做9次乘法操作。为了 阅读全文
posted @ 2016-07-30 12:03 lz3018 阅读(660) 评论(0) 推荐(0) 编辑
摘要:A. 二叉查找树(Binary Search Tree),又称为有序二叉树,排序二叉树,满足以下性质: 1)没有键值相等的节点。 2)若左子树不为空,左子树上节点值均小于根节点的值。 3)若右子树不为空,右子树上节点值均大于根节点的值。 二叉查找树中对于目标节点的查找过程类似与有序数组的二分查找,并 阅读全文
posted @ 2016-07-15 14:39 lz3018 阅读(4505) 评论(0) 推荐(2) 编辑
摘要:二叉树是一种特殊的树形结构,每个节点最多有两个子节点,两个节点有左右之分,次序不能颠倒。一般使用递归来定义二叉树,因此与二叉树相关的问题都可以通过递归来解决,二叉树节点的定义如下: 1 class Node{ 2 public int value=-1; 3 public Node leftNode 阅读全文
posted @ 2016-07-05 17:14 lz3018 阅读(858) 评论(0) 推荐(0) 编辑
摘要:矩阵相乘最简单的形式就是一个三层循环,首先给出表示形式:C=A*B,其中A是左矩阵,是i*k的矩阵,B是右矩阵,是k*j的矩阵。 1)第一种方法就是以“行*列”的方式来计算,代码如下: 运行时间是551s 2)第二种方法不是直接采用“行*列”的方式来计算,而是直接取出右矩阵的一行,分别与左矩阵的一个 阅读全文
posted @ 2016-04-11 11:27 lz3018 阅读(3963) 评论(0) 推荐(0) 编辑
摘要:先上代码: 1)reachMap的key是图中一个节点的id,而对应的value是列表形式,存储了这个节点可以直接到达的所有节点。其实,reachMap就是图的邻接表存储形式。 2)搜索得到的一条路径存储在connectionPath中,使用Stack实现: 3)所有的路径存储在connection 阅读全文
posted @ 2016-04-07 14:51 lz3018 阅读(1400) 评论(0) 推荐(1) 编辑