3. 脉冲神经网络
好久之前第一次写的时候完全对第三题没感觉,提交上去得了个0 分…
这次自己再写了一遍,花的时间不多,写的时候感觉逻辑也不是特别难。最后是超时了,感觉第三题开始涉及到优化了,不仅仅是暴力模拟就可以拿分了,下面先贴上自己写的 66 分代码
#include<bits/stdc++.h>
using namespace std;
const int M = 100010;
//const int M = 100;
int N, S, P, T; //N个神经元, S个突触, P个脉冲源, T时刻
double deltaT; //间隔时间
struct cell{
double u, v;
double a, b, c, d;
};
struct edge{
int from;
int to;
double w;
int D;
};
double r[2 * M]; //存放脉冲源的r信息
cell neuron[M]; //定义一个神经元数组
edge synapse[M]; //定义一个脉冲数组
double timePulse[M][1010]; //在每个时刻,哪些神经元收到了多少信号
unordered_set<int> sendPulse; //记录当前时刻会发送脉冲的编号
int res[M];
static unsigned long next_1 = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next_1 = next_1 * 1103515245 + 12345;
return((unsigned)(next_1/65536) % 32768);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N >> S >> P >> T >> deltaT;
int cnt = 0, Rn;
while(cnt < N){
double v, u, a, b, c, d;
cin >> Rn >> v >> u >> a >> b >> c >> d;
for(int i = cnt; i < cnt + Rn; i ++){
neuron[i].a = a; neuron[i].b = b; neuron[i].c = c; neuron[i].d = d;
neuron[i].v = v; neuron[i].u = u;
}
cnt += Rn;
}
for(int i = 0;i < P; i ++){
//输入脉冲源信息
cin >> r[i + N];
}
for(int i = 0;i < S; i ++){
//输入突触信息
cin >> synapse[i].from >> synapse[i].to >>synapse[i].w >> synapse[i].D;
}
double MAXV = -1 * 0x3f3f3f3f, MINV = 0x3f3f3f3f;
for(int t = 1;t <= T; t ++

本文介绍了一种优化脉冲神经网络算法,重点在于时间和空间效率的改进。通过使用邻接表存储突触信息,以及对时间Pulse数组的滚动数组设计,解决了代码在大规模数据下的超时问题,最终实现66分代码向满分代码的升级.
最低0.47元/天 解锁文章
336

被折叠的 条评论
为什么被折叠?



