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

(粗糙的笔记)动态规划

,i},背包容量c 输出:最大总价格P //初始化,创建二维数组P和Rec for i <- 0 to C do | P[0,i] <- 0 end for i <- 0 to n do | P[i,0...伪代码: 输入:两个序列X,Y 输出:X和Y的最长公共子序列 n <- length(X) m <- length(Y) //初始化 新建二维数组C[n,m]和rec[n,m] for i <- 0 to...p_{max} 最长公共子串长度 l_{max} 伪代码 输入:两个字符串X,Y 输出:X和Y的最长公共子串 //初始化 n <- length(X) m <- length(Y) 新建二维数组...伪代码 输入:钢条价格表p[1..n],钢条长度n 输出:最大收益C[n],钢条切割方案 //初始化 新建一维数组C[0..n],rec[0..n] C[0] <- 0 //动态规划 for...Rec 新建二维数组D[1..n,1..n],Rec[1..n,1..n] //初始化 for i <- 1 to n do | D[i,i] <- 0 end //动态规划 for l <- 2 to

27940

前端也能学算法:由浅入深讲解动态规划

输出最佳方案 上面的动态规划虽然计算出来最大值,但是我们并不是知道这个最大值对应的切割方案是什么,为了知道这个方案,我们还需要一个数组来记录切割一次时左边的长度,然后在这个数组中回溯来找出切割方案。...回溯的时候我们先取目标值对应的左边长度,然后右边剩下的长度又继续去这个数组找最优方案对应的左边切割长度。...因为c(i, j)里面有两个变量,我们需要一个二维数组才能存下来。注意这个二维数组的行数是X的长度加一,列数是Y的长度加一,因为第一行和第一列表示X或者Y为空串的情况。...为了记录操作我们需要一个跟result二维数组一样大的二维数组,每个格子里面的值是当前值是从哪里来的,当然,第一行和第一列仍然是0。每个格子的值要么从斜上方来,要么上方,要么左方,所以: 1....还是上我们的动态规划方案吧,跟前面类似,需要一个二维数组来存放每次执行的结果。

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

    AI入门之数据处理(Numpy指南)

    需要注意逆序的起始位置不是0(这个很明显) 对于二维数组的情况,假设我们有个 x2, array([[3, 5, 2, 4], [7, 6, 8, 8], [1, 6, 7,...二维数组的子串操作类似,下面举几个例子 首先定义个二维数组 x2 -> array([[12, 5, 2, 4], [ 7, 6, 8, 8], [ 1, 6..., 7, 7]]) 取第一维的前两个维度,每个维度取前三个元素做子串 x2[:2, :3] -> array([[12, 5, 2], [ 7, 6, 8]]) 取第一维度前三个...另一种转换维度的方法是用上面切割子串的 (:) 操作符, 比如我们有一个一维数组,想转换成二维数组, x = np.array([1,2,3]) numpy提供了个关键词 newaxis,可以在进行子串切割的时候指定新增维度...合并一个一维数组和一个二维数组, x = np.array([1, 2, 3]) grid = np.array([[9, 8, 7], [6, 5, 4]]) 合并不同维度数组的前提是在长度一样的维度上进行合并

    1.1K20

    使用numpy处理图片——图片切割

    在《使用numpy处理图片——滤镜》和《用numpy处理图片——模糊处理》中,我们认识到对三维数组使用dsplit方法按第3维度(深度)方向切分的方法。...本文我们将介绍如何进行第一和第二维度切分,来达到图片切割的效果。 上下切分 上下切分也是按第一维度切分,使用的是vsplit方法。...img) topBottom = np.vsplit(data, 2) top = topBottom[0] bottom = topBottom[1] 上面我们给vsplit第二个参数传递的是2,即将数组按第一维度切分为上下...左右切分 我们分别对之前切分的上下两部分,进行第二维度切分,使用的是hsplit方法。我们给hsplit第二个参数传递的是2,也就是说我们要将其切分成左右两部分。...、上右、下左和下右四部分。

    21710

    面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、秤砝码、最长公共子串、切割钢条、最长不下降子序列、最优二分搜索树、矩阵链

    例如,在某些二维DP问题中,我们只需要前一行的结果,可以使用两个一维数组来交替更新,或使用一个一维数组从后向前更新 滚动数组优化:当状态转移只依赖于前一状态或固定的几个前一状态,可以使用滚动数组(Rolling...Array)技巧,将二维数组降维成一维数组,从而节省空间 使用二维数组的场景: 状态与两个变量有关:如果问题的状态与两个变量有关,并且状态转移依赖于这两个变量的值,那么使用二维数组是更自然的选择。...可以的,在计算$dpi$时,只需要用到上一行$dpi-1$的值,因此可以使用滚动数组进行优化,将二维数组降为一维数组。...dp数组的长度是什么?dp数组的类型是什么?dp数组的第一个元素,即dp0是什么?状态转移方程是什么?此题还是很有难度的。...i的钢条的最大收益 int[] cuts = new int[n + 1]; // cuts[i]表示长度为i的钢条的第一次切割长度 for (int j = 1; j <= n; j++) {

    16510

    Numpy详解-轴的概念

    0号, 其次开始从左到右依次的放置 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。...在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。...所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。...为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性。...其实进一步的,是阐述了一种方向的问题:在二维数组中axis=0是按列的,axis=1意味着按行。 这个图太漂亮了 事实上,到这里的时候还是没有说明白主要的轴到底是怎么出来的,那继续。

    1K30

    Pytorch | 《卷积神经网络》之二维卷积

    2 卷积在图像中的简单应用 3 本文小结 4 参考文献 正文开始 1 如何计算卷积 二维卷积其实就是一个二维数组和一个二维核(kernel)数组之间的互相关运算,然后得到一个新的二维数组的过程。...如上图所示,输入是一个3x3的二维数组,卷积使用的核采用的是一个2x2的数组,该数组在卷积计算中,又被称为卷积核或者过滤器,它的大小主要取决于这个数组的行数和列数。...上图中阴影部分为第一个输出元素及其计算所使用的输入和核数组元素,即:‍‍0×0+1×1+3×2+4×3=19。‍‍...在上述计算过程中,卷积核从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。...3 本文小结 1、 二维卷积层的核心计算是二维互相关运算。在最简单的形式下,它对二维输入数据和卷积核做互相关运算然后加上偏差。 2、可以设计卷积核来检测图像中的边缘。

    2K31

    NumPy 1.26 中文官方指南(三)

    在 NumPy 中的数组赋值通常存储为 n 维数组,只需要最小类型来存储对象,除非你指定维数和类型。NumPy 执行元素按元素的操作,所以用*来乘以 2D 数组不是矩阵乘法 - 这是元素按元素的乘法。...1xn 或 nx1)或 1D NumPy 数组 a(长度 n)中的最后一个元素 a(2,5) a[1, 4] 访问二维数组 a 中第二行第五列的元素 a(2,:) a[1] 或 a[1, :] 二维数组...PyTorch 数组通常被称为 张量。张量类似于 NumPy 的 ndarrays,只是张量可以在 GPU 或其他硬件加速器上运行。...PyTorch 数组通常被称为张量。张量类似于 NumPy 的 ndarray,只不过张量可以在 GPU 或其他硬件加速器上运行。...PyTorch 数组通常被称为张量。张量类似于 NumPy 的 ndarrays,唯一的区别在于张量可以在 GPU 或其他硬件加速器上运行。

    38310

    JavaScript基础语法(一)

    虽然创建数组时,指定了长度,但实际上数组都是变长的,也就是说即使指定了长度为8,仍然可以将元素存储在规定长度以外。...2、数组长度属性 使用array.length属性来获取数组的长度,因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1;同时,在JavaScript中数组的length属性是可变的...3、二维数组 在JavaScript中,二维数组用myarray[x][y]来表示,声明二维数组有两种方式: 方式一: 1var myarr=new Array(); //先声明一维 2for(var...i=0;i维长度为2 3 myarr[i]=new Array(); //再声明二维 4 for(var j=0;j二维长度为3 5...对象的属性:反映该对象某些特定的性质的,如:字符串的长度、图像的长宽等; 对象的方法:能够在对象上执行的动作。

    75620

    【深度学习实验】卷积神经网络(一):卷积运算及其Pytorch实现(一维卷积:窄卷积、宽卷积、等宽卷积;二维卷积)

    一、实验介绍 本文主要介绍了卷积运算及其Pytorch实现,包括一维卷积(窄卷积、宽卷积、等宽卷积)、二维卷积。...通过将文本或时间序列数据转换成二维形式,可以利用卷积神经网络进行相关任务的处理。 1. 一维卷积 a. 概念 一维卷积是指在一维输入数据上应用滤波器(也称为卷积核或核)的操作。...分类 卷积的结果按输出长度不同可以分为三类: 窄卷积(Narrow Convolution) 步长 = 1,两端不补零 = 0 卷积后输出长度为 − +1 宽卷积(Wide Convolution...二维卷积 a. 概念 二维卷积是一种常用的图像处理操作,它可以应用于二维图像或矩阵数据上。在二维卷积中,我们使用一个称为滤波器或卷积核的小矩阵对输入数据进行扫描和计算。...滤波器(卷积核):一个小的二维矩阵,用于扫描输入数据并执行卷积操作。滤波器的大小通常是正方形,例如3x3、5x5等。 步幅(stride):指定滤波器在输入数据上滑动的步长。

    75220

    NumPy的广播机制

    广播(Boardcasting)是NumPy中用于在不同大小的阵列(包括标量与向量,标量与二维数组,向量与二维数组,二维数组与高维数组等)之间进行逐元素运算(例如,逐元素 加法,减法,乘法,赋值等)的一组规则...NumPy在广播的时候实际上并没有复制较小的数组; 相反,它使存储器和计算上有效地使用存储器中的现有结构,实际上实现了相同的结果。...二、广播(Broadcasting)的机制让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐输出数组的shape是输入数组shape的各个轴上的最大值如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为...1时,这个数组能够用来计算,否则出错当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值简单来说,我总结为两条规则:两个array的shape长度与shape的每个对应值都相等的时候,那么结果就是对应元素逐元素运算...shape长度不相等时,先把短的shape前面一直补1,直到与长的shape长度相等时,此时,两个array的shape对应位置上的值 :1、相等 或 2、其中一个为1,这样才能进行广播。

    2K40

    初识C语言二维数组

    1.二维数组的定义 二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。...该数组的下标变量共有3×4个,即: image.png 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。...另一种是按列排列, 即放完一列之后再顺次放入第二列。 在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。...下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。...二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

    2.8K40

    C++小议二维数组

    省略第一维的定义, 但不能省略第二维的定义 系统能够根据初始化元素的个数和第二维的长度来确定第一维的长度。...一般, 省略第一维定义时, 第一维的大小按如下规则确定: a.初值个数能被第二维整除, 所得的商就是第一维的大小; b.若不能整除, 第一维的大小为商再加 1。...二维数组的初始化: 和一维字符数组一样, 二维字符数组也可以在定义时初始化, 如: 将二维字符数组图示展开如下(二维字符数组a, 3行10列): 3>....二维字符数组的使用 由于在二维字符数组每个字符串单独占一行, 所以可以用 a[n] 引用该二维数组字符中第 n 行的字符串, 也可以用 a[i][j] 引用某行某列中的单独一个字符串。...示例: 输入二维字符数组中每行中的字符串 C++语言对数组的维数没有限制, 因此你还可以根据一维和2维的规律使用 3 维数组或更高维的数组, 但是在高维数组上的处理比较难理解, 不熟练的情况下容易出错

    1.1K20

    Numpy库

    如果是多维的(这里以二维为例),那么在中括号中,给两个值,两个值是通过逗号分割的,逗号前面是行,逗号后面是列。如果中括号中只有一个值,那么就是代表的是行。...print(hs4) vs4=np.split(vs1,4,axis=0) #水平切割 print(vs4) 总结: hsplit代表在水平方向切割,按列进行切割的。...它的切割方式有两种,第一种就是直接指定平均切割成多少列,第二种就是指定切割的下标值。 vsplit代表在垂直方向切割,按行进行切割的。它的切割方式跟hspilt是一样的。...split/array_split是手动的指定axis参数,axis=0,代表按行切割,axis=1,代表按列进行切割。 # 数组(矩阵)转置和轴对换 numpy中的数组其实就是线性代数中的矩阵。...比如现在有一个二维的数组: x = np.array([[0,1],[2,3]]) 求x数组在axis=0和axis=1两种情况下的和: >>> x.sum(axis=0) array([2, 4]

    3.7K20

    深度学习中关于张量的阶、轴和形状的解释 | Pytorch系列(二)

    文 |AI_study 今天是《高效入门Pytorch》的第二篇文章,上一篇我们讲解到《张量解释——深度学习的数据结构》。 在这篇文章中,我们将深入研究张量,并介绍三个基本的张量属性,阶,轴和形状。...这意味着以下所有内容: 我们有一个矩阵 我们有一个二维数组 我们有一个二维张量 我们在这里介绍阶(rank)这个词,是因为它通常用于深度学习中,指的是给定张量中存在的维数。...每隔一个轴将包含n维数组。这就是我们在这个例子中看到的,但是这个思想是通用的。 张量的阶告诉我们一个张量有多少轴,这些轴的长度使我们得到一个非常重要的概念,即张量的形状。...注意,在PyTorch中,张量的大小和形状是一样的。 3 x 3的形状告诉我们,这个2阶张量的每个轴的长度都是3,这意味着我们有三个沿着每个轴可用的索引。现在让我们看看为什么张量的形状如此重要。...这将为我们提供一个沿第一个轴的数组和沿第二个轴的九个数字。

    3.2K40

    C++二维数组 | 二维数组输出0-6

    在C++中,我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 C++中二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。...C++二维数组的引用 上一节一维数组中小林已经讲过,在C++中数组必须先定义,然后才能使用,而且只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。 ...C++二维数组的初始化 分行给二维数组赋初值: int array[2][3]={{1,2,3},{4,5.6}}; 可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值: int array...int array[2][3]={{1},{2}}; 可以对各行中的某一元素赋初值:  int array[2][3]={{1},{4,5,6}} 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定..., 但第二维的长度不能省: int array[][3]={{1,2,3},{4,5.6}}; C++在定义数组和引用数组元素时采用:数组名,这种两个方括号的方式,对数组初始化时十分有 用,它使概念清楚

    8052828

    6.2 二维数组

    01二维数组的定义 1、一般形式 类型说明符 数组名[常量表达式][常量表达式] 2、例子 int a[10][6],b[3][4]; 3、用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系...02 二维数组的引用 1、引用形式 数组名[下标][下标] 2、在引用数组元素时,下标值应在已定义的数组大小的范围内。...3、例子 int a[3][4]; 定义a为3*4的二维数组 4、按以上定义,数组a课用的下标范围为0~2,“列下标”的范围为0~3,。用a[3][4]表示元素显然超过了数组的范围。...03 二维数组的初始化  1、为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。 2、分行给二维数组赋初值。...例子: int a[3][4]={{1},{2},{3}}; 5、如果对全部元素都赋值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。

    6773127

    6.2 二维数组

    01 二维数组的定义 1、一般形式 类型说明符 数组名[常量表达式][常量表达式] 2、例子 int a[10][6],b[3][4]; 3、用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系...02 二维数组的引用 1、引用形式 数组名[下标][下标] 2、在引用数组元素时,下标值应在已定义的数组大小的范围内。...3、例子 int a[3][4]; 定义a为3*4的二维数组 4、按以上定义,数组a课用的下标范围为0~2,“列下标”的范围为0~3,。用a[3][4]表示元素显然超过了数组的范围。...03 二维数组的初始化 1、为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。 2、分行给二维数组赋初值。...例子: int a[3][4]={{1},{2},{3}}; 5、如果对全部元素都赋值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。

    5413129
    领券