首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

巧用递归解决矩阵最大序列和问题

之前同事问了一道需要点脑洞的算法题,我觉得蛮有意思的,思路可能会给大家带来一些启发,在此记录一下 题目 现有一个元素仅为 0,1 的 n 阶矩阵,求连续相邻(水平或垂直,不能有环)值为 1 的元素组成的序列和的最大值...假设有如下矩阵 ? 则此矩阵连续相邻值为 1 的元素组成的序列和分别为 4, 3,(如图示),可知这个矩阵符合条件的序列和的最大值为 4 ?...首先我们发现,每个序列的起点和终点必然是 1,我们可以遍历矩阵的每一个元素,如果元素值为 1,则将其作为序列的起点开始查找所有以这个元素为起点的序列,我们知道序列是可以向垂直和水平方向延伸的,所以我们可以以这个元素为起点...,查找它的上下左右值为 1 的元素,再以找到的这些元素为起点,继续在元素的上下左右查找值为 1 的元素,以此类推(递归),如果找不到符合条件的值,则序列终止,在遍历过程中保存每条序列遍历的元素,即可求得每条符合条件的序列...综上可知,此矩阵连续相邻值为 1 的元素的序列和的最大值为 4 代码实现 好了,知道了解题思路,现在我们来看下代码该如何实现,首先我们要用一个数据结构来表示矩阵,显然矩阵用数组表示很合适,这里我们用一维数组来表示矩阵

38910

GPT 大型语言模型可视化教程

这是对矩阵每列的值分别进行归一化的操作。 归一化是深度神经网络训练中的一个重要步骤,它有助于提高模型在训练过程中的稳定性。 我们可以分别看待每一列,所以现在先关注第 4 列(t = 3)。...我们在聚合层中计算并存储这些值,因为我们要将它们应用于列中的所有值。 最后,在得到归一化值后,我们将列中的每个元素乘以一个学习权重 (γ),然后加上一个偏置 (β),最终得到我们的归一化值。...我们会经常看到的点乘操作非常简单:我们将第一个向量中的每个元素与第二个向量中的相应元素配对,将配对的元素相乘,然后将结果相加。...softmax 运算的一个有用特性是,如果我们在所有输入值上添加一个常数,结果将是相同的。因此,我们可以找到输入向量中的最大值,然后将其从所有值中减去。...现在,对于每一列,我们都有了模型分配给词汇表中每个词的概率。 在这个特定的模型中,它已经有效地学习了如何对三个字母进行排序这一问题的所有答案,因此概率在很大程度上倾向于正确答案。

