算法学习
宇宙第一大咸鱼
这个很懒,什么都没留下
展开
-
回溯算法的概述 & 77. 组合
回溯通常存在于递归的下面,是一种纯暴力搜索核心就是搜索问题可以抽象为树结构集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。递归就要有终止条件,所以必然是一颗高度有限的树(N叉树)。lc 77看这个概述就非常容易写出来了,题目是给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。在做这道题的时候我出了bug,原因是在循环里我一直放的是一个变量。改了一个小时,和昨天的函数名写错有异曲同工之妙。专门写篇文章强调一下原创 2021-12-30 12:40:04 · 146 阅读 · 0 评论 -
由leetcode39. 组合总和看搜索去重问题 & 搜索排列组合(排列组合去重总结)
由leetcode39. 组合总和看搜索去重问题 & 搜索排列组合今天一刷随想录,把组合一起做完了,有一些个人的想法,顺便好像是也思考到了排列,因为还没做排列题等做完排列再来修改这篇文章。先来看一下lc39题目给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复原创 2021-12-29 17:57:40 · 190 阅读 · 0 评论 -
由leetcode39. 组合总和看搜索去重问题 & 搜索排列组合
由leetcode39. 组合总和看搜索去重问题 & 搜索排列组合今天一刷随想录,把组合一起做完了,有一些个人的想法,顺便好像是也思考到了排列,因为还没做排列题等做完排列再来修改这篇文章。先来看一下lc39题目给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复原创 2021-12-29 17:53:59 · 509 阅读 · 0 评论 -
神经网络反向传播为什么快
神经网络反向传播为什么快为什么从后往前算梯度而不是从前往后算梯度?首先要有链式法则的认知。然后举个最简单的例子,每个神经元都会有激活函数,当系数(比如w)更新,根据链式求导法则,最终的loss对w求导可以拆解成loss对激活函数求导,然后激活函数对w(当然也不一定是直接求的)求导.这个时候你会发现无论w怎么变。你的激活函数不可能再改变了。这个时候loss对于激活函数的求导是个确定值。如果存下来,那不是需要就能用?所以假设现在求w0的偏导,从后往前求导,把后面结果存下来。当对w1求偏导的时候,loss对激原创 2021-07-30 10:16:07 · 347 阅读 · 1 评论 -
1-n中整数1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。样例输入: 12输出: 5参考了acwing邓泽军大佬的代码,理解了一下:首先,对于数字111,在百位是1的时候统计一遍,在十位是1的时候统计一遍,在个位是1的时候统计一遍。找数字之间的分界线:可以看到1x和2x的规律明显不同,可以理解为到2进位。对于一个数字abcde固定数字c :情况1:前面有0到ab-1共a原创 2021-02-23 06:32:57 · 175 阅读 · 0 评论 -
砝码称重——多重背包的二进制优化
利用二进制思想:比如10 用二进制拆可以拆分为 1 2 4 3(其实三进制也可以,但是会难写的多,同样是10,三进制要 1 1 3 5,不可以是1 3 6,因为用三进制表示2的时候,是1 1!)注意这里不是1 2 4 8。我们是要写代码的,虽然是二进制表示(其实就是把大一点的数用类似二进制的方法拆分为多类),但不要拘泥于 1 2 4 8假设我们1g的砝码有s个,那我们的代码就是s - 1 - 2 - 4 - 8 ,减到不可以再减。下面是代码#include <stdio.h>原创 2020-09-23 18:02:20 · 387 阅读 · 0 评论 -
关于01背包空间优化的理解(二维数组转一维数组)
昨天学习了01背包,对于他的二维数组转一维数组不是很能够理解。今天专门记录一下。我们知道01背包的状态转移方程是f[i][j]=max(f[i-1][j],f[i-1][j-v[i]+w[i])其中i表示第i个物品,j表示第i个物品放上去时当前背包的体积。故j-v[i]表示的是i-1状态时背包占用的体积。那为什么一维数组的状态转移方程是f[j]=f[j-v[i]+w[i])(j从v到v[i])呢?里面的f[j]代表的是i状态下的体积是j,如何保证j-v[i]是i-1状态下的体积呢?答案就原创 2020-09-23 09:37:04 · 307 阅读 · 0 评论 -
砝码称重——空间优化01背包
空间优化01背包在之前的文章中我们采用二维数组去存,但实际上可以通过一维数组存。首先,我采用了另一种方式去存背包,这是动态转移方程flag[i][j] = flag[i - 1][j] + flag[i - 1][j - weight[i]];其中代表的是前i个砝码达到重量为j的状态共有flag[i][j]种方法。我个人的想法是把二维数组的最后结果都移动在一起了,可以脑补一个格子图,把最终的结果全部填在第一行的感觉。就是说用后面的状态去覆盖前面的状态。这样要求我们是倒着存的,因为如果正着存,前面原创 2020-09-22 16:33:41 · 132 阅读 · 0 评论 -
砝码称重问题——未经优化的01背包解法
题目连接 洛谷P2347题目描述设有1g1g1g、2g2g2g、3g3g3g、5g5g5g、10g10g10g、20g20g20g的砝码各若干枚(其总重≤1000 ),输入格式输入方式:a1,a2,a3,a4,a5,a6a_1 , a_2 ,a_3 , a_4 , a_5 ,a_6a1,a2,a3,a4,a5,a6(表示1g1g1g砝码有a1a_1a1个,2g2g2g砝码有a2a_2a2个,…,20g20g20g砝码有a6a_6a6个)输出格式输出方式:Total=N(N表原创 2020-09-22 15:03:32 · 426 阅读 · 0 评论