coding notes
未读coding notes
未读BFS - 广度优先搜索BFS的思路
大家应该好奇,这一圈一圈的搜索过程是怎么做到的,是放在什么容器里,才能这样去遍历。
很多网上的资料都是直接说用队列来实现。
其实,我们仅仅需要一个容器,能保存我们要遍历过的元素就可以,那么用队列,还是用栈,甚至用数组,都是可以的。
用队列的话,就是保证每一圈都是一个方向去转,例如统一顺时针或者逆时针。因为队列是先进先出,加入元素和弹出元素的顺序是没有改变的。
如果用栈的话,就是第一圈顺时针遍历,第二圈逆时针遍历,第三圈有顺时针遍历。因为栈是先进后出,加入元素和弹出元素的顺序改变了。
那么广搜需要注意 转圈搜索的顺序吗? 不需要!
所以用队列,还是用栈都是可以的,但大家都习惯用队列了,所以下面的讲解用我也用队列来讲,只不过要给大家说清楚,并不是非要用队列,用栈也可以。
123456789101112131415161718192021222324252627# 使用二叉树的广度优先遍历作为模板# Definition for a binary tree node.class TreeNode: def __init__(self, v ...
coding notes
未读二叉树问题递归问题常用的解题方法
确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
确定终止条件:写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
确定单层递归的逻辑:确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
二叉树的分类
二叉树类型
定义
特点
普通二叉树
每个节点最多有两个子节点,分别是左子节点和右子节点
最基础的二叉树结构
满二叉树
每个节点要么没有子节点,要么有两个子节点
所有节点要么是叶节点,要么有两个子节点
完全二叉树
除了最后一层节点可能不满,其余每一层节点都是满的,并且最后一层的节点都是从左到右排列的
最后一层节点从左到右排列
完美二叉树
每一层的节点数都达到最大值的二叉树
所有叶节点都在同一层,每个内部节点都有两个子节点
平衡二叉树
任意节点 ...
coding notes
未读滑动窗口常用的模板和套路:
left = right = 0
一般是以right指针为驱动指针,left为被驱动指针,用来改变滑窗的大小
滑动窗口不单单可以用于有规律的数组,而且可以使用无规数组,因为里面的滑窗是有规律的
二维数组的问题123456789101112131415# 初始化二维数组下标的一般步骤:row, col = len(nums), len(nums[0]) # 其中i代表的是行数,j代表的是列数,千万别初始化错了(先行后列)for i in range(0, row): for j in range(0, col): print(nums[i][j]) # 正确初始化一个不可变对象的二维数组:(外行内列)dp = [[0]*col for _ in range(row)]dp = [[0 for _ in range(col)] for _ in range(row)]# 不要用 dp = [[0] * n] * m, 否则里边都 引用的同一个 list,修改一个都会变。建议使用第一种,第二种也可以( ...
deeplearning
未读2. Attention(重点掌握)最好先看下
什么是Attention? 为什么要用Attention?它有什么作用?
Attention的流程是什么样的?
普通的Attention和Transformer的Self-attention之间有什么关系?
什么是Self-attention?
参考答案:
什么是Attention? 为什么要用Attention?它有什么作用?
Attention(注意力机制)是一种用于处理序列数据的技术,最初在自然语言处理领域得到广泛应用,后来也被成功应用于计算机视觉和其他领域。它的主要目的是对序列数据中的不同部分赋予不同的权重,从而使模型能够在处理序列时更关注重要的部分,忽略无关的部分,提高模型的表现和泛化能力。
在自然语言处理中,Attention被用于序列到序列(Sequence-to-Sequence)任务,如机器翻译。在计算机视觉中,Attention被用于图像到文本的生成任务,如图像描述生成(Image Captioning)。
为什么要用Attention? 在处理较长的序列数据时,传统的模型(如RNN)会面临梯度消失或梯度爆炸的 ...
deeplearning
未读deeplearning
未读deeplearning
未读基础知识深度学习基础问题
前向传播和反向传播分别是什么样的?请问你可以手推一下神经网络的前向和反向传播的过程吗?
什么是激活函数?常见的激活函数有哪些?
什么是损失函数?列举一些常见的损失函数
什么是优化算法?优化算法的目的是什么?有哪些优化算法?
过拟合,欠拟合分别是什么?分别怎么解决?
梯度消失/梯度爆炸分别是什么?分别怎么解决?
正则化/归一化分别是什么?都是干嘛用的?
什么是RNN?它的作用是什么?
什么是CNN?它在计算机视觉中的作用是什么?
1. 前向传播和反向传播分别是什么样的?请问你可以手推一下神经网络的前向和反向传播过程吗?
前向传播(Forward Propagation): 假设我们有一个包含L层的神经网络,其中第l层的激活单元为$a^l$。前向传播是指从输入层(第0层)开始,逐层计算每个激活单元的值,直到得到输出层的预测结果。
首先,输入层的激活单元即为输入数据 x。对于第 l 层(1 <= l <= L),前向传播的计算过程如下:
$z^l = W^l * a^{(l-1)} + b ...