18410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    剑指算法题,一维数组求maxpooling

    可能很多同学不知道pooling是什么意思,pooling是深度学习中的一个术语,翻译过来叫做池化。池化的目的是压缩张量的规模,张量可以理解成是矩阵。...池化的时候会将一个小窗口在矩阵上移动,每次会对小窗口内的元素进行计算,得到一个值。...所以如果想要优化复杂度的话,只能从另外一个维度,也就是每次求解时的计算复杂度入手。 在暴力的方法下,我们每次遍历k个元素,找到最大值。稍微分析一下就会发现,这里面有大量的重复。...剩下的问题就是多个最大值如何维护的问题了,由于要维护多个值,我们自然需要一个数据结构来存储,只用几个变量是不行的了。...很简单,我们在存储的时候可以不用存元素的值,而存元素的下标。通过下标就可以很轻易判断它是否在窗口内,如果不在,那么自然说明已经过期了。 第二个问题是,每次移动窗口之后读入新的值如何更新?

    52210

    前端工程师leetcode算法面试必备---二分搜索算法(中)

    有序矩阵中第K小的元素  由水平和垂直方向为递增数组的条件,可以得到当前二维空间中的左上角为最小值,右下角为最大值,所以有序数组即为最小值到最大值的整数递增序列。  ...图片类似解题思路的还有:【74. 搜索二维矩阵】2、875. 爱吃香蕉的珂珂  这道题要求我们找出一个最慢吃香蕉的速度,使得在 H 小时可以吃完 N 堆香蕉。  ...找到 K 个最接近的元素  这道题要求我们找到一个起始下标 index,使得 [index, index + k) 中的数字最靠近 x 。  ...有序矩阵中第K小的元素  由水平和垂直方向为递增数组的条件,可以得到当前二维空间中的左上角为最小值,右下角为最大值,所以有序数组即为最小值到最大值的整数递增序列。  ...找到 K 个最接近的元素  这道题要求我们找到一个起始下标 index,使得 [index, index + k) 中的数字最靠近 x 。

    56330

    卷积神经网络(CNN)的数学原理解析

    在RGB模型中,彩色图像实际上是由三个对应于红、绿、蓝三种颜色通道的矩阵组成的。 在黑白图像中,我们只需要一个矩阵。每个矩阵都存储0到255之间的值。...后续的特征map值根据下式来计算,其中输入图像用 f 表示。我们的kernel 用 h 表示,结果矩阵的行和列的索引分别用m和n表示。...基本上,这种方式与图3中的示例非常相似,不过这次我们将三维空间中的值与卷积核对应相乘。 如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果叠在一个一起,并将它们组合成一个整体。...例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。...因此,很明显,在反向传播过程中,梯度不应该影响矩阵中没有包含在正向传播中的元素。实际上,这是通过创建一个掩码来实现的,该掩码可以记住第一阶段中使用的值的位置,稍后我们可以使用该掩码来传播梯度。

    63610

    图解:卷积神经网络数学原理解析

    在RGB模型中,彩色图像实际上是由三个对应于红、绿、蓝三种颜色通道的矩阵组成的。在黑白图像中,我们只需要一个矩阵。每个矩阵都存储0到255之间的值。...输出矩阵的尺寸——考虑到填充宽度和步幅——可以使用以下公式计算。 过渡到三维 空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。...如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。...例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。...因此,很明显,在反向传播过程中,梯度不应该影响矩阵中没有包含在正向传播中的元素。实际上,这是通过创建一个掩码来实现的,该掩码可以记住第一阶段中使用的值的位置,稍后我们可以使用该掩码来传播梯度。

    37920

    卷积神经网络数学原理解析

    在RGB模型中,彩色图像实际上是由三个对应于红、绿、蓝三种颜色通道的矩阵组成的。在黑白图像中,我们只需要一个矩阵。每个矩阵都存储0到255之间的值。...输出矩阵的尺寸——考虑到填充宽度和步幅——可以使用以下公式计算。 ? 过渡到三维 空间卷积是一个非常重要的概念,它不仅能让我们处理彩色图像,更重要的是在单层中应用多个卷积核。...如果我们想在同一幅图像上使用多个滤波器,我们分别对它们进行卷积,将结果一个叠在一起,并将它们组合成一个整体。...例如,对于最大值池化层,我们从每个区域中选择一个最大值,并将其放在输出中相应的位置。在卷积层的情况下,我们有两个超参数——滤波器大小和步长。...因此,很明显,在反向传播过程中,梯度不应该影响矩阵中没有包含在正向传播中的元素。实际上,这是通过创建一个掩码来实现的,该掩码可以记住第一阶段中使用的值的位置,稍后我们可以使用该掩码来传播梯度。 ?

    74810

    【算法统治世界】动态规划 个人笔记总结

    在有向无环图(Directed Acyclic Graph,简称DAG)中,每个节点代表一个状态,而边则代表了状态之间的转移关系。通过这种方式,动态规划将问题转化为在一个DAG上寻找最优路径的问题。...状态的设计需要根据具体问题的特点来进行,常见的状态表示方法包括: 位置:在序列问题中,可以用位置来表示状态。 剩余元素:在涉及选择的问题中,可以用剩余可选元素的数量来表示状态。...部分结果:在需要构造结果的问题中,可以用已经得到的部分结果来表示状态。 确定状态转移方程 状态转移方程描述了状态之间的转移关系,它定义了如何从一个或多个状态得到新的状态。...例题:0-1背包问题 描述:给定n个物品,每个物品有自己的重量w[i]和价值v[i],以及一个最大承重W的背包。求解如何选择物品放入背包,使得背包中物品的总价值最大。...,不相等的情况则取两个方向的最大值。

    10200

    Leetcode No.85 最大矩形(单调栈)

    为了计算矩形的最大面积,我们只需要计算每个柱状图中的最大面积,并找到全局最大值 于是,本质上是No.84 柱状图中最大的矩形题中优化暴力算法的复用。...我们分配了一个与给定矩阵等大的数组,用于存储每个元素的左边连续 1 的数量。 2、使用柱状图的优化暴力方法 最原始地,我们可以列举每个可能的矩形。...随后,对于矩阵中任意一个点,我们枚举以该点为右下角的全 1 矩形。...,其中 m 和 n 分别是矩阵的行数和列数。...空间复杂度:O(mn),其中 m 和 n 分别是矩阵的行数和列数。我们分配了一个与给定矩阵等大的数组,用于存储每个元素的左边连续 1 的数量。

    30610

    最大子矩阵(CC++)

    简介: 最大子矩阵问题是指在一个矩阵中找到一个子矩阵,使得该子矩阵的元素之和最大。 解决该问题的常用方法是使用动态规划。...该问题也可以使用暴力搜索的方法,枚举所有可能的子矩阵,计算它们的元素之和,并找到最大值。但是由于时间复杂度过高,所以在实际应用中很少使用。...校长先给他们一个 n×n 矩阵。要求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。...,y2),四个for循环分别枚举每一个点的坐标,两个for循环去遍历这个矩阵的每一个点的权值,所以时间复杂度再O(n^6)。...在求解时,先枚举起实行跟终止行,再去枚举每一列,这样就确定了多个子矩阵,把它用dp数组表示,每一个小子矩阵还可以与相邻的子矩阵构成子矩阵,每一次与自己比较大小。

    12310

    矩阵模拟!Transformer大模型3D可视化,GPT-3、Nano-GPT每一层清晰可见

    以第4个token(index 3)为例,看看是如何被用来生成输入嵌入的第4列向量的。 我们使用token index(在本例中为B = 1)来选择左侧token嵌入矩阵的第二列。...这是对矩阵每列的值分别进行归一化的操作。 归一化是深度神经网络训练中的一个重要步骤,它有助于提高模型在训练过程中的稳定性。 我们可以分别看待每一列,所以现在先关注第4列(t=3)。...我们会经常看到的点乘运算非常简单:我们将第一个向量中的每个元素与第二个向量中的相应元素配对,将这对元素相乘,然后将结果相加。...因此,可以在输入向量中找到最大值,并从所有值中减去这个它,这样可以确保最大值变为0.0,从而保持softmax运算的数值稳定。...现在,每一列都得到了模型对词汇表中每个词所分配的概率。 在这个特定的模型中,它已经有效地学会了所有关于如何排序三个字母的问题的答案,因此给出的概率值,也很大概率会倾向于正确答案。

    1.5K20

    30 个重要数据结构和算法完整介绍(建议收藏保存)

    段树(Segment Trees) 段树是一个完整的二叉树,可以有效地回答查询,同时仍然可以轻松修改其元素。 给定数组中索引 i 上的每个元素代表一个用[i, i]间隔标记的叶子。...它基本上是使用每个元素的频率(一种散列),确定最小值和最大值,然后在它们之间迭代以根据其频率放置每个元素。它在 O(n) 中完成,空间与数据范围成正比。如果输入范围不明显大于元素数量,则它是有效的。...实际的子问题是要分别从序列 A 中的索引 i 开始,分别从序列 B 中的索引 j 中找到最长公共子序列。...在搜索当前元素之后的所有元素之间的最大值时出现了一个优化问题。我们能做的最好的事情是二分搜索最大元素。...为了找到现在已知的最大长度的子序列,我们只需要使用一个额外的数组ind[],它存储每个最大值的索引。

    2.9K31

    最大正方形(leetcode 221)

    ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。...4.1.2 复杂度分析 时间复杂度 为 O(mn * min(m,n)^2) ,其中 m 和 n 分别是矩阵的行数与列数。 需要遍历整个矩阵寻找每个 1,遍历矩阵的时间复杂度是 O(mn)。...对于每个可能的正方形,其边长不超过 m 和 n 中的最小值,需要遍历该正方形中的每个元素判断是不是只包含 1,遍历正方形时间复杂度是 O(min(m,n)^2) 。...暴力求解过程中,我们可以发现,在遍历每一个可能的最大正方形时,存在着很多重复的计算,因此我们可以使用动态规划来记录每一步骤中的中间结果,来减少重复的计算。 因此可以使用动态规划降低时间复杂度。...那么如何计算 dp 中的每个元素值呢?

    1.4K10

    牛客网剑指offer-3

    <=2*10^5 分析 先将原序列排序,然后从排完序的数组中取出最小的,它在原数组中的位置表示有多少比它大的数在它前面,每取出一个在原数组中删除该元素,保证后面取出的元素在原数组中是最小的,这样其位置才能表示有多少比它大的数在它前面...它在原数组中的位置表示有多少比它大的数在它前面, 每取出一个在原数组中删除该元素,保证后面取出的元素在原数组中是最小的, 这样其位置才能表示有多少比它大的数在它前面...(注:小朋友的编号是从0到n-1) 分析 将n个小朋友抽象成一个成环的列表,使用取模的方式求出当前m的索引值,然后弹出该索引上的元素,返回列表中的第一个元素。...当在矩阵中定位了路径中前n个字符的位置之后,在与第n个字符对应的格子的周围都没有找到第n+1个字符,这个时候只要在路径上回到第n-1个字符,重新定位第n个字符。...当在矩阵中定位了路径中前n个字符的位置之后, 在与第n个字符对应的格子的周围都没有找到第n+1个字符,这个时候只要在路径上回到第n-1个字符,重新定位第n个字符。

    93720

    前端工程师leetcode算法面试必备-二分搜索算法(中)

    有序矩阵中第K小的元素   由水平和垂直方向为递增数组的条件,可以得到当前二维空间中的左上角为最小值,右下角为最大值,所以有序数组即为最小值到最大值的整数递增序列。   ...图片 类似解题思路的还有: 【74. 搜索二维矩阵】 2、875. 爱吃香蕉的珂珂   这道题要求我们找出一个最慢吃香蕉的速度,使得在 H 小时可以吃完 N 堆香蕉。   ...找到 K 个最接近的元素   这道题要求我们找到一个起始下标 index,使得 [index, index + k) 中的数字最靠近 x 。   ...在排序数组中查找元素的第一个和最后一个位置   这道题目相对比较简单,但是它与前面题目的差异在于:搜索目标不一定存在有序数组中,那么在搜索结束后,就需要注意特殊情况的处理。   ...本系列文章会分别给出一种算法的3种难度的总结篇(简单难度,中等难度以及困难难度)。在简单难度中,会介绍该算法的基本知识与实现,另外两个难度,着重讲解解题的思路。

    35230

    8-2 图的存储结构

    8-2 图的存储结构 1.邻接矩阵(顺序存储结构) 图结构的元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储,即使用数组有效地存储图。...设G=(V, E)是有n个(n>=1)顶点的有向图,则G的邻接矩阵是具有如下性质的 n x n 矩阵: 1, 若 ∈ E A[ i, j ] = 0, 若 ∉ E 设G=(V, E)是有n个(n>=1)顶点的无向图,则G的邻接矩阵是具有如下性质的 n x n 对称矩阵: 1, 若 ( Vi, Vj ) ∈ E A[ i, j ] = A[ j,...邻接表存储图的实现方式是,给图中的每个顶点独自建立一个链表,第i个单链表中的节点包含顶点 i 的所有邻接点。 为了便于管理这些链表,通常会将所有链表的头节点存储到数组中(也可以用链表存储)。...邻接表计算顶点的出度和入度 使用邻接表计算无向图中顶点的入度和出度会非常简单,只需从数组中找到该顶点然后统计此链表中节点的数量即可。

    58830

    程序员进阶之算法练习(八十一)

    s,现在想要从字符串s中找到最长的子序列,并且该子序列不是回文串; 问,最长的子序列长度为多少; 输入: 第一行,整数 表示t个样例 (1≤≤1000) 每个样例一行,字符串s (1≤||≤50...现在我们定义矩阵和为: 对于矩阵中每一个位置,都计算一遍该位置到左上角所组成的子矩阵,将子矩阵的最大值减去最小值。...(参考链接截图) ∑=1- ∑=1- (1≤≤, 1≤≤)a[,]的最大值 − (1≤≤, 1≤≤)a[,]的最小值。 现在可以对矩阵中的元素任意调整位置,求最大的矩阵和。...按照规则,所有的子矩阵,都由这4个数字组成,因为只关注子矩阵的最大值和最小值。...1、2、3、、、m; 给出n个整数代表n个人,分别由-1、-2和正整数组成: -1表示选择所有已经有人位置的最左边,在该位置的左边坐下,如果左边已经没有位置(比如到位置1了),那么则选择放弃就坐;如果之前没有人就坐

    33920

    【运筹学】线性规划数学模型 ( 知识点回顾 | 可行解 | 最优解 | 阶梯型矩阵 | 阶梯型矩阵向量 | 基 | 基向量 | 基变量 | 非基变量 )

    {array} 可行解 : 满足约束条件的解 , 称为可行解 ; 可行域 : 所有的可行解组成的集合 , 称为可行域 ; 最优解 : 使目标函数达到最大值的可行解 , 称为最优解 ; 线性规划求解就是在...bigr) , 进行行变换 , 消元成阶梯形式 , 此时可以判断该方程组是否有解 , 如果有 , 可以将所有的解解出来 , 求解时 , 阶梯元素很关键 , 阶梯型矩阵参考 : 矩阵中每行的第一个不为零的元素...{cases} 中 一定有一个系数矩阵的子矩阵 B 是特殊的矩阵 ; B 矩阵与 A 矩阵的关系 : A 矩阵是 m \times n 维的矩阵 , m 行 , n 列 ,..., 如果 n \leq m , 那么该方程组有唯一解 , 或无解 ; 整个运筹学讨论的就是等式个数 m 少于变量个数 n , 有多个解的情况下 , 如何找出最优解 , 因此其矩阵的秩就是等式个数...; 矩阵 A 的秩是 m , 即等式个数 ; 矩阵 A 中肯定能找到一个可逆的方阵 , 矩阵 B ; 矩阵 B 是矩阵 A 中的满秩子矩阵 , 则称该 矩阵 B 是线性规划问题的一个

    2.1K00

    python 中numpy基本方法总结可以类推tensorflow

    ,如a.tolist() 创建数组:np.zeros((2,3)),或者np.ones((2,3)),参数是一个元组分别表示行数和列数 对应元素相乘,a * b,得到一个新的矩阵,形状要一致;但是允许...a是向量而b是矩阵,a的列数必须等于b的列数,a与每个行向量对应元素相乘得到行向量。...(a,b)一维 数组中最小最大元素的索引:np.argmin(a),np.argmax(a) 多个数组的对应位置上元素大小的比较:np.maximum(a,b,c,…..)返回每个索引位置上的最大值...,总共返回10个数 求余:np.mod(a,n)相当于a%n,np.fmod(a,n)仍为求余且余数的正负由a决定 计算平均值:np.mean(a) 计算最大值:amax(a, axis=None...(poly) 多项式在某点上的值:np.polyval(poly,x[n]),返回poly多项式在横轴点上x[n]上的值 两个多项式做差运算: np.polysub(a,b) Matpoltlib

    1.2K30
    领券