自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

浮生的博客

但行好事,莫问前程

  • 博客(116)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 [leetcode] - 不定长滑动窗口

不定长滑动窗口总体可以分为三大类:1.求满足小于k的最长子数组/子串2.求满足至少k的最短子数组/子串3.求子数组/子串个数其中第三类又可以分为三小类:1>满足小于k的子数组/子串的个数2>满足至少k的子数组/子串的个数3>恰好等于k的子数组/子串的个数。

2025-08-24 16:32:40 318

原创 [leetcode] 位运算

位运算这类题目奇思妙招很多,优化方法更是非常考验经验积累。

2025-08-03 15:31:35 1056

原创 [leetcode] 图论算法(DFS和BFS)

Medium][Simple][Medium][Medium][Medium][Medium][Medium][Medium][Medium][Medium][Medium][Medium]连通块相关的题目主要是三个步骤:1>建图;2>创建访问标记变量;3>dfs。访问标记变量有两种方法,一种是创建数组,另一种是创建集合,两种都可以看个人喜好。dfs中的步骤基本也是固定的,先标记访问当前节点,然后遍历当前节点的下游连通节点,如果下游连通节点还没访问过,就递归dfs。

2025-07-27 14:21:11 952

原创 [leetcode] 栈 - 表达式解析

那首先就需要把费数字的字符前后加空格,方便后续split,因为replace()方法是O(n)复杂度,所有总体增加的时间复杂度还算好。本题只含有加、减、乘和除。对于当前数字,如果后面是乘除,那么要优先计算后面的表达式,所以前面的加减需要暂时保留,等到第二轮遍历的时候处理。总结起来,计算器系列题目解题步骤就是,先分割,然后找计算发起点,考虑能否一轮遍历搞定,不方便一轮搞定的,第二轮再计算出最终结果。本题另外一个注意点,就是"-(2 + 3)" 这种表达式也是有效的,所以需要在前面加个0,方便统一格式计算。

2025-07-20 10:46:24 356

原创 [python] 堆

在Python中,堆(Heap)的实现主要通过标准库中的。

2025-06-15 23:28:09 374

原创 [leetcode] 二分算法

本文介绍算法题中常见的二分算法。二分算法的模板框架并不复杂,但是初始左右边界的取值以及左右边界如何向中间移动,往往让我们头疼。本文根据博主自己的刷题经验,总结出四类题型,熟记这四套模板,可以应付大部分二分算法题。简言之,这四类题型分别是:1.手动实现lower_bound/upper_bound,python中是bisect_left/bisect_right;2.二分答案;3.山脉数组;4.旋转数组。

2025-06-02 22:40:26 891

原创 [python] 最大公约数 和 最小公倍数

在Python中,计算最大公约数(GCD)和最小公倍数(LCM)的库函数主要来自。

2025-05-30 18:40:05 664

原创 [python] str

是Python字符串的内置方法,用于将字符串中的所有大写字母转换为小写字母。它不会修改原始字符串,而是返回一个新的字符串。Python的字符串。

2025-05-06 22:10:42 277

原创 [machine learning] Transformer - Attention (四)

