- 博客(57)
- 收藏
- 关注
原创 [leetcode算法·回溯]回溯算法秒杀所有排列/组合/子集问题
本文参考labuladong算法笔记[无论是排列、组合还是子集问题,简单说无非就是让你从序列numsnums。以组合为例,如果输入,和为 7 的组合应该只有[7]。nums。以组合为例,如果输入,和为 7 的组合应该有两种[2,2,2,1]和[5,2]。nums。以组合为例,如果输入,和为 7 的组合应该有两种[2,2,3]和[7]。当然,也可以说有第四种形式,即元素可重可复选。但既然元素可复选,那又何必存在重复元素呢?元素去重之后就等同于形式三,所以这种情况不用考虑。
2025-02-09 23:54:03
969
原创 [leetcode·回溯算法]回溯算法解题套路框架
回溯算法本质上就是遍历一颗多叉树:1、确定递归终止条件2、执行单层操作逻辑3、确定下一层递归所需的操作列表4、注意剪枝和代码优化。
2025-02-04 17:32:59
746
原创 【leetcode练习·二叉树拓展】归并排序详解及应用
本文参考labuladong算法笔记[“归并排序就是二叉树的后序遍历”——labuladong就说归并排序吧,如果给你看代码,让你脑补一下归并排序的过程,你脑子里会出现什么场景?这是一个数组排序算法,所以你脑补一个数组的 GIF,在那一个个交换元素?如果是这样的话,那格局就低了。但如果你脑海中浮现出的是一棵二叉树,甚至浮现出二叉树后序遍历的场景,那格局就高了,大概率掌握了我经常强调的,用这种抽象能力学习算法就省劲多了。那么,归并排序明明就是一个数组算法,和二叉树有什么关系?接下来我就具体讲讲。
2025-02-03 21:26:29
1032
原创 【leetcode练习·二叉树】计算完全二叉树的节点数
综上,算法的递归深度就是树的高度 O(logN)O(logN),每次递归所花费的时间就是 while 循环,需要 O(logN)O(logN),所以总体的时间复杂度是 O(logN×logN)O(logN×logN)。这个算法的时间复杂度应该是 O(logN∗logN)O(logN∗logN),如果你心中的算法没有达到这么高效,那么本文就是给你写的。算法的时间复杂度是多少?开头说了,这个算法的时间复杂度是 O(logN×logN)O(logN×logN),这是怎么算出来的呢?
2025-01-31 16:44:43
329
原创 【leetcode强化练习·二叉树】同时运用两种思维解题
二叉树遍历的思路就像一个指针在整个树上游走,每到一个节点处理一次。这其中又涉及到前序/中序/后序不同问题场景的处理,应视情况灵活选用遍历方法。二叉树分解问题1、先明确递归终止条件/返回值2、做单层/单个节点的处理(遇到符合条件的场景返回对应结果)3、做子问题(子树)的递归处理。
2025-01-31 16:09:10
1156
原创 week08_文本匹配任务
给定一组文本,判断其是否语义相似今天天气不错 match 今儿个天不错呀 √今天天气不错 match 你的代码有bug ×以分值形式给出相似度今天天气不错 match 今儿个天不错呀 0.9今天天气不错 match 这几天天气不错 0.7今天天气不错 match 你的代码有bug 0.11、给定一组文本,计算某种自定义的两句话判断是否有关联、矛盾、中立明天要下雨 vs 明天大晴天。
2025-01-28 16:42:57
946
原创 week07_文本分类实践_pipeline
整个项目结构清晰,各个模块分工明确,通过数据加载、模型构建、训练和评估等步骤,实现了基于不同模型架构的文本分类任务,并提供了超参数调整和模型对比的功能,有助于找到最优的模型配置和性能表现。这是一个基于 PyTorch 的文本分类项目,主要实现了对新闻文本的分类任务,包括数据加载、模型构建、训练和评估等功能。
2025-01-17 00:42:58
907
原创 week06_预训练语言模型—BERT
有了预训练就相当于模型在培养大学生做任务,不然模型初始化再做任务就像培养小学生当前数据层面的瓶颈是能用于预训练的语料快被用完了现在有一个重要方向是让机器自己来生成数据并做微调。
2025-01-07 17:33:46
1914
原创 week06_Transformer架构浅析
2017年谷歌提出了这篇论文,介绍了深度学习的关键架构Transformer,其提出的核心概念颠覆了传统的RNN和CNN模型对于序列问题的处理方式。避免了循环神经网络中的顺序计算问题,能够,大大提高了训练效率。每个注意力头计算输入序列中每个位置与其他位置的关联得分,然后根据这些得分对输入进行加权求和线性变换dk是K的维度,用于缩放点积,以避免梯度消失或爆炸计算注意力得分拼接可以更全面地捕捉输入序列中的各种复杂关系Transformer 没有像那样的内在,所以需要来为模型提供序列中单词的。
2025-01-06 17:37:54
644
原创 Chapter2 文本规范化
在NLP任务中,第一步往往要做,其作用是将字符串表示成更易于计算机处理的规范形式。一般包括三个步骤:1.分词 2.词规范化 3.分句将一段。词元不一定等于词,可以是字符、子词和词等。
2025-01-03 18:18:50
789
原创 week05_nlp大模型训练·词向量&文本向量
一、根据词与词之间关系的某种假设,制定训练目标二、设计模型,以词向量为输入三、随机初始化词向量,开始训练四、训练过程中词向量作为参数不断调整,获取一定的语义信息五、使用训练好的词向量做下游任务1.质变:将离散的字符转化为连续的数值2.通过向量的相似度代表语义的相似度3.词向量的训练基于很多不完全正确的假设,但是据此训练的词向量是有意义的4.使用无标注的文本的一种好方法1)词向量是“静态”的。每个词使用固定向量,没有考虑前后文2)一词多义的情况。西瓜 - 苹果 - 华为。
2025-01-01 23:13:31
1012
原创 nlp新词发现——浅析 TF·IDF
1、通过计算TFIDF值得到每个文本的关键词2、将包含关键词多的句子,认为是关键句。3、挑选若干关键句,作为文本的摘要。import osimport re"""基于tfidf实现简单文本摘要"""#加载文档数据(可以想象成网页数据),计算每个网页的tfidf字典#计算每一篇文章的摘要#输入该文章的tf_idf词典,和文章内容#top为人为定义的选取的句子数量#过滤掉一些正文太短的文章,因为正文太短在做摘要意义不大#过滤掉正文在五句以内的文章。
2024-12-24 17:21:04
1092
原创 NLP 分词技术浅析
自然语言处理(NLP)中的分词技术是将连续的文本序列按照一定的规则切分成有意义的词语的过程。例如,将句子 “我爱自然语言处理” 切分为 “我”、“爱”、“自然语言处理” 或者 “我”、“爱”、“自然”、“语言”、“处理” 等不同的词语组合。
2024-12-18 17:17:20
889
原创 w03_nlp大模型训练·处理字符串
TorchModel#当输入真实标签,返回loss值;无真实标签,返回预测值else:return y_p__init__方法:创建一个嵌入层,将输入的字符索引映射到vector_dim维的向量空间,len(vocab)表示词汇表的大小,该层将离散的字符转换为连续的向量表示,有助于模型学习语义信息。:定义一个循环神经网络(RNN)层,输入和输出维度都是vector_dim表示输入数据的第一个维度是批次大小,这样输入形状为。:创建一个线性层,将 RNN 的输出映射到个类别,因为要对字符a。
2024-12-11 16:03:10
748
原创 优化器和激活函数有何区别?
激活函数对这个线性组合的值进行非线性变换,从而增加神经网络的非线性表达能力。如果没有激活函数,多层神经网络就等价于一个线性回归模型。每次随机选取一个样本计算梯度并更新参数。更新神经网络模型参数的工具。优点是计算简单、内存占用少。无法处理复杂的非线性问题。是否能够找到全局最优解。
2024-12-02 12:19:05
642
原创 前馈神经网络和反馈神经网络的区别是什么?
信息在网络中是单向流动的反馈连接神经元的输出不仅可以传递到下一层,还可以反馈到自身或者前面的层这种反馈连接使得网络具有动态性和记忆性。动态信号传播信号在网络中循环传播,由于存在反馈连接,网络的输出会不断地根据自身的反馈进行调整对于反馈神经网络,信号可能会在网络中无限循环,因此需要考虑网络的分类回归。
2024-11-27 12:24:54
971
原创 常见的神经网络模型有哪些?
多层感知机(Multilayer Perceptron,MLP) 结构特点:它是一种最基本的前馈神经网络,由输入层、一个或多个隐藏层和输出层组成。每层的神经元与下一层的神经元全连接,即每个神经元的输出都连接到下一层的所有神经元的输入。例如,一个简单的三层 MLP,输入层有个神经元,接收输入数据;中间有一个隐藏层,假设包含个神经元;输出层有个神经元,用于输出最终结果。 应用场景:广泛应用于分类和回归任务。在分类任务中,比如将手写数字(0 - 9)进行分类,输入层接收手写数字图像的像素值,经过隐藏层的特征
2024-11-27 12:17:17
465
原创 【leetcode练习·二叉树】用「分解问题」思维解题 II
本文参考labuladong算法笔记[类似于的问题,一般也可以用分解问题的思路,无非就是把整棵树的问题(原问题)(子问题)。
2024-11-13 00:04:19
689
原创 【leetcode练习·二叉树】用「分解问题」思维解题 I
本文参考labuladong算法笔记[【强化练习】用「分解问题」思维解题 I | labuladong 的算法笔记]给定两个整数数组 和 ,其中 是二叉树的先序遍历, 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例 2:输入: preorder = [-1], inorder = [-1]输出: [-1]
2024-11-09 14:35:08
997
1
原创 【leetcode练习·二叉树】用「遍历」思维解题 II
本文参考labuladongsuanfa笔记[如果让你在二叉树中的某些节点上做文章,一般来说也可以直接用遍历的思维模式。
2024-10-12 00:56:31
1116
原创 【算法思想·二叉搜索树】后序篇
本文是承接东哥带你刷二叉树(纲领篇)的第五篇文章,主要讲二叉树后序位置的妙用,复述下前文关于后序遍历的描述:前序位置的代码只能从函数参数中获取父节点传递来的数据,而后序位置的代码不仅可以获取参数数据,还可以获取到子树通过函数返回值传递回来的数据。那么换句话说,一旦你发现题目和子树有关,那大概率要给函数设置合理的定义和返回值,在后序位置写代码了。其实二叉树的题目真的不难,无非就是前中后序遍历框架来回倒嘛,只要你把一个节点该做的事情安排好,剩下的抛给递归框架即可。
2024-09-18 13:26:37
887
原创 【算法思想·搜索二叉树】构造篇
1、概述本文参考labuladong算法笔记[1、概述之前写了两篇手把手刷 BST 算法题的文章,讲了中序遍历对 BST 的重要意义,写了 BST 的基本操作。本文就来写手把手刷 BST 系列的第三篇,循序渐进地讲两道题,如何计算所有有效 BST。
2024-09-18 00:09:29
815
原创 【算法思想·二叉搜索树】基操篇
我们前文东哥带你刷二叉搜索树(特性篇)介绍了 BST 的基本特性,还利用二叉搜索树「中序遍历有序」的特性来解决了几道题目,本文来实现 BST 的基础操作:判断 BST 的合法性、增、删、查。其中「删」和「判断合法性」略微复杂。BST 的基础操作主要依赖「左小右大」的特性,可以在二叉树中做类似二分搜索的操作,寻找一个元素的效率很高。# 找到目标,做点什么这个代码框架其实和二叉树的遍历框架差不多,无非就是利用了 BST 左小右大的特性而已。接下来看下 BST 这种结构的基础操作是如何实现的。
2024-09-17 22:11:08
802
原创 【算法思想·二叉搜索树】特性篇
所谓BST的特性,关键就是:1、BST本身特性,左孩子值 < 父节点值 < 右孩子值。2、基于1,BST中序遍历(左中右)结果是升序排列节点值,反向中序遍历(右中左)则是降序排列。
2024-09-11 23:49:08
874
原创 【算法思想·二叉树】序列化
1、前序遍历和后序遍历的serialize函数 就是个前序写法和后序写法的区别,而 二者的 deserialize函数 本质上都为前序写法。核心区别在于 :前者压缩时是“中左右”的顺序,故解压缩中从前向后遍历时,先构造root.left再构造root.right。后者压缩时顺序是“左右中”,故解压缩中从后向前遍历时,先构造root.right,再构造root.left。2、层序遍历:①经典的while + for框架中,while 遍历root的所有层,for遍历root某一层的所有节点。
2024-09-10 01:05:50
925
原创 【算法思想·二叉树】后序篇
1、需要比较每一颗子树,要如何遍历?——后序遍历。2、如何比较每一颗子树的结构和值?——序列化的方式。3、遇到多个重复子树怎么办?——用字典来存放每个子树出现的次数。4、重视函数签名——参数是什么?返回值又是什么?
2024-09-09 15:49:20
941
原创 【算法思想·二叉树】思路篇
二叉树解题的思维模式分两类:1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个traverse函数配合外部变量来实现,这叫「遍历」的思维模式。2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。
2024-09-03 19:22:48
844
原创 【算法思想·数组】一道数组去重经典算法题
本文参考labuladong算法笔记[本文讲的问题应该是去重相关算法中难度最大的了,把这个问题搞懂,就再也不用怕数组去重问题了。
2024-08-31 00:49:13
764
原创 【算法思想·数组】一个方法团灭nSum问题
经常刷力扣的朋友肯定知道鼎鼎有名的twoSum问题,不过除了twoSum问题,力扣上面还有3Sum4Sum问题,以后如果想出个5Sum6Sum也不是不可以。总结来说,这类nSum问题就是给你输入一个数组nums和一个目标和target,让你从nums选择n个数,使得这些数字之和为target。那么,对于这种问题有没有什么好办法用套路解决呢?本文就由浅入深,层层推进,用一个函数来解决所有nSum类型的问题。
2024-08-31 00:13:00
2248
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人