数据结构和算法
文章平均质量分 83
bupt_01
北京邮电大学程序猿、后端开发攻城狮
展开
-
(十五):常用的十种算法(下)
1.普里姆算法1.1普利姆算法应用场景有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?1.2最小生成树修路问题本质就是最小生成树问题,什么是最小生成树呢?给定一个带权的无向连通图,如何选取一棵生成树,使树上所有的边的权的总和最小,这叫做最小生成树。N个顶点,一定有N-1条边包含全部顶点N-1条边都在图中举例如下:原创 2021-06-08 20:48:53 · 427 阅读 · 2 评论 -
(十四):常用十种算法(上)
1.二分查找算法这个没啥说的,分为两种:递归、非递归。2.分治算法2.1简介分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以解决很多问题:二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表原创 2021-05-26 23:28:27 · 140 阅读 · 7 评论 -
(十三):图
1.图的基本介绍1.1为什么要有图前面我们学到了线性表和树,线性表局限于直接前驱和一个直接后继结点的关系。树也只能有一个直接前驱也就是父节点。当我们需要多对多关系时候,就需要图。1.2图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:1.3图的常用概念顶点边路径无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A-> B 也可以 B->A .路径: 比如从 D -> C 的路径有原创 2021-05-10 22:54:03 · 118 阅读 · 0 评论 -
(十二):多路查找树
1.二叉树与B树1.1二叉树问题二叉树操作效率较高,但是也存在问题。二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.1.2多叉树在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway原创 2021-05-08 20:16:18 · 83 阅读 · 0 评论 -
(十一):二叉排序树与平衡二叉树
1.二叉排序树介绍二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为:2.二叉排序树的创建、遍历、删除public void add(Node node) {if (node == null) {return;}if原创 2021-04-29 20:10:14 · 370 阅读 · 0 评论 -
(十):赫夫曼树和赫夫曼编码
1.赫夫曼树1.1基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。1.2赫夫曼树几个重要概念说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。结点的权及带权路径原创 2021-04-21 23:39:31 · 743 阅读 · 0 评论 -
(九):顺序存储二叉树与线索化二叉树
1.顺序存储二叉树1.1顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看下面的示意图。顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为 2 * n + 1第n个元素的右子节点为 2 * n + 2第n个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按0开始编号如图所示)1.2顺序存储二叉树遍历//编写一个ArrayBinaryTree,实现顺序存储二叉树clas原创 2021-04-19 23:43:13 · 114 阅读 · 0 评论 -
(八):哈希表+二叉树
1.哈希表应用背景看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息.要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)2.哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存原创 2021-04-12 22:32:27 · 806 阅读 · 0 评论 -
(七):查找算法
1.线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。这个没什么好说的,逐一比对就好了,代码略2.二分查找算法请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。二分查找的思路如下所示:示例代码如下: //二分查找算法 /** * * @p原创 2021-04-06 23:08:54 · 285 阅读 · 0 评论 -
(六):排序算法
这里写目录标题1.排序算法介绍1.1排序的分类1.2算法的时间复杂度1.2.1度量算法执行时间的两种算法1.2.2时间频度1.2.3时间复杂度1.2.4常见的时间复杂度1.2.5平均时间复杂度和最坏时间复杂度1.3算法的空间复杂度2.基础的排序算法2.1冒泡排序2.1.1冒泡排序介绍2.1.2代码2.2选择排序2.2.1基本介绍2.2.2代码2.3插入排序2.3.1基本介绍2.3.2代码1.排序算法介绍排序也称为排序算法,排序是将一组数据,依指定的顺序进行排列的过程。1.1排序的分类1、内部排序:需原创 2021-03-29 22:33:21 · 148 阅读 · 0 评论 -
(五):递归
1.递归介绍1.1递归的概念简单的说,递归就是方法自己调用自己,每次调用的时候传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。1.2递归能解决什么样的问题1)各种数学问题,例如八皇后问题,汉诺塔,阶乘,迷宫问题,球和蓝子的问题等2)各种算法也会使用到递归,比如快速排序,二分查找,分治算法等。3)将用栈解决的问题,递归代码比较简洁1.3递归需要遵循的重要规则递归需要遵守的重要规则:1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)2)方法的局部变量是独立的原创 2021-03-28 23:08:47 · 77 阅读 · 0 评论 -
(四):栈
1.栈基础1.1栈的一个实际需求请输入一个表达式计算式:[722-5+1-533]这个是怎么计算呢?1.2栈的介绍栈的英文是stack,他是一个先入后出的有序列表。栈是限制线性表中的元素的插入和删除,只能在线性表的同一端进行的一种特殊的线性表,允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固定的一端,称为栈底。根据栈的定义我们可以知道,最前放入栈中的数据在栈底,最后放入的元素在栈顶,但是删除元素则相反,最后放入的元素最先删除,最先放入的元素最后删除。1.3栈的应用场景子程序的调用原创 2021-03-25 21:23:55 · 416 阅读 · 0 评论 -
(三):链表
1.链表介绍链表是有序的列表,但是他在内存中并不一定是连续的。链表是以节点的方式进行存储,是链式存储。每一个节点包括data域和next域,next域指向下一个节点。链表分为带头节点的链表和没有头结点的链表,根据实际的需求来确定。其中单链表的逻辑示意图如下:2.单链表的应用实例使用带head头的单项链表排行榜完成对水浒英雄任务的增删改查操作。2.1第一种方法在添加英雄时,直接添加到链表的尾部2.2第二种方式在添加英雄时,根据排名插入到指定位置2.3修改节点的功能思路一,先找到该节点,然原创 2021-03-19 22:03:55 · 175 阅读 · 0 评论 -
(二):稀疏数组和队列
1.稀疏数组1.1基本介绍当数组中大部分元素是0,或者为同一个数值,可以使用稀疏数组来保存。稀疏数组的处理方法:记录数组一共有几行几列,有多少个不同的值。把具有不同的值得元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。1.2稀疏数组举例使用稀疏数组可以保留类似二维数组(棋盘、地图等),把稀疏数组存盘,并且可以恢复成原来的二维数组。由于稀疏数组比较容易,因此代码省略。2.队列2.1队列介绍队列是一个有序列表,可以用数组或者链表来实现。遵循先入先出的原则。先存入先取出,原创 2021-03-13 21:50:05 · 100 阅读 · 4 评论 -
(一):数据结构和算法概述
1.数据结构和算法的关系数据结构是一门专门研究数据方式的学科,有编程语言就有了数据结构程序=数据结构+算法数据结构是算法的基础,换而言之,想学好算法,把数据结构学到位。2.线性结构和非线性结构数据结构分为线性结构和非线性结构。2.1线性结构线性结构是最为常用的数据结构,其特点就是数据元素之间存在一对一的线性关系。线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储结构的线性表顺序表,顺序表中的元素是存储连续的。链式存储的线性表是链表。链表中存储元素不一原创 2021-03-13 20:38:19 · 81 阅读 · 0 评论