随笔分类 - 数据结构与算法分析
摘要:树 1.1树的基本定义 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家 谱、单位的组织架构、等等。 树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就 是说它是根朝上,而叶朝下的。 树具有以
阅读全文
摘要:符号表 符号表最主要的目的就是将一个键和一个值联系起来,符号表够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。 符号表中,键具有唯一性。 符号表在实际生活中的使用场景也非常广泛,见下表: | 应用 | 查找目的 | 键 | 值 | | | | | | | 字典
阅读全文
摘要:队列 队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来 队列的API设计 | 类名 | Queue | | | | | 构造方法 | Queue() : 创建Queue对象
阅读全文
摘要:##逆波兰表达式求值问题 中缀表达式: 中缀表达式就是我们平常生活中使用的表达式,例如:1+3*2,2-(1+3)等等,中缀表达式的特点是:二元运算符总 是置于两个操作数中间。 中缀表达式是人们最喜欢的表达式方式,因为简单,易懂。但是对于计算机来说就不是这样了,因为中缀表达式的 运算顺序不具有规律性
阅读全文
摘要:括号匹配问题 问题描述: 给定一个字符串,里边可能包含"()"小括号和其他字符,请编写程序检查该字符串的中的小括号是否成对出现。 例如: "(上海)(长安)":正确匹配 "上海((长安))":正确匹配 " 上海(长安(北京)(深圳)南京)":正确匹配 " 上海(长安))":错误匹配 " ((上海)长
阅读全文
摘要:1.3栈 1.3.1栈概述 存储货物或供旅客住宿的地方,可引申为仓库、中转站 。例如我们现在生活中的酒店,在古时候叫客栈,是供旅客 休息的地方,旅客可以进客栈休息,休息完毕后就离开客栈。 1.3.1 计算机中的栈 我们把生活中的栈的概念引入到计算机中,就是供数据休息的地方,它是一种数据结构,数据既可
阅读全文
摘要:1.2线性表(链表) 之前我们已经使用顺序存储结构实现了线性表,我们会发现虽然顺序表的查询很快,时间复杂度为O(1),但是增删的 效率是比较低的,因为每一次增删操作都伴随着大量的数据元素移动。这个问题有没有解决方案呢?有,我们可以 使用另外一种存储结构实现线性表,链式存储结构。 链表是一种物理存储单
阅读全文
摘要:约瑟夫问题 问题描述: 传说有这样一个故事,在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决 定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,第一个人从1开始报数,依次往 后,如果有人报数到3,那么这个人就必须自杀,然后再由他的下一个人重新
阅读全文
摘要:1.1 顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存 储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元 素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 1.1.1 顺序表的实
阅读全文
摘要:快速排序 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。 需求: 排序前:{6, 1, 2,
阅读全文
摘要:归并排序 2.2.1递归 正式学习归并排序之前,我们得先知道一下递归算法。 定义: 定义方法时,在方法内部调用方法本身,称之为递归。 public void show(){ System.out.println("aaaa"); show(); } 作用: 它通常把一个大型复杂的问题,层层转换为
阅读全文
摘要:高级排序 之前我们学习过基础排序,包括冒泡排序,选择排序还有插入排序,并且对他们在最坏情况下的时间复杂度做了分析,发现都是O(N^2),而平方阶通过我们之前学习算法分析我们知道,随着输入规模的增大,时间成本将急剧上升,所以这些基本排序方法不能处理更大规模的问题,接下来我们学习一些高级的排序算法,争取
阅读全文
摘要:排序 简单排序 在我们的程序中,排序是非常常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则进行排序。比 如查询一些订单,按照订单的日期进行排序;再比如查询一些商品,按照商品的价格进行排序等等。所以,接下来 我们要学习一些常见的排序算法。 在java的开发工具包jdk中,已经给我
阅读全文
摘要:1.2 算法的空间复杂度分析 计算机的软硬件都经历了一个比较漫长的演变史,作为为运算提供环境的内存,更是如此,从早些时候的512k,经 历了1M,2M,4M...等,发展到现在的8G,甚至16G和32G,所以早期,算法在运行过程中对内存的占用情况也是 一个经常需要考虑的问题。我么可以用算法的空间复杂
阅读全文
摘要:1.1.2算法时间复杂度分析 1.1.2.1大O记法 定义: 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,记作:T(n)=O(f(n)) O(f(n))越低这个算法就越优秀。它表示随着问题规模n的增大,算法执行时间 的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,
阅读全文
摘要:数据结构与算法概述 什么是数据结构 官方解释: 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 大白话: 数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据 1.2数据结构分类 传统上,我们可以吧数据结构分为逻辑结构和物理结
阅读全文