自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(318)
  • 收藏
  • 关注

原创 Transformer理解-八股文

使用不同的权重矩阵计算是为了在不同的空间上进行投影,增强模型表达能力,提高score矩阵的泛化性。由于padding都是0, 在计算时e^0 = 1使用softmax会导致padding的值也会占全局一定的概率,因此,使用mask的目的就是让这部分的值无穷小,让他在softmax之后基本为0从而保证不影响attention socre的分布。BN 一般在MLP和CNN上有较好的表现,在RNN模型中表现较差。为什么使用LN而非BN,LN在transformer的位置时哪里,BN的使用场景与LN的区别。

2024-02-06 16:04:16 986

原创 pandas按行按列遍历Dataframe的三种方式

遍历数据有以下三种方法:简单对上面三种方法进行说明:标题按行遍历iterrows():可用row[‘name’]作为索引按行遍历itertuples():可以用getattr(row, ‘name’)作为索引(注意row[‘name’]会报错)按列遍历iteritems():注意这是按列读取遍历

2023-11-10 15:10:50 1015

原创 numpy中的concatenate和pandas中的concat函数

concatenate功能:数组拼接concat功能:数组拼接。

2022-10-18 16:34:50 2256 1

原创 拥有成长思维,扩大舒适圈,获得不断成长

成长思维:1、 客观看待成败,建立学习的心态,聚焦自己能力提升的。把成功的经历当做对自己的能力扩展,并不断找到学习的目标。去学习新的事物,扩大自己的舒适圈,不要害怕失败,敢于试错。聚焦能持续提升自己的事情。找能帮助自己进步的人做朋友。2、 认清自己的长处和短板,戒骄戒躁,任何时候都不懈努力。欣赏天赋,但更崇尚努力,即使是自己的优势,也要扎扎实实的持续努力才能走向长远的成功。当做自己不擅长的事情时,更要加倍努力,才能弥补别人积累的经验,即所谓的“天赋”。不停的努力和进步。3、 敢于

2021-07-08 15:59:39 400

原创 如何拥有好的精力去做事情?管理精力

