- 博客(47)
- 收藏
- 关注
原创 数据结构与算法——拓扑排序
如果结果包含所有顶点,说明图是 DAG;如果结果顶点数少于总数,说明有环。因为 DFS 先访问完所有后继,再把当前顶点加入结果,最后反转即可。上的一种线性排序:把图中所有顶点排成一个序列,使得对每条有向边。结果不唯一:同一个 DAG 可能有多个合法拓扑序。这类问题,比如课程先修、编译顺序、任务调度。
2026-09-27 10:18:30
205
原创 数据结构与算法——跳跃表
跳跃表(Skip List)是一种概率性数据结构,它就像是升级版的有序链表,专门用来实现有序集合的功能。它通过引入多层索引来提高查找、插入和删除操作的效率,使得这些操作的时间复杂度可以达到 O(logn),其效率可以与平衡二叉搜索树相媲美。跳跃表的核心思想是通过随机化来维护多层索引,从而避免像平衡树那样复杂的平衡操作。随机性决定节点层数:在跳跃表中,每个节点的层数是随机确定的。当插入一个新节点时,算法会根据一个随机过程来决定该节点应该拥有多少层。
2026-09-26 10:46:08
205
原创 数据结构与算法——并查集
并查集(Union-Find),又称不相交集合(Disjoint Set Union, DSU),是一种用于处理不相交集合的合并与查询问题的数据结构。查找(Find):确定一个元素属于哪个集合。合并(Union):将两个不同的集合合并成一个集合。并查集常见的存储方式是使用数组来模拟树结构,利用数组存储每个元素的父节点信息。数组的下标对应元素编号,数组中存储的值代表该元素的父节点编号。通过不断查找元素的父节点,最终找到根节点,以此确定元素所属的集合。
2026-09-26 10:32:37
123
原创 算法——最小生成树
最小生成树这一概念,最初主要是为加权连通无向图量身打造的。不过,在有向图领域,也衍生出了与之类似的拓展性概念。而本课程所涉及的内容,主要围绕加权连通无向图来逐步展开,以此来探讨最小生成树相关知识。对于一个加权连通无向图 G=(V,E),其中V是图的顶点集合,E是图的边集合,每一条边 (u,v)∈E都有一个对应的权重w(u,v)。连通性:这个子图是连通的,也就是说对于图中任意两个顶点,都存在一条路径可以从一个顶点到达另一个顶点。包含所有顶点:子图包含了原图 G中的所有顶点 V。
2026-09-26 10:20:30
848
原创 进阶数据结构图——关键路径(四)
我们把路径上各个活动所持续的时间之和称为路径长度,从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动叫关键活动。
2026-08-30 11:06:06
219
原创 进阶数据结构图——拓扑排序(三)
(Topological Sort)是一种用于有向图(DAG, Directed Acyclic Graph)的排序算法,。拓扑排序常用于解决依赖关系问题,例如任务调度、课程安排、软件包的安装顺序等。
2026-08-30 10:33:00
190
原创 进阶数据结构图——最短路径(二)
在计算机科学和图论领域中,图的最短路径问题是一个非常重要且经典的问题。图是由顶点(节点)和连接这些顶点的边组成的数据结构,在许多实际场景中都有广泛应用,如地图导航、网络路由、社交网络分析等。依据图中边是否具有方向对最短路径进行分类,可将其明确划分为有向图最短路径和无向图最短路径这两类。
2026-08-29 21:32:42
322
原创 进阶数据结构图——最小生成树(一)
最小生成树(Minimum Spanning Tree,简称为 MST)作为图论领域的关键概念,在加权连通图里有着广泛且重要的应用。加权图加权图(Weighted Graph)是一种每条边都被赋予一个权值(Weight)的图。这些权值可以代表距离、成本、时间等实际意义的度量。比如在一个表示城市间道路的图中,边的权值可以表示两个城市之间的距离。连通图连通图(Connected Graph)指的是在无向图中,任意两个顶点之间都存在路径相连。也就是说,从图中的任意一个顶点出发,都能够到达其他任何顶点。联通网。
2026-08-29 21:15:00
578
原创 进阶数据结构树——B树(五)
2 - 3树是一种自平衡的搜索树,属于多路搜索树,它在计算机科学领域有着广泛的应用,尤其在文件系统和数据库系统中用于高效的数据存储和检索。2 - 3 树是一种绝对平衡的树结构,即从根节点到树中任意一个叶子节点的路径长度都是相等的。这意味着树的高度是均匀的,不会出现某些分支过长而导致搜索效率降低的情况。无论数据如何插入或删除,树始终能保持这种平衡状态,从而保证了各种操作的时间复杂度相对稳定。
2026-08-28 21:08:51
552
原创 进阶数据结构树——Trie树(四)
char ch;int freq;ch:用于存储当前节点所代表的字符。例如在构建存储单词的字典树时,这个字符就是单词中的某个字母。freq:表示以从根节点到当前节点所形成的字符串为前缀的单词的出现频率。children:用于添加和查找子节点。当需要插入一个新的字符时,可以在 children 中查找是否已经存在对应的子节点,如果存在则直接使用该子节点;如果不存在则创建一个新的子节点并插入到 children 中。
2026-08-26 21:26:32
157
原创 进阶数据结构树——红黑树(三)
红黑树是一种自平衡的二叉搜索树,,由Rudolf Bayer于1972年发明。它能确保在最坏情况下基本动态集合操作(如插入、删除、查找)的时间复杂度为 O(logn),这里的 n 是树中节点的数量。红黑树在它的每个节点上增加了一个存储位来表示节点的颜色(红色或黑色),通过对任何一条从根到叶子的路径上各个节点着色方式的限制红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。这使得树的高度始终保持在对数级别,从而保证了操作的高效性。// 定义红黑树节点// 定义枚举, 节点颜色。
2026-08-25 21:46:20
233
原创 进阶数据结构树——平衡二叉树(二)
int height;// 记录以当前节点为根的子树的高度,用于计算平衡因子public:AVLTree();~AVLTree();
2026-08-24 21:16:42
176
原创 计算机网络——应用层
一、DHCP 是什么DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 TCP/IP 应用层协议,基于 UDP 67(服务器)/68(客户端) 端口,用来自动给网络设备分配 IP 及相关参数,替代手动配 IP。- 前身:BOOTP- 标准:RFC 2131(IPv4)、RFC 3315(IPv6,DHCPv6)- 典型场景:局域网、家庭路由器、企业内网、Wi‑Fi二、能分配什么参数- IP 地址 + 子网掩码。
2026-04-24 19:57:22
765
原创 计算机网络——数据链路层(二)
VLAN(虚拟局域网)的核心实现机制,是通过交换机的软件配置,将一个物理局域网在逻辑上划分为多个独立的广播域,并依靠 802.1Q 标签协议 实现跨设备的识别与隔离。一、核心原理:逻辑隔离与标签机制1. 广播域隔离- 未划分 VLAN 时,一个物理交换机就是一个大广播域,广播包会发给所有端口。- VLAN 将其切分为多个逻辑广播域。同一 VLAN 内可直接通信;不同 VLAN 二层完全隔离。2. 802.1Q 标签(VLAN Tag)
2026-04-22 20:44:26
568
原创 计算机网络——网络层(三)
移动 IP(Mobile IP) 的核心原理:让移动节点(手机/笔记本)在跨网络漫游时,保持永久IP(家乡地址)不变,通信不中断。一、核心角色与地址- MN (Mobile Node, 移动节点):你的手机、笔记本- HA (Home Agent, 家乡代理):家乡网的路由器,维护你的永久地址(Home Address)- FA (Foreign Agent, 外地代理):外地网的路由器,提供转交地址(CoA)
2026-04-22 17:31:28
625
原创 计算机网络——网络层(二)
本篇文章我们学习了因特网的路由选择,网际控制报文协议ICMP,虚拟专用网VPN和网络地址转换NAT以及IP多播技术,明天我们将会把网络层剩余部分更完,数据链路层笔记剩余部分明天也会更新完毕。
2026-04-21 20:35:09
533
原创 计算机网络——网络层(一)
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将任务划分为分组转发和路由选择两种重要的功能。IPv4地址是给因特网上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。IPv4地址由因特网名字和数字分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)进行分配。由于IPv4地址由32比特构成,不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制。
2026-04-21 20:34:46
544
原创 计算机网络——数据链路层(一)
链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
2026-04-19 18:15:13
521
原创 计算机网络——物理层
物理层(OSI第一层)的核心功能就是为数据传输提供原始的物理通路,只关心比特流(0/1)的传输,不处理数据。本篇文章我们学习了OSI中的第一层——物理层,我们对数据在物理层之间是如何传输的有了一定的了解,如果你喜欢本专栏,请留下一个免费的👍,你的支持就是我最大的动力。
2026-04-19 10:52:29
485
原创 计算机网络——计算机网络和因特网
ISP(Internet Service Provider),即互联网服务提供商:就是给我们提供上网服务的公司/运行商。中国的三大ISP:中国电信、中国联通和中国移动。因特网已发展成为基于ISP的多层次结构的互联网络计算机网络的早期定义:计算机网络是互联的自治的计算机集合。计算机集合指多台独立的计算机,自治指每台计算机自主运行,有自己的操作系统,不依赖其他计算机就能独立工作,互联指计算机之间通过通信链路和交换设备相互连接,实现数据交换和资源共享。
2026-04-18 21:59:58
525
原创 C++常用新特性(十二)——智能指针(二)
std::unique_ptr是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。std::unique_ptr不允许复制,但是可以通过函数返回给其他的std::unique_ptr,还可以通过std::move来转译给其他的std::unique_ptr,这样原始指针的所有权就被转移了,这个原始指针还是被独占的。
2026-03-25 16:59:31
154
原创 C++常用新特性(十一)——转移和完美转发
在C++11添加了右值引用,并且不能使用左值初始化右值引用,如果想要使用左值初始化一个右值引用需要借助std::move()函数,使用std::move方法可以将左值转换为右值。使用这个函数并不能移动任何东西,而是和移动构造函数一样都具有移动语义,将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存拷贝。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);如果不使用std::move,拷贝的代价很大,性能较低。
2026-03-24 21:20:29
354
原创 C++常用新特性(九)——Lambda表达式
声明式的编程风格:就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或函数对象简洁:避免了代码膨胀和功能分散,让开发更加高效在需要的时间和地点实现功能闭包,使程序更加灵活。
2026-03-22 17:22:32
346
原创 C++常用新特性(八)——基于范围的for循环
总结:对应基于范围的for循环来说,冒号后边的表达式只会被执行一次。在得到遍历对象之后会先确定好迭代的范围,基于这个范围直接进行遍历。如果是普通的for循环,在每次迭代的时候都需要判断是否已经到了结束边界。
2026-03-14 20:53:51
376
原创 C++常用新特性(六)——using的使用
在 C++中可以通过 typedef 重定义一个类型,语法格式如下:typedef 旧的类型名 新的类型名;// 使用举例被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。C++11中规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名,即使用using。
2026-03-07 14:04:14
503
原创 C++常用新特性(五)——final和override
final关键用来修饰某个类不能继承,或者某个虚函数不能重写,final关键字写在后边。 使用final修饰虚函数,子类就不能重写父类虚函数。1.2 修饰类 使用final修饰类,则该类不能被继承。二、override override就是重写的意思,override关键字确保在派生类中声明的重写函数与基类的虚函数有相同的签名,同时也明确表明将会重写基类的虚函数,这样就可以保证重写的虚函数的正确性,也提高了代码的可读性,和final一样这个关键字
2026-03-07 13:23:43
55
原创 C++常用新特性(四)——自动类型推导
这里对文章进行总结:本篇文章我们讲解了自动类型推导,我们学习了auto,decltype关键字以及返回值类型后置,使用自动类型推导能让我们的代码变得简洁。
2026-03-06 21:30:17
694
原创 C++常用新特性(二)——nullptr
这篇文章我们学习了nullptr。在 C++11 标准下,相比 NULL 和 0,使用 nullptr 初始化空指针可以令我们编写的程序更加健壮。
2026-03-04 21:55:18
72
原创 数据结构——散列表
我们可以通过查找关键字不需要比较就可以获得需要记录的存储位置,这就是一种新的存储技术——散列技术。散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。这里我们把这种对应关系f称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或者哈希表散列技术既是一种存储方法,也是一种查找方法。它最适合的求解问题是查找与给定值相等的记录。
2026-03-01 18:21:24
920
原创 数据结构——图(三)
前两篇文章我们已经学习了图的存储和图的遍历,今天我们来学习图的应用。五、最小生成树以上就是今天要讲的内容,本文仅仅简单介绍了图的两个应用,而图提供了大量能使我们快速便捷地处理数据的方法。
2026-02-14 18:52:36
1307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1