随笔分类 - 数据结构和算法
摘要:一、普里姆算法 源码:普里姆算法 1,介绍 普里姆算法是图结构中寻找最小生成树的一种算法。所谓生成树,即为连通图的极小连通子图,其包含了图中的n个顶点,和n-1条边,这n个顶点和n-1条边所构成的树即为生成树。当边上带有权值时,使生成树中的总权值最小的生成树称为最小代价生成树,简称最小生成树。最小生
阅读全文
摘要:一、二分查找算法(非递归) 1,递归版二分查找算法 详情请点击 2,非递归二分查找算法介绍 源码:二分查找(非递归) 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n步 3,代
阅读全文
摘要:一、图基本介绍 1,为什么要有图 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图 2,图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图: 3,
阅读全文
摘要:一、二叉树与B树 1,二叉树的问题分析 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题: 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 问题 2:节点海量,
阅读全文
摘要:一、堆排序 详情查看:排序算法 二、赫夫曼树 源码: 构建赫夫曼树 1,基本介绍 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近 结
阅读全文
摘要:一、数组存储、链式存储与数存储 1,数组存储 优点:通过下标方式访问元素,速度快。对于有序数组,还可以通过二分查找提高检索速度。 缺点:如果检索具体某个值,或者插入值(按一定顺序)会整体移动,效率低 2,链式存储 优点:在一定程度上对数组存储有优化(比如:插入一个数值节点,只需要将插入节点连接到链表
阅读全文
摘要:一、线性查找 源码:线性查找 1,思路 线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。 2,特点 按顺序查找,数组(集合)可以无序 时间复杂度:O(N) 3,
阅读全文
摘要:一、时间复杂度 1,概念 时间复杂度:算法的时间复杂度是一个函数,他定性描述了该算法的运行时间。 大O记法:是算法的时间复杂度表达公式。简单的说大O记法可以告诉你一个算法耗费的时间长度同算法所处理的数据量大小的关系。大O记法只是一个概念性的或定性的记号,不能通过它来真正计算一个算法所耗费的精确时长。
阅读全文
摘要:一、简介 1,概念 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 2,调用机制 3,递归需遵循的规则 执行一个方法时, 就创建一个新的受保护的独立空间(栈空间) 方法的局部变量是独立的, 不会相互影响, 比如 n 变量 如果方法中使用的
阅读全文
摘要:一、简介 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top), 另一端为固定的一端, 称为栈底(Bo
阅读全文
摘要:一、链表(Linked List)介绍 链表是有序的列表,但是它在内存中式存储如下 1) 链表是以节点的方式来存储,是链式存储 2) 每个节点包含 data 域, next 域:指向下一个节点. 3) 如图:发现链表的各个节点不一定是连续存储. 4) 链表分带头节点的链表和没有头节点的链表,根据实际
阅读全文
摘要:一、稀疏数组 1,定义 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 2,转换 3,代码实现 源码: 稀疏数组 数组压缩 /** * 压缩为稀疏数组 * @param cherryArray 原始数组 */ private static int[][] toSp
阅读全文