![](https://img-blog.csdnimg.cn/20200724174100895.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
老韩数据结构与算法
文章平均质量分 90
明明你也很爱我,没理由爱不到结果
OnebyWang
无限大な梦のあとの何もない世の中じゃ
展开
-
第 14 章 程序员常用 10 种算法
第 14 章 程序员常用 10 种算法1、二分查找算法1.1、二分查找算法介绍前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(log2n) ,即查找到需要的目标位置最多只需要log2n步,假设从[0,99]的队列(100个数,即n=100)中寻到目标数30,则需要查找步数为log2100 , 即最多需要查找7次( 2^6 < 100 <原创 2020-10-02 20:03:41 · 3873 阅读 · 7 评论 -
第 13 章 图
第 13 章 图1、图基本介绍1.1、为什么要有图前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图1.2、图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:1.3、图的常用概念顶点(vertex)边(edge)路径无向图(右图)无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A->原创 2020-08-13 18:47:59 · 1371 阅读 · 0 评论 -
第 12 章 多路查找树
第 12 章 多路查找树1、二叉树与 B 树1.1、二叉树存在的问题二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度1.2、多叉树的基本介绍在二叉树中,每个节点有数据项,最多有两个子节点。如原创 2020-08-13 16:59:13 · 994 阅读 · 1 评论 -
第 11 章 树结构实际应用
第 11 章 树结构实际应用1、堆排序1.1、堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法, 堆排序是一种选择排序, 它的最坏, 最好, 平均时间复杂度均为 O(nlogn), 它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆,注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值, 称为小顶堆完全二叉树:一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下原创 2020-08-13 16:46:57 · 2922 阅读 · 13 评论 -
第 10 章 树结构的基础部分
第 10 章 树结构的基础部分1、二叉树1.1、为什么需要二叉树1.1.1、数组存储方式的分析优点: 通过下标方式访问元素, 速度快。 对于有序数组, 还可使用二分查找提高检索速度缺点: 如果要检索具体某个值, 或者插入值(按一定顺序)会整体移动,效率较低1.1.2、链式存储方式的分析优点: 在一定程度上对数组存储方式有优化(比如: 插入一个数值节点, 只需要将插入节点, 链接到链表中即可,删除效率也很好)。缺点: 在进行检索时, 效率仍然较低, 比如(检索某个值, 需要从头节点开始原创 2020-08-12 22:19:06 · 2214 阅读 · 8 评论 -
第 9 章 哈希表
第 9 章 哈希表1、Google 上机题看一个实际需求, google 公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id, 性别, 年龄, 住址…),当输入该员工的 id 时,要求查找到该员工的所有信息要求:不使用数据库,尽量节省内存,速度越快越好 => 哈希表(散列)2、哈希表基本介绍散列表(Hash table, 也叫哈希表) ,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录, 以加快原创 2020-08-06 20:35:11 · 1181 阅读 · 2 评论 -
第 8 章 查找算法
第 8 章 查找算法1、查找算法介绍顺序(线性)查找二分查找/折半查找插值查找斐波那契查找2、线性查找编写线性查找算法代码public class SeqSearch { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 };// 没有顺序的数组 int index = seqSearch(arr, -11); if (index == -1) { System.out.pr原创 2020-08-06 20:29:21 · 1184 阅读 · 12 评论 -
第 7 章 排序算法
第 7 章 排序算法1、排序算法介绍1.1、排序算法的简介排序也称排序算法(Sort Algorithm), 排序是将一组数据, 依指定的顺序进行排列的过程。1.2、排序算法的分类**内部排序:**指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。**外部排序法:**数据量过大, 无法全部加载到内存中, 需要借助外部存储(文件等)进行排序。常见的排序算法分类2、算法的复杂度2.1、时间复杂度的度量方法事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计原创 2020-08-06 19:14:33 · 3351 阅读 · 8 评论 -
第 6 章 递归
第 6 章 递归1、递归介绍1.1、递归应用场景看个实际应用场景, 迷宫问题(回溯), 递归(Recursion)1.2、递归的概念简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。1.3、递归调用机制打印问题阶乘问题// 阶乘问题public static int factorial(int n) { if (n == 1) { return 1; } else {原创 2020-08-06 17:05:21 · 1572 阅读 · 3 评论 -
第 5 章 栈
第 5 章 栈1、栈的基本介绍1.1、栈的实际需求请计算表达式:[722-5+1-5+3-3] 的值请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 * 2 * 2 - 5,但是计算机怎么理解这个算式的对计算机而言, 它接收到的就是一个字符串, 我们讨论的是这个问题:栈1.2、栈的基本性质栈的英文为(stack)栈是一个**先入后出(FILO-First In Last Out)**的有序列表。栈(stack)是限制线性表中元素的插入和原创 2020-08-06 16:44:02 · 5768 阅读 · 1 评论 -
第 4 章 链表
第 4 章 链表1、链表(Linked List)介绍1.1、内存结构内存上来看:链表存储空间不连续(不像数组)1.2、逻辑结构逻辑上来看:链表属于线性结构1.3、链表特点链表是以节点的方式来存储,是链式存储data 域存放数据,next 域指向下一个节点链表分带头节点的链表和没有头节点的链表, 根据实际的需求来确定2、链表应用场景2.1、水浒英雄榜使用带 head 头的单向链表实现【水浒英雄排行榜管理】2.2、链表节点定义no :英雄编号name :英原创 2020-07-26 11:43:38 · 4445 阅读 · 18 评论 -
第 3 章:稀疏数组和队列
第 3 章:稀疏数组和队列1、稀疏数组1.1、实际需求编写的五子棋程序中,有存盘退出和续上盘的功能因为该二维数组的很多值是默认值 0 ,因此记录了很多没有意义的数据,我们将其转为稀疏数组进行存储1.2、稀疏数组应用1.2.1、稀疏数组处理方法稀疏数组把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模稀疏数组也是二维数组,行数由原数组的数据决定,列数一般为 3 列稀疏数组的第一行记录原数组一共有几行几列,有多少个不为零的值第一列:原数组的行数第二列:原数组原创 2020-07-25 20:44:43 · 4976 阅读 · 7 评论 -
第 2 章 Readme
第 2 章 Readme1、参考资料尚硅谷Java数据结构与java算法(Java数据结构与算法)2、笔记地址老韩数据结构与算法原创 2020-12-28 16:44:40 · 1991 阅读 · 1 评论