
算法
文章平均质量分 50
阿袁的小园子
这个作者很懒,什么都没留下…
展开
-
基于numpy的CNN实现,进行MNIST手写数字识别
主要框架来自于这篇文章:https://blog.youkuaiyun.com/qq_36393962/article/details/99354969,下面会以原文来代称这篇文章本文在原文的基础上增加了交叉熵以及mnist数据集的处理,并对卷积层反向传播更新权重的代码进行了一些相应的改动。建议先按原文脉络学习一下相关理论知识(原文讲的非常完整详细,但是个人感觉卷积层反向传播更新参数那部分有问题,卷积层更新参数的原理可参考刘建平前辈的文章),再参考下述实现代码。文章目录零、MNIST数据集读取+layer模板代码一原创 2022-05-31 12:19:40 · 2044 阅读 · 7 评论 -
python实现GRU并使用torch.nn.GRU验证正确性
用python基本语法以及torch的一些基本数据结构对GRU进行实现如下:import torchimport torch.nn as nnbs,T,i_size,h_size=2,3,4,5input=torch.rand(bs,T,i_size)h_0=torch.rand(bs,h_size)gru=nn.GRU(i_size,h_size,batch_first=True)output,h_n=gru(input,h_0.unsqueeze(0))print(output)原创 2022-04-26 10:41:37 · 1351 阅读 · 1 评论 -
python实现单层单向LSTM
用python的基本语法以及pytorch的一些数据结构实现LSTM,并用torch.nn.LSTM对我自己实现的网络的正确性进行验证,参考自https://www.bilibili.com/video/BV1jm4y1Q7uh/?spm_id_from=333.788bs,T,i_size,h_size=2,3,4,5input=torch.rand([bs,T,i_size])h_0=torch.rand(bs,h_size)c_0=torch.rand(bs,h_size)# 用官方的原创 2022-04-26 09:40:27 · 506 阅读 · 0 评论 -
快速排序(C++版)
//算法void quick(keytype k[ ],int left,int right){ int i, j; keytype pivot; if(left<right){ i=left; j=right+1; pivot = k[left]; while(1){ while(k[++i]<pivot &&原创 2021-05-29 22:46:05 · 154 阅读 · 0 评论 -
编辑距离(洛谷&牛客)
参考知乎上的这个答案,DP问题可归结为以下3个步骤确定数组的含义数组元素之间的关系数组初始化本篇文章便按以上3个步骤来说一下确定数组含义:dp[i][j]表示要把长度为i的字符串1转成长度为j的字符串2所需的最少步骤,即把word1[0~i-1]转成word2[0~j-1]所需的最少步骤数组元素之间的关系:如果word1[i-1]==word2[j-1],那么只需要把word1[0~i-2]转成word2[0~j-2]即可,所以dp[i][j]=...原创 2021-05-27 18:21:50 · 481 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
题意理解:实现带指针结构体的深拷贝。深拷贝和浅拷贝的区别主要在于拷贝一个带引用或者指针的结构体时,深拷贝会开辟一块新内存,然后让克隆体的指针或引用指向这块内存;浅拷贝则不会开辟新内存,而是让克隆体的指针或引用直接指向原内存。可以参考如何理解 C++ 中的深拷贝和浅拷贝?回到这到题目就是,拷贝一个节点时,不能仅仅把人家的val拷贝进去,random指针的指向、next指针的指向也要考虑,否则就可能出现我明明克隆体的random指针指向节点的val都对了,为什么还是报Random pointer of n.原创 2021-04-11 16:03:07 · 376 阅读 · 0 评论 -
给定一个入栈序列A和另外一个序列B,判断这个序列B是不是这个入栈序列A的出栈序列
这个问题有个名字叫做“栈混洗”,经典的不合法出栈序列是那个1,3,2出栈序列,详情请看学堂在线-数据结构(上)不过这里记录的是从编码的角度去解决栈混洗问题,题目链接:剑指offer31入栈序列是pushed,待判断的序列是popped,算法思想就是用一个辅助栈s,同时用一个变量pop_i记录出栈序列中的当前元素;遍历pushed数组,然后对于每一次入栈操作,都循环判断一次入栈的元素是不是出栈序列中的当前元素,如果是就从s中弹出该元素,并且pop_i++;遍历pushed完成后,判断s是否为空,若为空则说原创 2021-04-08 17:58:47 · 473 阅读 · 0 评论 -
洛谷P1896(状压DP)
直接说思路:先解释一下什么叫“状态”:状态也就是每一行若干个国王的摆放方案,比如棋盘为3×3,我们在第1行的第1个格放国王,第二个格不放,第三个格放,那么这一行的状态为101(即放了国王就记为1,不放国王就记为0),这种状态满足国王之间隔着至少一个空格,是合法的,所以我们称之为合法状态,这个状态转成十进制就是5;如果是第1个格和第2个格都放了1,第3个格不放,那么这一行的状态为110,两个国王挨着了,所以是不合法状态,这个状态转成十进制就是6用到的关键数据结构:state数组:存每一行合法的原创 2021-03-25 00:07:47 · 359 阅读 · 0 评论 -
洛谷P1577 切绳子题解
洛谷P1577切绳子1.先来理解一下题意,所谓的k段,并不是刚好切成k段,而是至少可以切成k段,然后看这些切出来的等长的绳子长度最多可以是多少2.思路:二分,left=0,right=单段绳子的最大长度,每次用mid=(left+right)>>1,这个mid值去计算,总共可以切成多少段长度为mid的小绳子,记这个数量为cnt;如果cnt<k,说明mid太大,需要减小;如果cnt>=k,说明按mid来切割的话,可以切成至少k段长度为mid的小绳子,于是用ans记录这个mid值,然原创 2021-03-10 19:30:43 · 1361 阅读 · 1 评论 -
2~36进制之间大数的转换
转换的原理参考:九度OJ 十进制VS二进制核心代码如下,包括两个初始化函数,1个判断函数,1个转换函数//把int转成char,用于输出map<int,char> mp;//把char转成int,用于计算map<char,int> mpci;void init(){ for(int i=0;i<10;i++){ mp[i]='0'+i; } for(int i=10;i<36;i++){ mp[i]='原创 2021-03-08 01:23:06 · 257 阅读 · 0 评论 -
洛谷P2758的空间优化
主要参考的是这个回答:知乎#include <bits/stdc++.h>using namespace std;string a,b;const int maxn=2005;int dp[maxn];int main(){ cin>>a>>b; int lena=a.size(); int lenb=b.size(); for(int i=0;i<=lenb;i++){ dp[i]=i; }原创 2021-03-04 13:31:24 · 159 阅读 · 1 评论 -
完全背包主要代码解析
完全背包的状态转移方程:代码解释:先说明一下,没有经过空间优化的DP数组是二维的,dp[i][j]表示遍历到前i个物品,且总的空间消耗为j时候的最大价值经过空间优化后,dp数组是一维的,dp[j]表示总的空间消耗为j时的最大价值#include <bits/stdc++.h>#define maxn 10005#define maxv 10000005using namespace std;int V,n;long long c[maxn];//第i种物品的空间花费原创 2021-03-02 23:55:11 · 284 阅读 · 0 评论 -
洛谷P1174打砖块
主要参考自:https://www.cnblogs.com/lee454207074/p/11613962.html文章目录1.思路解释1.思路解释借子弹:就是比如我给前i-1列分配了j-p颗子弹,给第i列分配了p颗子弹,但是实际上由于Y砖块的存在,我可以让前i-1列借几颗(记为x)子弹给第i列,这样第i列就可以用p+x颗子弹了,然后我一直打第i列的砖块,打完这p+x颗子弹后,由于打到了一些Y砖块,所以就还剩x颗子弹,然后再还给前i-1列s_image[i][cnt]:用cnt颗子弹(包括从其它列原创 2021-01-27 23:00:04 · 357 阅读 · 0 评论 -
THU2020年考研机试题解
有一些题目我做不来,暂时也没搜到令人满意的答案,欢迎评论区补充呀文章目录20201.统计次数1.1题目来源1.2 AC代码2.等差数列2.1题目来源2.2 代码(待完善)20201.统计次数时间限制: 1.0 秒空间限制: 512 MB题目描述给定两个正整数 n 和 k(1≤k≤9),求从 1 到 n 这 n 个正整数的十进制表示中 k 出现的次数。输入格式从标准输入读入数据。输入的第一行包含两个正整数 n 和 k,保证 n≤106 和 1≤k≤9。输出格式输出到标准输出。输出一个原创 2021-01-06 00:26:23 · 816 阅读 · 1 评论