09 2021 档案
摘要:应用场景-修路问题 胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通,各个 村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路 总里程最短? 思路: 只满足连通:将 10 条边,连接即可,
阅读全文
摘要:应用场景-集合覆盖问题 贪心算法可以解决很多场景的问题,这里以集合覆盖问题为例。 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号? 广播台 覆盖地区 K1 "北京", "上海", "天津" K2 "广州", "北京", "深圳" K3
阅读全文
摘要:应用场景-字符串匹配问题 str1 = "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好" str2 = "尚硅谷你尚硅你" 求:str2 在 str1 中是否存在,如果存在,返回第一次出现的位置,如果没有则返回 -1 暴力匹配 思路 假设 str1 匹配到 i 位置,子串 str2 匹配到 j 位
阅读全文
摘要:应用场景:背包问题 有一个背包,容量为 4 磅,现有物品如下: 物品 重量 价格 吉他(G) 1 1500 音响(S) 4 3000 电脑(L) 3 2000 要求: 达到的目标为装入的背包的总价值最大,并且重量不超出 装入的物品不能重复 介绍 动态规划(Dynamic Programming) 算
阅读全文
摘要:介绍 分治法 是一种很重要的算法。字面上的解释是 分而治之,把一个复杂的问题 分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题.... 直到最后子问题可以简单的直接求解,原问题的解即 子问题的解的合并。 这个技巧是很多高效算法的基础,比如 排序算法:快速排序、归并排序,傅里叶变换、快速
阅读全文
摘要:为什么要有图? 前面学过的 线性表 和 树: 线性表:局限于一个 直接前驱 和 一个 直接后继 的关系 树:只能有一个直接前驱(父节点) 当我们需要表示 多对多 的关系时,就需要用到 图 图的举例说明 比如:城市交通图。他就是一个图,对应程序中的图如下所示 图是一种 数据结构,其中节点可以具有 零个
阅读全文
摘要:tip:这里对多路查找树是简单介绍和讲解,因为这部分属于深入学习了 二叉树存在的问题 二叉树的操作效率较高,但是也存在问题,如下图所示 当二叉树的节点较少时,不会出现什么问题。但是当节点过多时(海量,如 1 亿),就会出现如下的问题: 构建二叉树时,需要进行多次 I/O 操作 节点较多时,一般会存储
阅读全文
摘要:二叉排序树存在的问题 一个数列 {1,2,3,4,5,6},创建一颗二叉排序树(BST) 创建完成的树如上图所示,那么它存在的问题有以下几点: 左子树全部为空,从形式上看,更像一个单链表 插入速度没有影响 但查询速度明显降低 因为需要依次比较,不能利用二叉排序树的折半优势。而且每次都还要比较左子树,
阅读全文
摘要:给你一个数列 7, 3, 10, 12, 5, 1, 9,要求能够高效的完成对数据的查询和添加。 在 为什么需要树这种数据结构 中讲解了数组、链表数据结构的优缺点,简单说: 数组访问快,增删慢 新增或移除时,需要整体移动数据 链表增删快,访问慢 只能从头开始遍历查找 那么利用 二叉排序树(Binar
阅读全文
摘要:tip:学习本篇需要懂得赫夫曼树(哈夫曼树),数据结构与算法——赫夫曼树(哈夫曼树) 基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种 编码方式,是一种用于无损数据压缩的熵编码(权编码)算法 赫夫曼编码是 赫哈夫曼树 在电讯通信中的经典的应用之一。 赫
阅读全文
摘要:基本介绍 赫夫曼树(Huffman tree): 给定 n 个 权值 作为 n 个 叶子节点,构造一颗二叉树,若该树的 带权路径长度(WPL)达到最小,称这样的二叉树为 最优二叉树,也称为 哈夫曼树(Huffman Tree),还有的叫 霍夫曼树 赫夫曼树是带权路径长度最短的树,权值较大的节点离根节
阅读全文
摘要:注意:学习本篇需要学会二叉树 关于二叉树的学习 请看 数据结构与算法——二叉树 基本介绍 堆排序(英语:Heapsort)是利用 堆 这种 数据结构 而设计的一种排序算法,堆是一个近似完全二叉树的结构,它是一种选择排序,最坏 、最好、平均时间复杂度均为 O(nlogn),它是不稳定排序。 堆是具有以
阅读全文
摘要:为什么需要树这种数据结构? 数组存储方式的分析 优点: 通过 下标 方式访问元素,速度快 对于 有序数组,还可以使用二分查找提高检索速度 缺点:如果无序数组要检索具体某个值,或插入值(按一定顺序)会整体移动,并且数组的大小固定,如果该数组已经满了但又想插入数据,那就必须对该数组进行扩容,效率较低,如
阅读全文
摘要:哈希表是一种数据结构,不是算法。 Google 上机题场景 有一个公司,当有新的员工来报道时,要求将该员工的信息加入 (id,性别,年龄,住址..), 当输入该员工的 id 时,要求查 找到该员工的 所有信息。 要求:不使用数据库、尽量节省内存、速度越快越好。 那么这道题,就可以使用哈希表 基本介绍
阅读全文
摘要:**tip:**在学习该篇前,建议去搞懂 二分查找,关于 二分查找 请看 数据结构与算法——查找算法-二分查找 基本介绍 斐波那契(黄金分割法)搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。 斐波那契搜索就是在**二分查找的基础上**根据斐波那契数列进行分
阅读全文
摘要:在讲插值查找前,我们先来看一个二分查找的场景。 **tip:**建议先搞懂二分查找再来看本篇。关于二分查找请看 数据结构与算法——查找算法-二分查找 先来看一个场景 /** * 先来看一个场景,在二分查找中查找需要几次 */ @Test public void binary2Test() { int
阅读全文
摘要:简单介绍 二分查找 也称 折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,说简单点就是要求查找的数组是有序的。 思路分析 搜索过程从数组(有序的)的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程
阅读全文
摘要:相关术语解释: 稳定:如果 a 原本在 b 前面,而 a=b,排序之后,a 仍然在 b 的前面 不稳定:不满足稳定定义 内排序(In-place):所有排序操作都在内存中完成 外排序(Out-place):由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。 时间复杂度:一个
阅读全文
摘要:简单介绍 **基数排序(radix sort)**属于 分配式排序(distribution sort),又称 桶子法(bucket sort 或 bin sort),顾名思义,它是通过键值的各个位的值,将要排序的 元素分配 至某些「桶」中,达到排序的作用。基数排序是对 传统桶排序 的扩展。 基数排
阅读全文
摘要:简单介绍 **归并排序(merge sort)**是利用 归并 的思想实现的排序方法,该算法采用经典的 分治(divide-and-conquer)策略 : 分(divide):将问题分成一些小的问题,然后递归求解 治(conquer):将分的阶段得到的各答案「修补」在一起 即:分而治之 该算法是采
阅读全文

浙公网安备 33010602011771号