- 博客(48)
- 收藏
- 关注
原创 【C++】AVL 树平衡二叉搜索的神奇结构,代码实现全解析,从概念到应用,助你轻松掌握这一高效数据结构,编程能力更上一层楼!
AVL树是最先发明的⾃平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的 左右⼦树都是AV树,且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树, 通过控制⾼度差去控制平衡。
2025-02-09 20:15:13
2294
103
原创 【C++】map 和 set 在高并发环境下的性能优化秘籍,深入探讨如何利用多线程编程、锁机制优化以及数据预分配等高级技术手段,有效避免数据冲突,提高并发处理能力,实现性能的质的飞跃的专业解决
set的声明如下,T就是set底层关键字的类型set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是O(logN) ,迭代器遍历是⾛的搜索树的中序,所以是有序 的。
2025-02-01 00:55:52
2199
114
原创 【机器学习】深入无监督学习分裂型层次聚类的原理、算法结构与数学基础全方位解读,深度揭示其如何在数据空间中构建层次化聚类结构
这个代码展示了如何通过K-means聚类方法实现分裂型层次聚类。每次分裂都是基于当前簇的质心,通过最小化误差平方和(SSE)来划分成两个子簇。你可以通过调整参数来控制分裂的停止条件,进而决定最终聚类的数量。
2025-01-22 19:23:39
2151
104
原创 一文厘清 Linux 文件管理指令!从创建、查看,到移动、删除,如 touch、cat、mv、rm 等指令的深度剖析。
🌟🌟Linux 是一种广泛使用的操作系统内核。
2025-01-17 16:28:02
2201
81
原创 【机器学习】无监督学习携凝聚型层次聚类登场。无需预设标签,仅凭数据内在特质,逐步归拢聚合,挖掘隐藏群组,为复杂数据剖析开启智能、高效的新思路。
层次聚类是一种通过递归合并(凝聚型)或递归分裂(分裂型)数据点的方式,逐步构建出一个层次结构的聚类方法。层次聚类的结果通常通过**树状图(Dendrogram)**表示,它可以直观地显示数据点之间的相似性或距离关系。凝聚型层次聚类(Agglomerative Clustering):从每个数据点视为一个独立簇开始,通过逐步合并最相似的簇,直到最终所有数据点合并为一个簇。分裂型层次聚类(Divisive Clustering):从一个包含所有数据点的簇开始,通过逐步分裂簇,直到每个数据点成为一个独立的簇。
2025-01-13 16:42:31
1656
72
原创 【机器学习】无监督学习麾下 K-means 聚类如何智能划分,解锁隐藏结构,为市场细分、图像分割、基因聚类精准导航
聚类是一种无监督学习任务,其目的是将数据集中的样本分成若干个类别,使得每个类别内部的样本尽可能相似,而不同类别之间的样本差异尽可能大。聚类方法一般不依赖于数据的标签信息,而是通过计算样本间的相似性来实现数据的分组。常见的聚类算法有:K-means聚类、DBSCAN聚类、层次聚类、高斯混合模型(GMM)和K-medoids聚类等。
2025-01-09 21:43:37
2625
92
原创 探秘 C++ list:在复杂数据管理的编程世界里,它宛如灵动的魔法链条,高效实现元素频繁增删,有序维系数据秩序,无论是海量动态数据缓存、游戏角色属性集处理,还是复杂任务调度编排
list底层就是一个双向循环链表。forward_list底层是单链表,用法都差不多一样。下面我们可以看到,返回了最后的那个位置的元素。删除尾部的数据,可以看到把7删除了。
2025-01-01 20:00:15
3959
116
原创 【C++】 世界里的 “秩序双雄”:stack 和 queue !把 stack 想象成时光回溯胶囊,新记忆后入先取;queue 仿若忙碌流水线,任务依次稳步推进。
1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供 一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少 支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用。
2024-12-26 19:02:29
2196
104
原创 【机器学习】突出强化学习中智能体通过与环境交互不断成长,其决策能力逐步进化提升,展现强化学习核心特点与动态过程。
但随着技术的不断发展,新的算法改进和创新不断涌现,如基于模型的强化学习、分层强化学习等,有望进一步克服这些挑战,推动强化学习在更多领域的深入应用,为人工智能的发展带来更多的可能性。目标网络则是创建一个与主网络结构相同的网络,用于计算目标 Q 值,定期将主网络的参数复制到目标网络,以减少目标 Q 值的波动,提高训练的稳定性。强化学习在众多领域都有着广泛的应用前景。综上所述,强化学习作为机器学习领域的一颗璀璨明珠,通过不断的算法创新和实践应用,正逐渐改变着我们的世界,未来也必将在更多未知的领域绽放光彩。
2024-12-21 00:40:42
1992
135
原创 【探索 C++ Vector】数据存储利器,动态扩容随心控。高效管理数据序列,从简单元素排列到复杂结构构建皆能胜任。助力开发者轻松应对多变数据需求,开启便捷高效的 C++ 数据处理新征程。
使用STL的三个境界:能用,明理,能扩展,那么下面学习vector,我们也是按照这个方法去学习。vector学习时一定要学会查看文档:vector的文档介绍,vector在实际中非常的重要,在实际中 我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的。(constructor)构造函数声明接口说明vector()(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器进行初始化构 造。
2024-12-15 21:13:17
1084
121
原创 【汇编指令1】解锁计算机底层操作的核心密码,从基础指令开启编程智慧之门,洞察数据处理与程序流程掌控奥秘,以简洁代码诠释高效运算逻辑,于数字世界构建强大功能基石,引领深入理解计算机运行机制新征程
寄存器是中央处理器(CPU)内的组成部分,它是有限存储容量的高速存储单元,用来暂存指令、数据和地址。
2024-12-04 17:57:22
1056
118
原创 C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例
二叉搜索树(Binary Search Tree,BST)是一种常用的数据结构,它是一棵二叉树,其中每个节点的值大于其左子节点的值,并且小于其右子节点的值。
2024-11-26 22:26:25
3167
128
原创 【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
深度学习是机器学习的一个子领域,专注于使用多层神经网络(深度神经网络)来解决复杂任务。深度学习模型通常包含多个隐藏层,这使得模型能够学习到更复杂和抽象的特征表示。人工神经网络是受生物神经系统启发的计算模型。它由一系列称为“神经元”的节点组成,这些节点通过连接(称为“权重”)相互连接。人工神经网络通过调整这些权重来学习输入数据的模式。卷积神经网络(CNN)是一种特殊的神经网络,主要用于处理具有网格状拓扑结构的数据,如图像。
2024-11-22 13:05:29
1667
144
原创 深入解析【C++多态】:探索面向对象编程中的动态绑定与行为多样性和多态的核心概念与应用实践
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。
2024-11-19 19:38:01
1505
139
原创 【机器学习监督学习】:从原理到实践,探索算法奥秘,揭示数据标注、模型训练与预测的全过程,助力人工智能技术应用与发展
本文详细介绍了五种经典的监督学习算法:线性回归、逻辑回归、支持向量机、决策树和随机森林。线性回归适用于回归问题,模型简单且易于解释。逻辑回归适用于二分类问题,模型简单且易于解释。支持向量机在处理高维数据和非线性可分问题时表现出色。决策树易于理解和解释,但容易过拟合。随机森林通过集成多个决策树,提高了模型的准确性和鲁棒性。通过理解这些算法的基本概念、数学原理和实现方法,可以更好地应用机器学习技术解决实际问题。
2024-11-17 14:13:09
9410
135
原创 深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅
继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有 类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承 呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的 复⽤,继承是类设计层次的复⽤。
2024-11-13 13:55:34
1473
177
原创 C++【string类,模拟实现string类】
就像一个家庭中有两个孩子,但父母只买了一份玩具,两个孩子愿意一块玩,则万事大吉,万一 不想分享就你争我夺,玩具损坏。可以采用深拷贝解决浅拷贝问题,即:每个对象都有一份独立的资源,不要和其他对象共享。父 母给每个孩子都买一份玩具,各自玩各自的就不会有问题了。
2024-11-05 19:39:06
3343
206
原创 C++类和对象(上)
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-09-06 19:36:31
2297
340
原创 C++基础入门
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2024-09-01 00:35:24
9560
359
原创 数据结构【链试结构二叉树】
设⼆叉树的根结点所在层数 为1,层序遍历就是从所在⼆叉树的根结点出发,⾸先访问第⼀层的树根结点,然后从左到右访问第2 层上的结点,接着是第三层的结点,以此类推,⾃上⽽下,⾃左⾄右逐层访问树的结点的过程就是层 序遍历。根结点的左⼦树和右⼦树分别⼜是由⼦树结点、⼦树结点的左⼦树、⼦树结点的右⼦树组成的,因此 ⼆叉树定义是递归式的,后序链式⼆叉树的操作中基本都是按照该概念实现的。回顾⼆叉树的概念,⼆叉树分为空树和⾮空⼆叉树,⾮空⼆叉树由根结点、根结点的左⼦树、根结点 的右⼦树组成的。根结点、左⼦树、右⼦树。
2024-08-24 17:02:19
2769
280
原创 数据结构【栈和队列】
栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。概念:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先 出FIFO(First In First Out)把队头给tab,让tab循环销毁单链表,add保存头节点的下一个节点,释放头节点,把add给tab,不等于说明有链表里有空间,把头节点的下一个节点给tab,释放头节点,再把tab给头节点。出队列,我们要用布尔类型,判断链表是不是空,是空不能出队列,报错。布尔判断队头是不是等于空,是返回真,不是返回假。
2024-08-14 13:05:04
2616
265
原创 OJ题目【栈和队列】
思路:把左括号放到栈里,取出来栈顶和右括号匹配,匹配上了就出栈,然后在取出栈顶和下一个右括号匹配,一直匹配下去,出栈的话把Q1的size-1的数据1和2插入Q2的队列,我们就可以把3出栈了。第一步:判断队列是不是空,是空直接返回false。入栈,为不为空的队列,入数据到队列。解决只有一个左括号的情况。入栈不为空的队列Q1。
2024-08-11 19:48:41
1940
183
原创 数据结构【有头双向链表】
注意:这⾥的“带头”跟前⾯我们说的“头结点”是两个概念,实际前⾯的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头结点。带头链表⾥的头结点,实际为“哨兵位”,哨兵位结点不存储任何有效元素,只是站在这⾥“放哨 的”。
2024-07-30 00:49:43
1491
113
原创 数据结构【没头单链表】
图中指针变量plist保存的是第⼀个结点的地址,我们称plist此时“指向”第⼀个结点,如果我们希望 plist“指向”第⼆个结点时,只需要修改plist保存的内容为0x0012FFA0。链表中每个结点都是独⽴申请的(即需要插⼊数据时才去申请⼀块结点的空间),我们需要通过指针 变量来保存下⼀个结点位置才能从当前结点找到下⼀个结点。当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数 据,也需要保存下⼀个节点的地址(当下⼀个节点为空时保存的地址为空)。
2024-07-22 21:35:29
2513
139
原创 编译和链接
前⾯我们⾮常简洁的讲解了⼀个C的程序是如何编译和链接,到最终⽣成可执⾏程序的过程,其实很多内部的细节⽆法展开讲解。⽐如:⽬标⽂件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序的⾃我修养》⼀书来详细了解。变量的地址,所以暂时把调⽤ Add 的指令的⽬标地址和 g_val 的地址搁置。这个过程是递归进⾏的,也就是说被包含的头⽂件也可能包含其他⽂件。Add 的指令重新修正,让他们的⽬标地址为真正的 Add 函数的地址,对于全局变量 g_val 也是类。
2024-06-22 22:35:10
1651
138
原创 C语言:文件操作
磁盘上的⽂件和文件夹都是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。
2024-06-17 22:48:20
2028
90
原创 C语言:(动态内存管理)
3.包含柔性数组成员的结构⽤malloc ()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤⼩,以适应柔性数组的预期⼤⼩。调整柔性数组srr的空间,把arr的80个字节调整为160字节,然后判断是不是空,是就把p的地址给str。1.函数的功能是为 num 个⼤⼩为 size 的元素开辟⼀块空间,并且把空间的每个字节初始化为0。情况2:当是情况2 的时候,原有空间之后没有⾜够多的空间时,扩展的⽅法是:在堆空间上另找⼀个合适⼤⼩。候内存,我们⼀定会对内存的⼤⼩做灵活的调整。程序结束后由系统释放。
2024-06-03 21:29:21
2657
108
原创 C语言:深入了解(联合体和枚举)
联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合。⽐如,我们要搞⼀个活动,要上线⼀个礼品兑换单,礼品兑换单中有三种商品:图书、杯⼦、衬衫。上述的结构其实设计的很简单,⽤起来也⽅便,但是结构的设计中包含了所有礼品的各种属性,这样。当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举?下面这代码,当我们要描述一个杯⼦的时候,只用到。
2024-06-01 11:32:59
1845
66
原创 C语言:结构体(详细讲解)
位段的声明和结构是类似的,有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。int _b : 5;int main()
2024-05-30 09:43:19
1402
66
原创 C语言:数据在内存中的存储
的⼆进制形式为0.1,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其。⼩端模式,刚好相反。这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还。具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤。对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M?对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。
2024-05-27 19:48:06
1608
31
原创 C语言:字符函数和字符串函数
在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。
2024-05-22 22:05:45
1332
32
原创 C语言:指针4(超级详细讲解qsort函数使用)
为什么不用int指针类型的呢,因为如果用int的话,加1跳过4个字节,我们交换char类型的时候,char是1个字节,如果我们用int就会跳4个字节,所以我们要用char指针类型的。比较这2个数值的时候,(第1个值比第2个值大就返回大于0的数字(1))(第1个值比第2个小就返回小于0的数字(-1))(第 1个值等于第2个值返回0)比较这2个数值的时候,(第1个值比第2个值大就返回大于0的数字(1))(第1个值比第2个小就返回小于0的数字(-1))(第1个值等于第2个值返回0)时,被调⽤的函数就是回调函数。
2024-05-17 19:41:40
1157
29
原创 C语言:指针3(超级详细讲解)
目录编辑字符指针变量来自剑指offer笔试题数组指针⼆维数组传参的本质函数指针函数指针创建函数指针的使用两段有趣的代码typedef关键字但是对于数组指针和函数指针稍微有些区别函数指针数组转移表。
2024-05-16 13:43:35
1332
25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人