数据结构与算法
文章平均质量分 83
数据结构与算法
Ray-国
太原科技大学软件工程大二在读
展开
-
算法设计--贪心
Huffman树的构建过程是根据字符的出现频率来生成的,频率越高的字符在树中的路径越短。这种编码方式可以最大限度地减少数据存储空间,因为出现频率高的字符被赋予了较短的编码,而出现频率低的字符被赋予了较长的编码。贪心算法的时间复杂度是多少?简单说就是建立【字符】到【数字】的对应关系,如下面大家熟知的 ASC II 编码表,例如,可以查表得知字符【a】对应的数字是十六进制数【0x61】生成编码表:通过遍历Huffman树的路径,将左子树的路径标记为0,右子树的路径标记为1,可以得到每个字符对应的编码表。原创 2023-10-19 08:53:03 · 55 阅读 · 1 评论 -
算法设计--动态规划
动态规划(Dynamic Programming)是一种解决复杂问题的算法思想。它通过将问题分解为一系列子问题,并将子问题的解存储起来,从而避免重复计算,提高算法效率。Dynamic:在这里指用数学方法来根据子问题求解当前问题(通俗理解就是找到递推公式)Programming:指缓存上一步结果,根据上一步结果计算当前结果(多阶段进行)最优子结构:问题的最优解包含子问题的最优解。无后效性:一个阶段的状态只受前面若干个阶段的状态影响,与未来阶段无关。原创 2023-10-21 15:57:33 · 70 阅读 · 0 评论 -
算法思想--分治
合并k个排序链表:分而治之,分到区间内只有一个链表,合并区间二分查找:减而治之,每次搜索范围内元素减少一半。原创 2023-10-21 17:51:07 · 28 阅读 · 0 评论 -
基础数据结构在JDK中的实现方式
它提供了各种实现不同功能和特性的集合类,包括列表(List)、集合(Set)、队列(Queue)和映射(Map)等。4. 队列(Queue):队列是一种先进先出(FIFO)的数据结构,JDK提供了Queue接口和不同的实现类来实现队列数据结构,比如ArrayDeque、LinkedList等。List接口:List接口表示一个有序的集合,允许元素的重复。Collection接口:Collection接口是List、Set和Queue接口的父接口,它定义了一些基本的集合操作方法,如添加、删除、遍历和判空等。原创 2023-10-18 19:56:53 · 47 阅读 · 1 评论 -
数据结构:图
(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。在网络设计中,节点代表着网络中的设备,边代表着设备之间的连接,而边的权重通常表示连接的成本。例如,1->6 的距离是 14,而1->3->6 的距离是11。对于当前顶点,遍历其所有未访问的邻居,并更新它们的临时距离为更小,若距离更新需加入队列。例如,1->6 的距离是 14,而1->3->6 的距离是11。原创 2023-10-16 20:18:21 · 36 阅读 · 1 评论 -
非比较排序算法
非比较排序算法时间复杂度空间复杂度稳定性计数排序O(n+k)O(n+k)稳定桶排序O(n+k)O(n+k)稳定基数排序O(d*(n+k))O(n+k)稳定其中n 是数组长度k 是桶长度d 是基数位数。原创 2023-10-16 19:41:21 · 24 阅读 · 1 评论 -
数据结构--哈希表
我们的 HashTable 中表格容量是 2 的 n 次方,很多优化都是基于这个前提,能否不用 2 的 n 次方作为表格容量?JDK 的 HashMap 中采用了将对象 hashCode 高低位相互异或的方式减少冲突,怎么理解。经验表明如果每次乘的是较大质数,可以有更好地降低 hash 冲突,因此改【乘 10】为【乘 31】【乘 31】可以等价为【乘 32 - hash】,进一步可以转为更高效地【左移5位 - hash】的不同对象,他们的 hashCode 不一样,不能够用 hash 值来反映对象的。原创 2023-10-15 08:46:10 · 26 阅读 · 1 评论 -
数据结构--队列
计算机科学中,queue 是以顺序的方式维护的一组数据集合,在一端添加数据,从另一端移除数据。习惯来说,添加的一端称为尾,移除的一端称为头,就如同生活中的排队买商品。原创 2023-10-14 12:00:18 · 31 阅读 · 1 评论 -
数据结构--链表
在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续。可以分类为5单向链表,每个元素只知道其下一个元素是谁双向链表,每个元素知道其上一个元素和下一个元素循环链表,通常的链表尾节点 tail 指向的都是 null,而循环链表的 tail 指向的是头节点 head链表内还有一种特殊的节点称为哨兵(Sentinel)节点,也叫做哑元( Dummy)节点,它不存储数据,通常用作头尾,用来简化边界判断,如下图所示1.2随机访问性能。原创 2023-10-14 11:11:24 · 110 阅读 · 1 评论 -
数据结构--数组
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识,因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。小测试已知 array 的数据的起始地址是 0x7138f94c8,那么元素 3 的地址是什么?答:0x7138f94c8 + 2 * 1 = 0x7138f94ca随机访问性能即根据索引查找元素,时间复杂度是 O(1)原创 2023-10-14 10:08:41 · 33 阅读 · 0 评论 -
数据结构--总结
什么是数据结构?数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地使用和操作。它定义了不同类型数据的组织方式和相互之间的关系,使得数据的访问和操作更加高效和方便。计算机中常用的数据结构包括以下几种:1. 数组(Array):顺序存储的数据结构,可以通过下标访问元素。2. 链表(Linked List):由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。3. 栈(Stack):一种后进先出(LIFO)的数据结构,元素只能在栈顶进行插入和删除操作。原创 2023-10-13 12:56:53 · 27 阅读 · 0 评论