线性

同余方程(求逆元,线性同余方程最小解

淺唱寂寞╮ 提交于 2020-04-06 02:32:43
# 题意 给定a,b,求出关于方程ax ≡ 1 (mod b) 的最小x 输入保证了一定有解 2 ≤ a,b ≤ 2*10 9 # 题解 ax ≡ 1 (mod b) ax+by=1 通解的表示: x = x 0 + b * k y = y 0 - a * k 所以x 0 % b就是x能取到的最小值 最后要取正余数常用技巧:模以后加上模的数再模一次 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll a,b; 5 ll exgcd(ll a,ll b,ll &x,ll &y){ 6 if(b==0){ 7 x=1;y=0; 8 return a; 9 } 10 ll d =exgcd(b,a%b,y,x); 11 y-=a/b*x; 12 } 13 int main(){ 14 cin>>a>>b; 15 ll x,y; 16 exgcd(a,b,x,y); 17 cout<<(x%b+b)%b<<endl; 18 } 来源: https://www.cnblogs.com/hhyx/p/12640304.html

Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 3. 浅层神经网络)

Deadly 提交于 2020-04-02 05:51:17
=================第3周 浅层神经网络=============== ===3..1 神经网络概览=== ===3.2 神经网络表示=== ===3.3 计算神经网络的输出===   方括号代表层数。 ===3.4 多个例子中的向量化=== ===3.5 向量化实现的解释===    方括号值的是层数,括号代表样本编号。ppt中显示的,不同row代表某一层的hidden unit,不同列代表各个样本,挺形象的呀,有趣。 ===3.6 激活函数===   tanh几乎各方面都比sigmoid好,此时激活函数的平均值就更接近0,这实际上让下一层的学习更方便一点,我们会在下一周详细讨论原因。我几乎不用 σ 激活函数了,一个例外是在输出层。这两个激活函数都有一个缺点,就是z太大或太小时梯度会变很接近0,这将导致学习速度很慢。今天大多数人用的都是Relu,虽然有时人们也会用tanh。Relu的一个缺点是负数部分导数0,但实际证明这并没有什么大问题。Relu is increasingly the default choice of activation function so if you're not sure what to use for your hidden layer,我就用ReLU作为激活函数。Leaky Relu中负轴部分的斜率通常是0.01

三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法

末鹿安然 提交于 2020-03-30 01:35:43
线性插值 先讲一下线性插值:已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值(反过来也是一样,略): y − y 0 x − x 0 = y 1 − y 0 x 1 − x 0 y = x 1 − x x 1 − x 0 y 0 + x − x 0 x 1 − x 0 y 1 上面比较好理解吧,仔细看就是用x和x0,x1的距离作为一个权重,用于y0和y1的加权。双线性插值本质上就是在两个方向上做线性插值。 双线性插值 在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值[1]。见下图: 假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。 最常见的情况,f就是一个像素点的像素值 。首先在 x 方向进行线性插值,得到 然后在 y 方向进行线性插值,得到 综合起来就是双线性插值最后的结果: 由于图像双线性插值只会用相邻的4个点,因此上述公式的分母都是1。opencv中的源码如下,用了一些优化手段,比如用整数计算代替float(下面代码中的*2048就是变11位小数为整数,最后有两个连乘,因此>>22位)

汉诺塔线性问题

你。 提交于 2020-03-28 18:21:31
def hannota(n, a, c, b): if n==1: print('{}:{}->{}'.format(1,a,c)) else: hannota(n-1,a,b,c) print('{}:{}->{}'.format(n,a,c)) hannota(n-1,b,c,a) def main(): A='A' B='B' C='C' N=eval(input()) hannota(N,A,C,B) main() 来源: https://www.cnblogs.com/qq1294/p/12588449.html

Codeforces Round #618 部分题解

时光总嘲笑我的痴心妄想 提交于 2020-03-21 20:13:52
A,B 咕了。 C - Water Balance 先考虑最小化第一个位置。考虑包含第一个位置的最后一次操作 \(a\) ,以及前一次和他有交集的操作 \(b\) 。容易看出操作 \(b\) 如果不被 \(a\) 包含就不优,而既然被包含了就可以删掉。 所以可以证明第一次操作必然包含第一个位置,并且以后的操作不会再包含第一个位置。 如果第一次是 \([1,r]\) ,那么显然 \([2,r]\) 的数不会再变小,因为如果还能变小就说明第一次操作不是最优的。 所以就是每次操作一个前缀之后就删掉。显然建出 \((i,sum_i)\) 的凸包就完事了。 代码: https://codeforces.com/contest/1299/submission/73880533 D - Around the World 众所周知,环的权值可以拆成若干个关于dfs树的环的权值异或和。 既然是异或,那么显然一个连通块贡献的异或值应该被存在一个线性基内。 考虑一个与1相连的连通块。如果只有一条边相连,那么断掉就贡献空集,连上就贡献连通块内的线性基。如果有两条边 \((1,u),(1,v)\) 相连,那么可以贡献空集、连通块内的线性基、再带上一个 \((1,u)\oplus (1,v)\oplus (u,v)\) 的线性基。 爆搜可以发现本质不同的线性基只有374种,并且可以预处理两个线性基合并的结果

线性筛法(欧拉筛法)求素数

