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

摘要:普利姆算法 应用场景-修路问题 胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通,各个 村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路 总里程最短? 思路: 只满足连通:将 10 条边 阅读全文
posted @ 2021-10-25 19:31 无涯子wyz 阅读(68) 评论(0) 推荐(0) 编辑
摘要:KMP算法 应用场景-字符串匹配问题 str1 = "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好" str2 = "尚硅谷你尚硅你" 求:str2 在 str1 中是否存在,如果存在,返回第一次出现的位置,如果没有则返回 -1 暴力匹配 假设 str1 匹配到 i 位置,子串 str2 匹配到 阅读全文
posted @ 2021-10-23 19:42 无涯子wyz 阅读(82) 评论(0) 推荐(0) 编辑
摘要:堆排序 基本介绍 堆排序是利用 堆 这种 数据结构 而设计的一种排序算法,它是一种选择排序,最坏 、最好、平均时间复杂度均为 O(nlogn),它是不稳定排序。 堆是具有以下性质的完全二叉树: 大顶堆:每个节点的值都 大于或等于 其左右孩子节点的值 注:没有要求左右值的大小关系 小顶堆:每个节点的值 阅读全文
posted @ 2021-10-22 17:53 无涯子wyz 阅读(85) 评论(0) 推荐(0) 编辑
摘要:图 图的基本介绍 前面学过的 线性表 和 树: 线性表:局限于一个 直接前驱 和 一个 直接后继 的关系 树:只能有一个直接前驱(父节点) 当我们需要表示 多对多 的关系时,就需要用到图 比如:城市交通图。他就是一个图,对应程序中的图如下所示 图是一种 数据结构,其中节点可以具有 零个或多个相邻元素 阅读全文
posted @ 2021-10-21 16:38 无涯子wyz 阅读(99) 评论(0) 推荐(0) 编辑
摘要:多路查找树 二叉树与 B 树 二叉树存在的问题 二叉树的操作效率较高,但是也存在问题,如下图所示 当二叉树的节点较少时,不会出现什么问题。但是当节点过多时(海量,如 1 亿),就会出现如下的问题: 构建二叉树时,需要进行多次 I/O 操作 节点较多时,一般会存储在文件或则数据库中,进行多次 I/O 阅读全文
posted @ 2021-10-21 09:59 无涯子wyz 阅读(53) 评论(0) 推荐(0) 编辑
摘要:树的应用 二叉排序树 给你一个数列 7, 3, 10, 12, 5, 1, 9,要求能够高效的完成对数据的查询和添加。 在 为什么需要该数据结构 中讲解了数组、链表数据结构的优缺点,简单说: 数组访问快,增删慢 新增或移除时,需要整体移动数据 链表增删快,访问慢 只能从头开始遍历查找 那么利用 二叉 阅读全文
posted @ 2021-10-20 21:46 无涯子wyz 阅读(32) 评论(0) 推荐(0) 编辑
摘要:树结构实际应用 赫夫曼树 基本介绍 给定 n 个 权值 作为 n 个 叶子节点,构造一颗二叉树,若该树的 带权路径长度(WPL)达到最小,称这样的二叉树为 最优二叉树,也称为 哈夫曼树(Huffman Tree),还有的叫 霍夫曼树 赫夫曼树是带全路径长度最短的树,权值较大的节点离根节点较近 重要概 阅读全文
posted @ 2021-10-19 21:31 无涯子wyz 阅读(69) 评论(0) 推荐(0) 编辑
摘要:树结构基础部分 二叉树 为什么需要该数据结构 数组存储方式的分析 优点: 通过 下标 方式访问元素,速度快 对于 有序数组,还可以使用二分查找提高检索速度 缺点:如果要检索具体某个值或插入值(按一定顺序)会整体移动,效率较低,如下的示意图 链表存储方式的分析 优点:在一定程度上对数组存储方式有优化 阅读全文
posted @ 2021-10-16 15:49 无涯子wyz 阅读(38) 评论(0) 推荐(0) 编辑
摘要:哈希表 哈希表是一种数据结构,不是算法。 Google 上机题场景 有一个公司,当有新的员工来报道时,要求将该员工的信息加入 (id,性别,年龄,住址..), 当输入该员工的 id 时,要求查 找到该员工的 所有信息。 要求:不使用数据库、尽量节省内存、速度越快越好。 那么这道题,就可以使用哈希表 阅读全文
posted @ 2021-10-15 10:43 无涯子wyz 阅读(43) 评论(0) 推荐(0) 编辑
摘要:顺序/线性查找算法 基本思想:逐一比较数列中的值,找到则返回。 很简单,这里给一个需求: 有一个数列:{1,8, 10, 89, 1000, 1234},判断数列中是否包含此名称(顺序查找),要求:如果找到,则输出找到,并给出下标值 /** * 线性查找 * @param arr 要查找数据的集合 阅读全文
posted @ 2021-10-14 20:57 无涯子wyz 阅读(23) 评论(0) 推荐(0) 编辑
摘要:冒泡排序 冒泡排序(Bubble Sorting)的基本思想:通过对待排序序列 从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的旗袍一样逐渐向上冒。 优化点:因为排序过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换 阅读全文
posted @ 2021-10-14 17:12 无涯子wyz 阅读(45) 评论(0) 推荐(0) 编辑
摘要:排序算法 排序也称 排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。 排序算法的分类 分两类:内部排序、外部排序。 内部排序: 指将需要处理的所有数据,都加载到 内部存储器(内存) 中进行排序 外部排序: 数据量过大,无法全部加载到内存中,需要借助 **外部存 阅读全文
posted @ 2021-10-14 16:54 无涯子wyz 阅读(124) 评论(0) 推荐(0) 编辑
摘要:递归 递归入门 递归的应用场景 迷宫问题(回溯),上图说明: 红色的方块是围墙,是小球不能够走的 白色的方块是小球可以活动的范围 左上角是小球的起点,移动到右下角,就算走出了迷宫 那么在这个场景中,就用到了递归(Recursion) 递归的概念 简单说:递归就是方法自己调用自己,每次调用时 传入不同 阅读全文
posted @ 2021-10-12 14:31 无涯子wyz 阅读(45) 评论(0) 推荐(0) 编辑
摘要:在上一篇文章中,我们完整实现了计算器功能,但是还存在一些问题: 解决不支持多位数 不支持多位数的原因就在于:在扫描表达式时,没有考虑多位数的解析。那么思路是:当我们当前的数据是数字的时候,不能直接添加,而是保存到一个String中,需要判断下一位数据是不是字符或者没有下一位,如果是,将字符串转换成i 阅读全文
posted @ 2021-10-11 15:21 无涯子wyz 阅读(49) 评论(0) 推荐(0) 编辑
摘要:双向链表 单向链表的缺点 从前面的练习题,包括实现单向链表中会发现 单向链表 的以下问题: 查找方向 只能是单向 不能自我删除 需要靠辅助节点,要找到删除节点的上一个节点和删除节点,才能完成删除 而以上问题,双向链表: 可以双向查找 可以自我删除 双向链表的思路分析 双向链表的结构如上图所示,每个节 阅读全文
posted @ 2021-10-10 21:38 无涯子wyz 阅读(109) 评论(0) 推荐(0) 编辑
摘要:数据结构概述 在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。 不同种类的数据结构适合于不同种类的应用,而部分甚至 阅读全文
posted @ 2021-10-09 22:42 无涯子wyz 阅读(120) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示