而在MultiHeadAttentionWrapper中,每个attention head都有一套Wq, Wk, Wv,都要重复进行矩阵乘法,而矩阵乘法是最耗资源的操作之一。第二种方法计算attention score时,每个单词向量被分割成了num_heads份,每个子份计算自己的attention score,即。可以看到,输出结果的最后一个维度是4,而上一篇文章最后一个维度的输出是2,这是因为2个single-head attention的结果叠加(权重矩阵,这不仅增加了参数量而且增加了计算量。

2025-05-05 14:15:22 606

原创 [machine learning] Transformer - Attention (三)

上面的这个例子是做完Softmax之后再加mask,这打破了Softmax创建的概率分布,因此需要重新归一化使得每一行的和重新为1。跟标准的self-attention考虑输入序列的全部单词不同,causal attention只允许考虑当前单词之前的单词(即屏蔽当前单词未来的单词)。方法,这个方法不是必须的,但是使用它的好处是:buffers会自动移到模型使用的device上(CPU或GPU),这样我们就不必手动去确保和模型的device一致,避免了device不一致的错误。是用来防止模型过拟合,

2025-05-05 10:41:35 807

原创 [machine learning] Transformer - Attention (二)

本文介绍带训练参数的self-attention,即在transformer中使用的self-attention。首先引入三个可训练的参数矩阵WqWkWv,这三个矩阵用来将词向量投射(project)到querykeyvalue三个向量上。d_in是输入维度,d_out是输出维度,在transformer模型中d_in和d_out通常是相同的,但是为了更好地理解其中的计算过程,这里我们选择不同的d_in=3和d_out=2。这里为了介绍方便,我们设置, 如果是训练的话,我们要设置。

2025-05-03 10:59:47 608

原创 [machine learning] Transformer - Attention (一)

以机器翻译为例,当输入文本序列一个一个进入encoder时,encoder也在一步一步地更新它的hidden state(即隐藏层的值)。同样,decoder也是一步一步地更新它的hidden state,每一次更新后的hidden state都包含了预测下一个字的必要上下文信息。Transformer的提出解决了RNN的缺陷并逐渐取代了RNN在NLP领域的位置。self-attention是这样一套机制,当计算一个序列的表示时,它允许序列中每个位置上的元素去关注序列中其他位置(包括它本身)的元素。

2025-05-02 10:11:15 956

原创 [python] set

确定元素存在 → 用remove()。不确定元素是否存在 → 用discard()。需要随机删除 → 用pop()。

2025-04-21 23:27:20 481

原创 [python] reduce

reduce是 Python 中的一个高阶函数,用于对可迭代对象(如列表、元组等)中的元素进行累积计算,最终返回一个单一的结果。它位于functools核心功能与语法reduce的语法如下: pythonfunctioniterable。

2025-04-12 23:33:24 934

原创 [python] 作用域

规则(Local->Enclosing->Global->Built-in)。代码块中创建的变量离开这个代码块后就会被析构,也即。这和C++中不同,C++中在。中创建的变量实际都是函数的局部变量,而不是。因此,Python中在。Python中查找变量的顺序遵循。等代码块不会创建新的作用域,只有。

2025-04-11 17:30:01 224

原创 [python] 垃圾回收机制

是二叉树的深度,但其实空间复杂度是O(1)。因为每层遍历时,dummy和nxt会被重新创建指向新创建的ListNode变量,那上一层创建的临时ListNode变量就不再被引用,成为内存中的垃圾对象,从而被垃圾回收器(GC)自动回收,释放内存。进行垃圾回收,当一个对象的引用计数降为0时,它就会被回收。这段代码类似于二叉树的层序遍历,每一层都创建了一个。删除的是对象的最后一个引用时,对象才会被回收。只是减少引用计数,不直接销毁对象。初看这段代码的空间复杂度是。

2025-04-11 17:09:05 204

原创 [machine learning] Huggingface下载repo中的某个子文件夹内容

首先,要配置access token,不然下载的时候会认证失败。上面的例子就是只下载Gigaspeech dataset中的。的方法,但是没有提供下载repo中某个子文件夹内容的方法。是指定repo的类型,如果是dataset,必须要指定。是要下载的huggingface repo名字,Hugginface提供了下载。生成之后把token复制下来。指定需要下载的目录文件,注意。就是用来匹配文件的前缀路径。

2025-04-07 18:01:44 491

原创 [python] 正则表达式

【代码】[python] 正则表达式。

2025-04-02 23:26:05 339

原创 [python] next

参照leetcode 2196. 根据描述创建二叉树 理解python中的next。next 的作用是 从生成器表达式中提取第一个满足条件的根节点。

2025-04-01 22:00:36 213

转载 [python] __init__的使用

在 Python 中,模块(module)就是一个 Python 文件,里面包含了 Python 代码,通常用于被其他 Python 文件导入和使用。换句话说,每个.py文件都可以算是一个模块。比如,假设我们有两个模块:•(处理字符串的工具)•(处理数学计算的工具)如果我们的项目里还有一个main.py文件,我们可以在main.py这样,我们就可以在main.py里直接调用和add()方法,而不用把所有代码都写在main.py里。这样做的好处是:•代码更清晰:不同功能的代码分开存放,逻辑更清楚。

2025-04-01 17:42:20 503

原创 [machine learning] Triton Server & TensorRT

Triton是一个高性能的推理软件框架,它既支持GPU推理,又支持CPU推理,既能部署在server上,也能部署在端侧设备上。Triton的整个架构如下图所示:client通过HTTP/REST或GRPC请求把输入量发送给Triton server,Triton server收到请求后调用对应的backend进行推理,然后把推理结果返回给client。

2025-03-21 16:00:48 1028

原创 [machine learning] DP(Data Parallel) vs DDP(Distributed Data Parallel)

DP和DDP是并行训练的两种方法,本文简单介绍它们两者的区别。

2025-03-10 14:47:37 1298

原创 [python] ASCII码值的转换

使用ord()方法。

2025-03-09 18:44:28 304

原创 [machine learning] MACS、MACs、FLOPS、FLOPs

MACs/FLOPs表示总的操作数(后缀s可以看成是表示复数),MACS/FLOPS表示每秒可以执行的操作数(即:MACs per Second/FLOPs per Second)。比如说一个模型的计算复杂度是1 GFLOPs,机器CPU的性能是2 GFLOPS,不考虑其他性能损耗,理想状况下这台机器一秒钟可以推理这个模型两次。假设模型是一个三层的FFN模型,每一层的Neuron数都是1024个,输入维数是4,输出维数是2,求这个模型的MACs。我们也可以简单说这个模型的计算复杂度是。

2025-03-05 17:38:23 1050

原创 [python] 类

‘prev’, ‘next’, ‘key’, ‘val’ 表示 Node 类的实例只能拥有 prev 、 next 、 key 和 val 这四个属性。是一个特殊的类属性,用于限制实例可以拥有的属性。在上述Python代码中,

2025-03-04 23:51:17 401

原创 [python] del

del 操作是针对具体实例的属性进行删除,如果多个实例共享同一个属性名,在一个实例中删除属性不会影响其他实例的同名属性。这将删除从 my_module 模块中导入的 some_variable。上述代码删除了变量 x ,之后再访问 x 会报错,因为它已从内存中移除。这里删除了列表 my_list 中下标为2的元素,即3。在类 MyClass 的实例 obj 中,删除了属性 x。代码删除了字典 my_dict 中键为 ‘b’ 的键值对。

2025-03-04 22:38:12 459

原创 [python] 最小堆

是Python中的一个特殊方法,用于定义小于号 ( < ) 的行为。在这里,通过lambda表达式定义了 ListNode 类的小于号比较行为,使得 ListNode 对象可以比较大小,从而可以用于堆(优先队列)中。函数用于将列表 h 转换为堆(优先队列)。本文通过一道例题来介绍python中的最小堆。是Python标准库中的堆队列算法模块。函数用于将元素插入堆中,并保持堆的性质。函数用于从堆中弹出最小的元素,

2025-03-03 22:31:38 345

原创 [Machine Learning] K-means算法

K-means模型训练好后,可以dump成文件,以便重复使用。后K-means模型就会不断迭代直到收敛,即每一类的中心点不再明显变化。HuBERT预训练过程中会用到K-means算法,本文简单介绍一下K-means算法的基本流程。,K-means会不断迭代,直到X被分成N类,且每一类的中心点不再明显变化。简单地讲,K-means就是给特征向量集进行聚类。当重新load模型时,这些数据会被恢复使得可以重新使用训练好的模型。这个例子中,特征向量集是二维点,目标聚类数是分成3类,调用。

2025-02-28 18:04:06 578

原创 [leetcode] 动态规划 - 入门之爬楼梯与打家劫舍

本篇是动态规划的入门篇,分别是爬楼梯与打家劫舍两大类。这两大类的划分取自。

2025-02-23 10:48:40 425

原创 [python] dict

正好练一下dict的元素删除和插入。

2025-02-22 20:30:25 187

原创 [python] 深拷贝 与 浅拷贝

当处理嵌套的可变对象时, copy() 方法执行的浅拷贝可能无法满足需求,因为浅拷贝只会复制顶层对象,嵌套的子对象仍然是引用。而 deepcopy() 会递归地复制所有嵌套的对象,创建一个完全独立的副本。

2025-02-19 18:38:47 278

原创 [leetcode] 动态规划 - 最大子数组和

最大子数组和系列题目的核心算法是Kadane算法:定义状态f[i]表示以a[i]结尾的最大子数组和,不和i左边拼起来就是,和i左边拼起来就是,取最大值就得到了状态转移方程,答案为max(f)。

2025-02-15 15:31:07 422

原创 [python] list

有两个list A和B,它们长度相等,元素一一对应,请将A中的元素按照B中的元素大小排序,如果B中的元素相等则再按照A中的元素排序。按照第一个元素降序,第二个元素升序排序。

2025-02-11 22:33:12 506

原创 [python] pairwise, groupby, combinations

然后就可以按照上述的方式使用这个自定义的 pairwise 函数来处理可迭代对象。

2025-01-16 23:47:27 597

原创 [python] bisect_left 和 bisect_right

import bisectnumbers = [1, 3, 3, 6, 8, 9]new_number = 3insert_index = bisect.bisect_right(numbers, new_number)numbers.insert(insert_index, new_number)print(“插入后的列表:”, numbers) - 运行结果为 [1, 3, 3, 3, 6, 8, 9] ,成功将元素插入到了正确的位置,使得列表依然有序。等价于C++中的upper_bound。

2025-01-14 23:53:49 954

原创 [C++] priority_queue 自定义 compare函数简单用法

【代码】[C++] priority_queue 自定义 compare函数简单用法。

2024-11-15 11:53:46 178

原创 左值、右值、左值引用和右值引用

从图中可以看出,C++11之后,任何一个值,它肯定是LValue,XValue和PRValue中的一种。根据文档中的解释,如果一个表达式是一个指向类型T的引用,那么这个表达式的类型将会调整为类型T。C++11引入了右值引用,从而可以去读写在内存上临时的右值(C++11之前可以使用const左值引用去指向右值来读右值的内容,但是无法修改所指向的右值内容)。这个单词,其实也很好理解,当我们使用一个右值引用想要move一个临时对象的值时,这个临时对象的生命周期也就即将结束。的值类型,左值引用就是指向左值的引用。

2023-10-08 18:09:31 246

原创 右值引用、引用折叠、std::move和std::forward

前面两个调用很好理解,i是左值,所以调用参数是左值引用的函数,5是右值,所以调用参数是右值引用的函数。编译器把右值引用看作是左值,这也不难理解,右值引用是指向内存上临时变量的别名,我们可以读取它也可以通过它来修改临时变量的值,因此右值引用在使用上和左值没有区别。跟左值引用一样,右值引用可以作为函数的参数,从而避免拷贝操作。看起来右值引用和左值引用似乎一样,都是通过提供一个别名指向内存上变量的位置来节省拷贝操作,唯一的区别就是右值引用指向的是内存上没有名字的临时变量,而左值引用指向的是内存上有名字的变量。

2023-10-07 17:17:50 341

原创 SSE AVX 发展简单介绍

SSE AVX 发展简单介绍

2022-11-29 15:50:54 1427

原创 LeetCode - 链表求和

低位在前https://leetcode.cn/problems/sum-lists-lcci/ void handleRestBits(ListNode* cur, int extraOne) { while(extraOne) { int add = cur->val + extraOne; extraOne = add / 10; cur->val = add % 10

2022-05-29 14:44:51 225

Keil 4安装包

Keil4安装包,内有注册机,轻松安装,避免网上许多垃圾流氓软件

2014-11-14

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除