
算法系列
文章平均质量分 71
严文文-Chris
这个作者很懒,什么都没留下…
展开
-
为什么哈夫曼编码不会有歧义?
原因说明哈夫曼编码是前缀码所有编码之间互不为前缀解码树有唯一路径每次从根节点走到叶子,就确定一个字符按位读取无歧义不会出现多种解释路径因此,哈夫曼编码即使是变长编码,也能安全、无歧义地解码。原创 2025-04-15 14:44:03 · 330 阅读 · 0 评论 -
【广度优先搜索遍历小结】
广度优先搜索(Breadth-First Search, BFS)是一种图的遍历方法。它的策略是“先广后深”,也就是说,先从起点开始,把离起点最近的点全部访问一遍,再继续访问离起点稍远的点,直到所有的点都访问完。使用方式:BFS 通常用队列来实现。应用场景:可以用来求最短路径、检测连通性、生成最小生成树等。原创 2024-12-09 15:18:53 · 473 阅读 · 0 评论 -
【深度优先搜索遍历小结】
深度优先搜索(DFS)是一种用来遍历图的方法,它的特点是“走到底再回来”。什么意思呢?就是从一个起点出发,沿着一条路径一直往下走,直到走不动了,然后再回头找其他没走过的路继续走,直到所有的点都被访问过。适用范围:DFS 可以用在无向图、有向图、甚至是带权图里。常见用途:比如检测图是否连通、找路径、生成树,甚至一些复杂的问题也能用 DFS 来解决。特性邻接表邻接矩阵时间复杂度( O(V^2) )空间复杂度( O(V^2) )适用场景稀疏图(连接少的图)稠密图(连接多的图)实现难度。原创 2024-12-09 15:15:05 · 525 阅读 · 0 评论 -
【哈夫曼编码】
哈夫曼编码(Huffman Coding)是基于贪心算法的压缩技术,用于为不同频率的字符分配变长编码。在哈夫曼编码中,频率较高的字符被分配较短的编码,而频率较低的字符被分配较长的编码。哈夫曼编码的关键步骤是构建哈夫曼树。原创 2024-12-06 15:22:05 · 479 阅读 · 0 评论 -
【哈夫曼编码小结】
哈夫曼编码是一种无损数据压缩算法,它通过为频率较高的字符分配较短的编码,为频率较低的字符分配较长的编码,从而有效地减少数据的总编码长度。哈夫曼编码基于原则,哈夫曼编码最早是由在 1952 年提出的。它的出现源于数据压缩的需求,特别是减少字符表示所需的比特数,从而节省存储空间和传输带宽。哈夫曼编码被广泛应用于文件压缩、图像压缩、音频压缩等领域。在早期的计算机存储和网络通信中,数据存储和传输的带宽是非常有限的。为了更有效地利用这些资源,必须采用来减少数据的存储和传输需求。原创 2024-12-06 10:06:57 · 674 阅读 · 0 评论 -
【哈夫曼树构造算法】
定义了表示哈夫曼树节点的类weight:用于存储节点的权重值,也就是构建哈夫曼树时依据的关键属性,比如可以表示某个字符出现的频率等。parent:记录该节点的父节点在节点列表中的索引位置,初始化为-1,表示还没有父节点,也就是该节点一开始是独立的树(只有根节点的树)。lch:存储该节点左孩子节点在节点列表中的索引位置,初始化为-1,意味着一开始没有左孩子。rch:表示该节点右孩子节点在节点列表中的索引位置,同样初始化为-1,代表开始时没有右孩子。构造函数用于创建一个新的节点对象,传入的参数。原创 2024-12-06 09:33:12 · 769 阅读 · 0 评论 -
【链表小结】
链表(Linked List)是一种动态数据结构,由一系列的节点(Node)按顺序连接而成,每个节点包含数据域和指向下一个节点的指针(或引用)。链表通过指针将节点连接成一个有序的序列。链表的基本组成部分包括和,这些概念有助于理解链表的结构和操作。原创 2024-12-05 16:06:30 · 1187 阅读 · 0 评论 -
【线性表小结】
链式存储使用链表来存储线性表的数据,每个节点包含数据和指向下一个节点的指针。插入和删除操作较为灵活,不需要移动元素,只需要调整指针即可。链表又有单链表、双链表和循环链表,不同链表对数据的操作也有不同,下篇文章详细解释,欢迎指出待优化点!顺序存储是通过数组来存储线性表的数据。可以根据下标来访问元素,但插入和删除操作会涉及到数组的移动。(即使用链表)两种方式进行实现。以下是这两种方式的基本实现和常见操作。在Java中,线性表可以通过。原创 2024-12-05 15:41:42 · 761 阅读 · 0 评论 -
【算法-分治】
分治算法是一种算法设计范式,它。这种方法在许多计算机科学领域中非常有效,尤其是在排序、搜索和数值计算中。原创 2024-09-30 21:22:04 · 444 阅读 · 0 评论 -
【算法 -桶排序】
桶排序特别适合于数据分布较均匀的场景。原创 2024-09-29 19:57:10 · 451 阅读 · 0 评论 -
【算法-基数排序】
基数排序是一种高效的线性时间排序算法,尤其适合对整数和字符串数据进行排序。尽管它的空间复杂度较高,应用场景较为特定,但在处理大量数据且位数不多的情况下,它是一种优于比较排序的选择。原创 2024-09-20 20:39:35 · 1003 阅读 · 0 评论 -
【算法-堆排序】
堆是一种特殊的完全二叉树,分为最大堆和最小堆最大堆:每个节点的值都大于或等于其子节点的值,堆顶为最大值。最小堆:每个节点的值都小于或等于其子节点的值,堆顶为最小值。在堆排序中,通常使用最大堆来进行升序排序。完全二叉树父节点:(i - 1) / 2左子节点:2 * i + 1右子节点:2 * i + 2堆排序是一种稳定高效的排序算法,时间复杂度为 O(n log n),空间复杂度为 O(1),具有普遍适用的特点。原创 2024-09-20 20:06:25 · 566 阅读 · 0 评论 -
【算法-快排】
快速排序在多数情况下都非常高效,特别适合处理大规模数据。它的平均时间复杂度为 O(n log n),但在最差情况下会退化为 O(n²)。为了避免最坏情况,可以随机选择基准或采用“三数取中”法来选择基准元素。原创 2024-08-27 23:55:08 · 417 阅读 · 0 评论 -
【设计模式-代理】
代理原创 2024-08-27 15:52:31 · 995 阅读 · 0 评论 -
分治体现:归并排序
大开始这个算法之前,我一定要大大的夸赞我的团队,让我从茫然到茅塞顿开,真的是很棒的体验。算法真的很有趣,希望经过一段时间的解除,能让算法认识我,哈哈!今天给大家讲讲分治算法,其实分支里面还有递归的概念,但是时间有限,今天就不讲了,下次讲吧。有位大神告诉我,要想把事情做的有效率,有质量,就要有分治和抽象的思想,那么到底什么是分治呢?字面意思:分开治理,此处举一个归并排序的例子吧。归并排序 是成功应用...原创 2018-05-13 23:17:23 · 245 阅读 · 13 评论 -
基数排序
基数排序radix sort所有的比较数值统一为同样的长度,数位短的补零,必须是正整数 属于分配时排序,另称 桶子法,根据兼职的部分资讯,将要排序的元素分配至某些桶中,借以达到排序的作用,是稳定性排序,复杂度是O(nlog(r)m),m为堆数,r为基数。 LSD基数排序适用于位数小的列数,若果位数多的话,使用MSD的效率比较好。MSD有高为基地开始进行分配,但在分配之后要在每个原创 2016-07-22 17:59:25 · 469 阅读 · 16 评论