管理精力: 1、没时间=不重要 明确要事, 2、时间很充足但是无管理,运用大石头周计划表管理时间:预定时间,平衡工作、个人、社会,公布计划,周计划,原计划,OKR,留出机动时间。 3、懂得Say No:设置免打扰时段,远离易打扰物品,明确角色、职责、范围, 4、时间*精力=效能精力:体能、情感、意志、思维体能(吃好、睡好、运动好)情感(与情绪做朋友:正确认识情绪,腹式呼吸,积极情感支持)意志(给思维“抛光”:寻找注意力专区,给思维留白放空,看待事情乐观积极)思维(遵

2021-07-07 17:40:01 218

原创 Python中 sys.argv[]的用法说明

sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,不要从代码来解释。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。“sys.argv[0]表示代码本身文件路径”,也就是说其第一个元素是程序本身,随后才依次是外部给予的参数。下面我们通过一个极简单的test.py程序的运行结果来说明它的用法。#test.pyimport sysa=sys.argv[0]print(a)

2021-06-29 15:17:40 177

原创 Linux系统下运行.sh文件的两种方法

在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件第一种(这种办法需要用chmod使得文件具备执行条件(x): chmod u+x datelog.sh):1、在任何路径下,输入该文件的绝对路径/root/datelog.sh就可执行该文件(当然要在权限允许情况下)./root/datelog.sh2、cd到datelog.sh文件的目录下,然后执行./datelog.sh第二种(这种办法不需要文件具备可执行的权限也可运行):1、在该文件路径下sh加上文

2021-06-29 12:45:49 415

原创 错误/警告类型总结——comparison between signed and unsigned integer expressions

错误类型: vector<int> histogram = Histogram(img); int total = 0; for (int i = 0; i != histogram.size(); ++i) { total += histogram[i]; }分析:警告的意思是一个无符号数整型与有符号整型最好不要比较。i是有符号整型,histogram.size()是无符号整型,所以会产生这个警告。解决方法:1、for (unsigned int i = 0;

2021-06-24 20:54:51 2964

转载 C/C++不同文件夹下包含头文件的方法及#include的使用

假设我们有如下一个工程,其中包含了几个源代码文件和头文件。其中main.c是主源代码文件,里面包含main函数。在base中包含:func3.h,func3.c,文件夹main和文件夹func4在main中包含:main.c,func1.h,func1.c和文件夹func2。 在func2中包含:func2.h和func2.c在func4中包含:func4.h和func4.c1、在main中包含头文件func1.h:#include "func1.h"这里main.c和func1.h在同

2021-06-24 15:57:59 13469 2

转载 使用make和Makefile从入门到放弃

makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程

2021-06-22 16:37:55 269

原创 mac终端常见命令大全

最常用的查看在终端里输入 ls 就可以查看文件和文件夹,但隐藏的文件就无法查看,使用ls -a即可。创建目录命令: mkdir使用说明:输入命令随后空格再输入目录名即可。案例:创建一个test目录则对应命令就是 mkdir test进入目录cd命令进入目录比如要进入test目录则就是 cd test返回上一级目录命令: cd..删除目录(空目录)命令: rmdir案例: rmdir test(rmdir命令后面空格在加上目录名)注意:此删除不会出现在废纸篓里删除目录(

2021-06-21 16:26:23 6630

原创 终端tar解压和压缩命令

tar解压和压缩命令把常用的tar解压命令总结下,当作备忘:tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使用档案名字,切记,这个参数是最后一

2021-06-17 16:26:41 2055

原创 动态规划:力扣741. 摘樱桃

1、题目描述2、题解:动态规划:参考https://leetcode-cn.com/problems/cherry-pickup/solution/dong-tai-gui-hua-xiang-xi-jie-xi-tu-jie-by-newhar/C++代码:class Solution {public: int cherryPickup(vector<vector<int>>& grid) { // 动态规划 int

2020-12-13 20:47:34 364 7

原创 动态规划 | 广度优先搜索:力扣279. 完全平方数

1、题目描述:2、题解:方法1:动态规划动态规划问题,弄清楚三点:1、重复子问题;2、最优子结构;3、无后效性。动态规划:1、状态定义;2、状态转移方程;3、初始化;base case4、输出;5、思考状态压缩。可以用递归去求,但是会存在重叠子问题,加个备忘录可以解决重复问题。python代码如下:class Solution: def numSquares(self, n: int) -> int: #动态规划 dp = [fl

2020-11-01 10:56:29 261

原创 数学:力扣263. 丑数

1、题目描述:2、题解:方法:数学依次循环判断如果是2,3,5的倍数,就除以2,3,5,最后判断如果num == 1就返回真,否则,返回假。Python代码如下:class Solution: def isUgly(self, num: int) -> bool: #数学 if num <= 0: return False while num % 2 == 0: num //=

2020-10-31 23:28:48 194

原创 动态规划 | 堆:力扣264. 丑数 II

1、题目描述:2、题解:方法:动态规划动态规划问题,弄清楚三点:1、重复子问题;2、最优子结构;3、无后效性。动态规划:1、状态定义;2、状态转移方程;3、初始化;base case4、输出;5、思考状态压缩。可以用递归去求,但是会存在重叠子问题,加个备忘录可以解决重复问题。 一个十分巧妙的动态规划问题 1.我们将前面求得的丑数记录下来,后面的丑数就是前面的丑数*2,*3,*5 2.但是问题来了,我怎么确定已知前面k-1个丑数,我怎么确定第k个丑数呢 3.采取用三个指针的

2020-10-31 23:22:47 223

原创 深度优先搜索DFS:力扣695. 岛屿的最大面积

1、题目描述:2、题解:类似的网格题:数学法 | 深度优先搜索DFS:力扣463. 岛屿的周长深度优先搜索DFS | 广度优先搜索BFS:力扣200. 岛屿数量方法:深度优先搜索DFS思路:dfs的定义是求一个岛屿的面积,超过边界和不为1的点都返回0,然后标记已经访问,对上左下右依次进行dfs,加到结果中。最后遍历所有的点,找出最大岛屿的面积python代码如下:class Solution: def maxAreaOfIsland(self, grid: List[List[

2020-10-31 11:08:45 940

原创 数学法 | 深度优先搜索DFS:力扣463. 岛屿的周长

1、题目描述2、题解:关于岛屿的题:深度优先搜索DFS | 广度优先搜索BFS:力扣200. 岛屿数量方法1:数学法思路:一个小格子会贡献4个边,但是每增加一个格子就会少2个边,所以计算格子数land和重合的边数border就可以得到结果计算公式是:4 * land - 2 * borderPython代码如下:class Solution: def islandPerimeter(self, grid: List[List[int]]) -> int:

2020-10-31 09:52:52 296

原创 深度优先搜索 | 后序遍历:力扣236. 二叉树的最近公共祖先

1、题目描述:2、题解:方法:深度优先搜索 ,后序遍历祖先的定义: 若节点 p 在节点 root 的左(右)子树中,或 p = root ,则称 root是 p 的祖先。最近公共祖先的定义: 设节点 root 为节点 p, q的某公共祖先,若其左子节点 root.left 和右子节点 root.right都不是 p,q的公共祖先,则称 root是 “最近的公共祖先” 。可以发现后序遍历,第一个找到的点就是最近的公共祖先。有以下三种情况:1、p和q在root的子树中,且分别是root的异侧

2020-10-30 22:08:56 189

原创 动态规划: 力扣91. 解码方法

1、题目描述2、题解:方法:动态规划:动态规划问题,弄清楚三点:1、重复子问题;2、最优子结构;3、无后效性。动态规划:1、状态定义;2、状态转移方程;3、初始化;base case4、输出;5、思考状态压缩。可以用递归去求,但是会存在重叠子问题,加个备忘录可以解决重复问题。状态定义: dp[i] 为以str[i]结尾前缀子串的解码数状态转移方程: (1)若s[i] != '0': dp[i] = dp[i - 1]

2020-10-29 21:16:42 223

原创 树:力扣617. 合并二叉树

1、题目描述:2、题解:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> Tre

2020-09-24 23:03:13 177

原创 深度优先搜索DFS | 中序遍历:力扣538. 把二叉搜索树转换为累加树

1、题目描述:2、题解:方法一:反向中序遍历 递归二叉搜索树的中序遍历是有序的,升序,那么我们就让“右根左”,也就是先递归右子树,然后处理根节点,然后递归左子树,这样就可以降序处理,然后定义一个变量sum_存储大于此刻值的所有节点的和。Python实现:class Solution: def convertBST(self, root: TreeNode) -> TreeNode: #反向中序遍历,递归 if not root:

2020-09-22 08:38:56 198

原创 深度优先搜索DFS | 回溯法:力扣78. 子集

1、题目描述:2、题解:方法:深度优先搜索DFS | 回溯回溯算法框架: res = [] def backtrack(路径,选择列表): 做剪枝 if 满足结束条件: res.append(路径) return for 选择 in 选择列表: 做选择 backtrack(路径,选择列表) 撤销选择解决一个回溯问题

2020-09-21 22:56:50 276

原创 深度优先搜索DFS | 回溯:力扣51. N 皇后

1、题目描述:2、题解:3、复杂度分析:

2020-09-17 08:33:23 193

原创 栈 | 中序遍历:力扣94. 二叉树的中序遍历

1、题目描述:2、题解:方法1:递归Python实现:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def inorderTraversal(self, root: TreeNode

2020-09-16 22:52:06 167

原创 递归 | 树:力扣226. 翻转二叉树

1、题目描述:2、题解:这个题用递归,也就是先递归翻转左子树,得到left;再递归翻转右子树,得到right。然后让根节点的左、右指针分别指向两个递归的结果,也就是:root.left = right,root.right=left.python实现:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.lef

2020-09-16 22:29:53 168

原创 C++中的NULL和nullptr的区别:以后用空指针就用nullptr

NULL在c++中是一个宏,是一个空指针常量,如果将NULL扩展为常数,那么这个数是0,类型为int。所以,常数0既是整型常量,也是空指针常量,这就有可能导致二义性问题。因此,c++11新标准引入了nullptr,将其作为空指针常量。NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后

2020-09-16 22:18:33 278

原创 设计 | 前缀树、字典树、Trie:力扣208. 实现 Trie (前缀树)

1、题目描述:2、题解:插入:insert()向Trie中插入一个单词word这个操作和构建链表很像。先检查,找到不到就创建。首先从根结点的子结点开始与 word 第一个字符进行匹配,一直匹配到前缀链上没有对应的字符,这时开始不断开辟新的结点,直到插入完 word 的最后一个字符,同时还要将最后一个结点isEnd = true;表示它是一个单词的末尾。查找:查找 Trie 中是否存在单词 word从根结点的子结点开始,一直向下匹配即可,如果出现结点值为空就返回false,如果匹配到了最

2020-09-14 16:49:57 200

原创 前缀树、字典树、Trie | 回溯 :力扣212. 单词搜索 II

1、题目描述:实现Trie(前缀树)2、题解:3、复杂度分析:

2020-09-14 15:17:10 222

原创 数据结构与算法: 从0到1 Trie树的实现与用法

1、基础知识2、实现3、题目

2020-09-14 14:56:53 308

原创 C++里的memset

在实现Trie时用到memset,下面简要介绍一下memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的;包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化;原型为 :void *memset(void *s, int v, size_t n);这里s可以是数组名,也可以是指向某一内在空间的指针;v为要填充的值;n为要填充的字节数;memset是逐字节 拷贝的。在memset使用时要千万小心,在给char以外的数组赋值时,只能初始化为0或者-1

2020-09-14 10:52:57 148

原创 深度优先搜索DFS | 回溯:力扣79. 单词搜索

1、题目描述:2、题解:方法:深度优先搜索DFS | 回溯每次DFS都需要遍历4个方向设置二维数组visited,用来保存每次DFS遍历过的点DFS: 剪枝 终止条件 令此时所对应的visited为1 四个方向遍历: 满足边界条件且没有访问过: 如果DFS后为真,也即找到一个匹配: 就返回True 还原现场 都没找到就返回FalseDFS是从一个点的深度优先搜索,在 exis

2020-09-13 23:24:30 173

原创 深度优先搜索DFS | 广度优先搜索BFS:力扣637. 二叉树的层平均值(Python中zip())

1、题目描述:2、题解:方法1:广度优先搜索BFS可以把本题当成一个模板题,怎么实现层序遍历借助队列,只要队列不为空,就循环: 先记录此时队列的长度 然后循环从队列中取值 也就是队首出队,访问 然后把左、右子树(注意:有顺序之分)加入到队列中 在每一层计算平均值,加入到结果数组res中Python实现:class Solution: def averageOfLevels(self, root: TreeNode) -> List[float]:

2020-09-12 23:27:50 172

原创 深度优先搜索DFS | 广度优先搜索BFS | 回溯算法:力扣17. 电话号码的字母组合

1、题目描述:2、题解:3、复杂度分析:

2020-09-11 22:54:18 175

原创 高频面试题:高频面试题-百度/字节/滴滴- 二分查找 | 数组划分 力扣4. 寻找两个正序数组的中位数 (C++调试方法)

这里主要说一下调试方法:详细的题已经题解参考这里:高频面试题-百度/字节/滴滴- 二分查找 | 数组划分:力扣4. 寻找两个正序数组的中位数 (C++调试方法)这里提供数组划分的方法的调试,当然二分查找的方法,也可以用这里的主函数进行调试。C++实现://在自己的编译器中,加头文件很重要#include <iostream>#include <stdio.h>#include <vector>using namespace std;class Solu

2020-09-11 21:05:48 131

原创 深度优先搜索DFS + 剪枝 | 回溯:力扣216. 组合总和 III

1、题目描述:2、题解:方法:深度优先搜索DFS + 剪枝 | 回溯result = []def backtrack(选择列表,路径): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(选择列表,路径) 撤销选择# 做选择将该选择从选择列表移除路径.add(选择)# 撤销选择路径.remove(选择)将该选择再

2020-09-11 11:01:13 118

原创 深度优先搜索DFS + 剪枝 | 回溯:力扣40. 组合总和 II

1、题目描述:2、题解:3、复杂度分析:

2020-09-11 10:07:21 122

原创 深度优先搜索DFS + 剪枝 | 回溯:力扣47. 全排列 II

1、题目描述:2、题解:数据结构和算法:从0到1系列 回溯小专题深度优先搜索DFS | 回溯算法:力扣46. 全排列result = []def backtrack(选择列表,路径): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(选择列表,路径) 撤销选择# 做选择将该选择从选择列表移除路径.add(选择)#

2020-09-10 23:15:56 132

原创 如何快速判断数组中是否存在某值:C++的find()

当做题时,有时候需要快速的判断某值是否在数组中,下面提供C++中的find()源代码:#include <algorithm>template<class InputIterator, class T>InputIterator find (InputIterator first, InputIterator last, const T&val){ while (first != last) { if (*first == val) { return

2020-09-10 10:48:18 13064 2

原创 深度优先搜索DFS + 剪枝 | 回溯:力扣39. 组合总和

1、题目描述:2、题解:方法:深度优先搜索DFS + 剪枝,+回溯也是可以套用回溯模板:对于dfs函数 ,传进来三个值,路径path,路径里的和sum_,枚举选择的起点start: 如果sum_ > target:剪枝 如果sum_ == target:满足条件添加进结果数组res中 循环,从start开始做枚举:(因为可以重复,所以从start开始,且向下选择的时候i值不改变;并且因为每次都是从start开始往后遍历,所以可以去除[2,2,3],[2,3,2]这种

2020-09-10 09:51:52 150

空空如也

空空如也

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

TA关注的人

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