孤者浪人 提交于 2020-03-21 14:05:57
写$\text{O}\left( n \log{\log{n}}\right)$的筛法很长时间了,我却从来没想过它的优化.偶然间看到线性筛法,心想大约是不错的优化,于是便爬去学习下. 首先,$\text{O}\left( n \log{\log{n}}\right)$的筛法肯定要比$\text{O}\left( n\right)$的慢,虽然在现在的机子上不明显.还是不要将$\text{O}\left( n \log{\log{n}}\right)$比较靠谱.但是线性筛法有着它自己的用途. 先发个普通筛法 #include <cmath> bool sieve[1000000]; int prime[1000000],ps,temp,temp2,temp3; void normal_sieve(int n){ temp=sqrt(n)+10; for(i=2;i<temp;++i){ if(!sieve[i]){ prime[ps++]=i; temp2=(n/i)+1; temp3=i; for(j=2;j<=temp2;++j){ temp3+=i; sieve[temp3]=true; } } } for(;i<=n;++i){ if(!sieve[i]){ prime[ps++]=i; } } }//包含了几乎所有有用功能的普通筛法 (orz神犇WJZ先)

精髓——高度概括几种页框到线性地址的映射技术

巧了我就是萌 提交于 2020-03-20 23:19:13
3 月,跳不动了?>>> 第一种:就是页框到线性地址的一 一映射关系。这是在分页阶段,已经建立好的(这部分我可以深入讲一下,但是这部分内容不是很难,而且我的肩膀好酸痛,就不写了,以后在补上),就是为物理内存前896M的每个页框建立页表,并写进页表项。当进程请求这部分内存时,可以直接访问到这些页表,而不并现场创建页表。 第二种:高端内存永久内核映射。就是上一篇博文讲到的。这种技术的映射可以阻塞进程,使进程去睡眠。 第三种:临时内核映射。其实道理差不多。任何一个页框与权限合成的页表可以写进预留的几个页表项中,但这种技术是不能阻塞的内核映射技术,因此可以用到中断处理函数和可延迟函数中。 第四种:非连续内存映射技术。用slab分配器分配线性区描述符,然后在非连续内存区找到一块空闲的线性区。然后把申请到的每一个零散的物理页框描述符和权限合成页表,并将此页表写到查找到的线性区对应的页表项中。(其实道理都是差不多的,只要领悟了上一篇博文写的永久内核映射思想,那么此种技术的思想也是一样的:查找物理页框,(合成页表,写进页表项,返回线性地址) 后3种技术会重写页表,导致tlb中的页表无效。 大道至简,只要记住以下几句话那么面对各种映射技术就不会恐慌: 查找页框,合成页表,写进页表项,返回页表项的线性地址 以后几篇的更新会涉及物理内存页框的分配。内核的映射就写到这里 来源: oschina 链接:

基、维数

守給你的承諾、 提交于 2020-03-14 11:14:59
基 基是生成一个向量空间的最小向量组。 它们: 线性无关 个数不多不少,刚好生成向量空间 如一个 \(R^3\) 的基: \[ \left[ \begin{matrix} 1\\0\\0\\ \end{matrix} \right], \left[ \begin{matrix} 0\\1\\0 \end{matrix} \right], \left[ \begin{matrix} 0\\0\\1 \end{matrix} \right] \] 当然这不是唯一的,任意满足上面两点的都可以是一组基。 所以 \(R^n\) 的基一定是 \(n\times n\) 的,并且这个矩阵必须可逆。(可逆的条件不正是零空间中只有零向量嘛,这不又正是线性无关嘛,这下可以串联起来了) 维数 维数就是基中的向量个数 所以我们把知识串联起来: 矩阵列的线性组合的空间的基的个数 = 该矩阵列空间的维数 = 该矩阵的秩的个数 = 矩阵中线性无关列(主列)的个数 其实同样等于行的,这是个特性,只不过Gilbert Strang老爷子还没讲到 那零空间的维数是啥?? \(n-r\) ,矩阵列数减去秩数 这很显而易见 参考资料 MIT线性代数公开课 p9 - bilibili 来源: https://www.cnblogs.com/lilpig/p/12490983.html

乘法逆元的线性筛法

ⅰ亾dé卋堺 提交于 2020-03-03 10:43:20
目录 目录地址 上一篇 下一篇 线性求逆元题型 对于已知模数 \(m\) ,求出在模 \(m\) 意义下, \(1\) ~ \(n\) 的逆元 ( \(n\leq m-1\) ) \(n\) 较大,只支持 \(O(n)\) 复杂度的算法 (一般保证 \(m\) 是质数,否则有的数不存在逆元) 线性算法 \(O(n)\) 由递推的方法 \(O(n)\) 考虑模 \(m\) 意义下 \(1^{-1}\equiv 1(\mod m)\) 考虑求 \(n\) 的逆元,可知 \(m=\lfloor{m\over n}\rfloor\cdot n+(m\mod n)\) 记 \(a=m/n,b=m\%n\) 则 \(m=an+b,0\leq b<n\) 因此 \(an+b\equiv 0(\mod m)\) 方程两边乘上 \(n^{-1}\) 得到 \(a+b\cdot n^{-1}\equiv 0(\mod m)\) \(n^{-1}\equiv -a\cdot b^{-1}(\mod m)\) 即 \(n^{-1}\equiv -\lfloor{m\over n}\rfloor\cdot (m\mod n)^{-1}(\mod m)\) inv[1]=1; for(int i=2;i<=n;i++){ inv[i]=m-m/n*inv[m%n]%m; } 线性筛法 \(O(n)\)