上篇

文章目录

  • 任意模数NTT
    • Description
    • Solution
  • 分治NTT
    • Description
    • Solution
  • 多项式求逆
    • Description
    • Solution
  • 多项式除法
    • Description
    • Solution
  • 多项式ln(对数函数)
    • Description
    • 前置芝士
      • 导数
      • 积分
    • Solution
  • 多项式牛顿迭代
    • Description
    • 前置芝士: 泰勒展开
    • Solution
    • 应用
  • 多项式开根
    • Description
    • Solution
  • 多项式exp(指数函数)
    • Description
    • Solution
  • 多项式快速幂
    • Description
    • Solution
  • 完整模板

任意模数NTT

Description

给定两个长度分别为n,mn,mn,m的多项式F, G,请求出F与G的卷积。各项系数对模数ppp取模。

请注意,ppp不一定是NTT模数。

n,m≤105n,m \le 10^5n,m≤105

Solution

由于篇幅能力原因,这里仅介绍一种十分容易理解的方法。

我们任意取 333 个 10910^9109 级别的NTT模数,分别做一遍NTT,从而对于卷积式中的每一项系数 resires_iresi​ 都有三个形如 resi≡ki,j(modpi,j)res_i \equiv k_{i,j}(mod\ p_{i,j})resi​≡ki,j​(mod pi,j​) 的表达式。

然后我们对于每一个 iii 分别跑模意义下的CRT(中国剩余定理)即可得到每一项系数。

为什么这么做是有正确性的呢? 因为,不在模意义下的卷积的各项系数最大不超过 102310^{23}1023 ,而这三个NTT模数的最小公倍数就已经达到了 102710^{27}1027 。所以并不会出现哈希冲突

时间复杂度 O(nlog⁡n)O(n \log n)O(nlogn) 。常数巨大。

分治NTT

Description

给定序列 g1,2,⋯n−1g_{1,2,\cdots n-1}g1,2,⋯n−1​ ,现在需要你求出序列 f0,1,2,⋯,n−1f_{0,1,2,\cdots,n-1}f0,1,2,⋯,n−1​ 。

其中 fi=∑j=1ifi−jgjf_i=\sum_{j=1}^i f_{i-j}\ g_jfi​=∑j=1i​fi−j​ gj​ ,边界为 f0=1f_0=1f0​=1 。

答案对 998244353998244353998244353 取模。

Solution

如果我们枚举 iii,每次都求一遍卷积的话,时间复杂度为 O(n2log⁡n)O(n^2 \log n)O(n2logn) 。甚至比暴力还要慢不少。

我们参考 CDQ分治 的思想,每次先向左半边递归,然后处理左半边对右半边的贡献,接着向右半边递归⋯⋯\cdots \cdots⋯⋯以此类推。

更具体地说,假设当前搜索的区间是 [l,r][l,r][l,r],左子区间为 [l,mid][l,mid][l,mid],右子区间为 [mid+1,r][mid+1,r][mid+1,r]。我们先递归处理左子区间 [l,mid][l,mid][l,mid] 。考虑右子区间中的一个位置 i(mid+1≤i≤r)i(mid+1 \le i \le r)i(mid+1≤i≤r),它从左半边得到的贡献为 ∑l≤j≤midfjgi−j\sum_{l \le j \le mid}f_j\ g_{i-j}∑l≤j≤mid​fj​ gi−j​ 。不难发现,这是一个卷积的形式,于是大力 NTT 即可。

更为具体地说,每次考虑“左半边对右半边的贡献”的时候,所用到的 ggg 一定是前 r−lr-lr−l 个位置,fff 用到的是区间 [l,mid][l,mid][l,mid],直接将这些位置对应的多项式求卷积,得到的多项式对应的是区间[mid+1,r][mid+1,r][mid+1,r](即r−midr-midr−mid个位置)。于是我们把 fff 中的那 mid−l+1mid-l+1mid−l+1 个位置映射到另一个数组里面,将它与 ggg 的对应区间做卷积,即可得到右半边的所有位置被左半边的贡献量。

令时间复杂度为 T(n)T(n)T(n) ,则有 T(n)=nlog⁡n+2T(n2)=O(nlog⁡2n)T(n)=n \log n+2T(\frac n 2)=O(n \log^2 n)T(n)=nlogn+2T(2n​)=O(nlog2n)。

多项式求逆

Description

给定一个多项式AAA,请你找到一个多项式BBB,使得A×B≡1(modxn)A×B \equiv 1(mod\ x^n)A×B≡1(mod xn)。

保证 AAA 的常数项为 111 。

Solution

假设我们已经求得了A×B′≡1(modxn2)A×B' \equiv 1(mod\ x^{\frac n 2})A×B′≡1(mod x2n​),那么

A×(B−B′)≡0(modxn2)A×(B-B') \equiv 0(mod\ x^{\frac n 2})A×(B−B′)≡0(mod x2n​)
(B−B′)≡0(modxn2)(B-B') \equiv 0(mod\ x^{\frac n 2})(B−B′)≡0(mod x2n​)
B2−2BB′+B′2≡0(modxn2)B^2-2BB'+B'^2 \equiv 0(mod\ x^{\frac n 2})B2−2BB′+B′2≡0(mod x2n​)

两边同时乘AAA,得到

AB2−2ABB′+AB′2≡0(modxn2)AB^2-2ABB'+AB'^2 \equiv 0(mod\ x^{\frac n 2})AB2−2ABB′+AB′2≡0(mod x2n​)
B−2B′+AB′2≡0(modxn2)B-2B'+AB'^2 \equiv 0(mod\ x^{\frac n 2})B−2B′+AB′2≡0(mod x2n​)
B≡2B′−AB′2(modxn2)B \equiv 2B'-AB'^2(mod\ x^{\frac n 2})B≡2B′−AB′2(mod x2n​)
B≡B′(2−AB′)(modxn2)B \equiv B'(2-AB')(mod\ x^{\frac n 2})B≡B′(2−AB′)(mod x2n​)

于是我们分治下去求B′B'B′,回溯的时候用NTT求出B′(2−AB′)B'(2-AB')B′(2−AB′)即可。

令时间复杂度为T(n)T(n)T(n),则有T(n)=T(n2)+nlog⁡n=O(nlog⁡n)T(n)=T(\frac n 2)+n \log n=O(n \log n)T(n)=T(2n​)+nlogn=O(nlogn)。

多项式除法

Description

Solution

一种错误的做法是: 求出BBB的逆元(即多项式的逆)然后用C去乘上它,即为AAA。

对于这一种做法错误的原因主要是: 我们忽略了余数R的影响,导致可能不满足第一个条件。

于是我们想要避免余项R的影响。

令F(x)′=xnF(1x)F(x)'=x^n F(\frac 1 x)F(x)′=xnF(x1​),其中nnn为多项式FFF的项数(虽然′'′已经表示了求导,但是这里暂时借用一下)。

不难发现,F(x)′F(x)'F(x)′的各项系数与F(x)F(x)F(x)的各项系数恰好相反。

我们开始愉快地推式子:

F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)
F(x)=xn−mQ(1x)xmG(1x)+xn−m+1xm−1R(x)F(x)=x^{n-m}Q(\frac 1 x)\ x^mG(\frac 1 x)+x^{n-m+1}\ x^{m-1} R(x)F(x)=xn−mQ(x1​) xmG(x1​)+xn−m+1 xm−1R(x)
F′(x)=Q′(x)G′(X)+xn−m+1R′(x)F'(x)=Q'(x)G'(X)+x^{n-m+1}R'(x)F′(x)=Q′(x)G′(X)+xn−m+1R′(x)

此时,在模xn−m+1x^{n-m+1}xn−m+1的意义下,R′R'R′的影响被消除了!于是我们可以直接多项式求逆+多项式乘法求出Q′Q'Q′,然后翻转得到QQQ,最后一步一步回带即可。

时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)。

多项式ln(对数函数)

Description

给定一个多项式A(n)A(n)A(n),请找到一个多项式B(x)B(x)B(x)使得B(x)≡ln⁡A(x)(modxn)B(x) \equiv \ln A(x)(mod\ x^n)B(x)≡lnA(x)(mod xn)

前置芝士

导数

导数的基本定义不讲了,毕竟高中数学课本上有(

这里重点介绍几个公式:

① (pG(x))′=pG′(x)(p\ G(x))'=p\ G'(x)(p G(x))′=p G′(x)
② (nm)′=mnm−1(n^m)'=mn^{m-1}(nm)′=mnm−1。
根据①②,我们学会了多项式求导:

void qiudao(int *A,int *res,int len){for (int i=1;i<=len;i++)  res[i-1]=(i*A[i])%mod;res[len-1]=0;
}

③(nm)(m)=m!(n^m)^{(m)}=m!(nm)(m)=m! 。虽然这个公式在多项式求ln⁡\lnln中的用处并不大,但是泰勒展开中需要它。

积分

积分就是“逆导数”。例如,2x2x2x的积分是x2x^2x2。

这里重点介绍一个公式:

④axnax^naxn的积分是an+1xn+1\frac {a} {n+1}x^{n+1}n+1a​xn+1。
证明: 由于xn+1x^{n+1}xn+1的导数是(n+1)xn(n+1) {x^n}(n+1)xn,所以an+1xn+1\frac {a} {n+1}x^{n+1}n+1a​xn+1的导数就是axnax^{n}axn。

于是我们也学会了多项式积分:

void jifen(int *A,int *res,int len){for (int i=1;i<=len;i++)  res[i]=(A[i-1]*ny(i))%mod;res[0]=0;
}

Solution

根据B(x)≡ln⁡A(x)(modxn)B(x) \equiv \ln A(x)(mod\ x^n)B(x)≡lnA(x)(mod xn)

等式两边同时求导得B′(x)≡A(x)′A(x)(modxn)B'(x) \equiv \frac {A(x)'} {A(x)}(mod\ x^n)B′(x)≡A(x)A(x)′​(mod xn)

于是我们先将A(x)A(x)A(x)求导得到A(x)′A(x)'A(x)′,然后求出A(x)A(x)A(x)的逆元得到1A(x)\frac 1 {A(x)}A(x)1​,再将这两个多项式相得到B′(x)B'(x)B′(x),最后积分回去即可。

时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)。

多项式牛顿迭代

Description

给定多项式GGG,请你找到多项式FFF使得G(F(x))≡0(modxn)G(F(x)) \equiv 0(mod\ x^n)G(F(x))≡0(mod xn)。

前置芝士: 泰勒展开

泰勒展开不会的话请自己学,我不想写 笔者只放一个套路式:

G(x)=∑i=0∞G(i)(a)i!(x−a)iG(x)=\sum_{i=0}^{∞} \frac {G^{(i)}(a)} {i!} (x-a)^iG(x)=∑i=0∞​i!G(i)(a)​(x−a)i

Solution

这里的G,FG,FG,F分别是两个多项式函数。例如当G(x)=x+2,f(x)=x−1G(x)=x+2,f(x)=x-1G(x)=x+2,f(x)=x−1时,那么G(F(15))=G(14)=16G(F(15))=G(14)=16G(F(15))=G(14)=16。

假设我们已经求出了G(F0(x))≡0(modxn2)G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F0​(x))≡0(mod x2n​)。

我们考虑将这个式子在xxx处泰勒展开。根据Part 2中的公式,不难得到

G(F(x))≡∑i=0∞G(i)(F0(x))i!(F(x)−F0(x))i(modxn)G(F(x)) \equiv \sum_{i=0}^{∞} \frac {G^{(i)}(F_0(x))} {i!} (F(x)-F_0(x))^i(mod\ x^n)G(F(x))≡i=0∑∞​i!G(i)(F0​(x))​(F(x)−F0​(x))i(mod xn)

对于右式而言,

∑i=0∞G(i)(F(x))i!(x−a)i(modxn)\sum_{i=0}^{∞} \frac {G^{(i)}(F(x))} {i!} (x-a)^i(mod\ x^n)∑i=0∞​i!G(i)(F(x))​(x−a)i(mod xn)
≡G(F0(x))+G′(F0(x))(F(x)−F0(x))\equiv G(F_0(x))+G'(F_0(x))(F(x)-F_0(x))≡G(F0​(x))+G′(F0​(x))(F(x)−F0​(x))

为什么G(F(x))G(F(x))G(F(x))的泰勒展开式的高于一次项都被消去了呢?因为

G(F(x))≡0(modxn2)G(F(x)) \equiv 0(mod\ x^{\frac n 2})G(F(x))≡0(mod x2n​)

G(F0(x))≡0(modxn2)G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F0​(x))≡0(mod x2n​)

两式相减得
G(F(x))−G(F0(x))≡0(modxn2)G(F(x))-G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F(x))−G(F0​(x))≡0(mod x2n​)

于是,对于(G(F(x))−G(F0(x)))p(G(F(x))-G(F_0(x)))^p(G(F(x))−G(F0​(x)))p而言,若2≤p2 \le p2≤p,那么必然有

G(F(x))−G(F0(x))≡0(modxn)G(F(x))-G(F_0(x)) \equiv 0(mod\ x^n)G(F(x))−G(F0​(x))≡0(mod xn)

所以高次项都被消除了。

我们回到刚才的式子
G(F(x))≡G(F0(x))+G′(F0(x))(F(x)−F0(x))(modxn)G(F(x)) \equiv G(F_0(x))+G'(F_0(x))(F(x)-F_0(x)) (mod\ x^n)G(F(x))≡G(F0​(x))+G′(F0​(x))(F(x)−F0​(x))(mod xn)

我们让需要求的G(F(x))G(F(x))G(F(x))放到一边,于是随便整理一波得到
F(x)=F0(x)−G(F0(x))G′(F0(x))F(x)=F_0(x)-\frac {G(F_0(x))} {G'(F_0(x))}F(x)=F0​(x)−G′(F0​(x))G(F0​(x))​

于是直接分治下去就行了。

令时间复杂度为T(n)T(n)T(n),则T(n)=nlog⁡n+T(n2)=nlog⁡nT(n)=n \log n+T(\frac n 2)=n \log nT(n)=nlogn+T(2n​)=nlogn。

应用

这个东西的应用极其广泛。比如它可以直接解决多项式求逆。


令G(F(x))=F(x)−1−A(x)G(F(x))=F(x)^{-1}-A(x)G(F(x))=F(x)−1−A(x)。根据多项式求逆的定义,显然G(F(x))≡0(modxn)G(F(x)) \equiv 0(mod\ x^n)G(F(x))≡0(mod xn)。

所以F(x)=F0(x)−F0(x)−1−A(x)−F0(x)−2F(x)=F_0(x)-\frac {F_0(x)^{-1}-A(x)} {-F_0(x)^{-2}}F(x)=F0​(x)−−F0​(x)−2F0​(x)−1−A(x)​

即F(x)=2F0(x)−F0(x)2A(x)F(x)=2F_0(x)-F_0(x)^2\ A(x)F(x)=2F0​(x)−F0​(x)2 A(x)

多项式开根

Description

给定一个多项式AAA,请你找到多项式BBB使得B2(x)≡A(x)(modxn)B^2(x) \equiv A(x) (mod\ x^n)B2(x)≡A(x)(mod xn)。

Solution

建议读者把它当成一道题而不是一个模板来做,由此训练一下多项式牛顿迭代的函数构造以及推导整理能力。

令G(F(x))=F(x)2−A(x)G(F(x))=F(x)^2-A(x)G(F(x))=F(x)2−A(x)

则F(x)≡F0(x)−F0(x)2−A(x)2F0(x)(modxn)F(x) \equiv F_0(x)-\frac {F_0(x)^2-A(x)} {2F_0(x)}(mod\ x^n)F(x)≡F0​(x)−2F0​(x)F0​(x)2−A(x)​(mod xn)

整理得F(x)=A(x)2F0(x)+F0(x)2F(x)=\frac {A(x)} {2F_0(x)}+\frac {F_0(x)} {2}F(x)=2F0​(x)A(x)​+2F0​(x)​

于是我们分治下去,回溯的时候,求一下F0(x)F_0(x)F0​(x)的逆元,再用A(x)A(x)A(x)乘上它并加上F0(x)F_0(x)F0​(x),然后除以222即可。

时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)。

多项式exp(指数函数)

Description

给定多项式A(x)A(x)A(x),请你求出多项式B(x)B(x)B(x)使得eA(x)≡B(x)(modxn)e^{A(x)} \equiv B(x)(mod\ x^n)eA(x)≡B(x)(mod xn)。

Solution

等式两边同时ln⁡\lnln得ln⁡B(x)≡A(x)(modxn)\ln B(x) \equiv A(x)(mod\ x^n)lnB(x)≡A(x)(mod xn)

令G(F(x))=ln⁡F(x)−A(x)G(F(x))=\ln F(x)-A(x)G(F(x))=lnF(x)−A(x),不难得到G(B(x))≡0(modxn)G(B(x)) \equiv 0(mod\ x^n)G(B(x))≡0(mod xn),于是我们就可以快乐地牛顿迭代了。

F(x)=F0(x)−ln⁡F0(x)−A(x)F0′(x)F0(x)F(x)=F_0(x)-\frac {\ln F_0(x)-A(x)}{\frac {F_0'(x)} {F_0(x)}}F(x)=F0​(x)−F0​(x)F0′​(x)​lnF0​(x)−A(x)​
=F0(x)−ln⁡F0(x)−A(x)1F0(x)=F_0(x)-\frac {\ln F_0(x)-A(x)}{\frac {1} {F_0(x)}}=F0​(x)−F0​(x)1​lnF0​(x)−A(x)​
=F0(x)(1−ln⁡F0(x)+A(x))=F_0(x)(1-\ln F_0(x)+A(x))=F0​(x)(1−lnF0​(x)+A(x))

递归下去,回溯时做一遍多项式ln⁡\lnln与多项式乘法即可。

时间复杂度O(nlog⁡n)O(n \log n)O(nlogn)。

多项式快速幂

Description

给定多项式 A(x)A(x)A(x) 与 ppp,请求出多项式 B(x)B(x)B(x) 使得 B(x)≡A(x)p(modxn)B(x) \equiv A(x)^p(mod\ x^n)B(x)≡A(x)p(mod xn)。

Solution

首先,一种方法是快速幂套多项式乘法,时间复杂度是 O(nlog⁡nlog⁡p)O(n \log n \log p)O(nlognlogp)的。

考虑如何优化。不难发现 x=eln⁡xx=e^{\ln x}x=elnx,所以 B(x)≡epln⁡A(x)B(x) \equiv e^{p\ln A(x)}B(x)≡eplnA(x)。

于是我们求出 ln⁡A(x)\ln A(x)lnA(x),将各项系数乘 ppp 然后再 exp⁡\expexp 求出 epln⁡A(x)e^{p \ln A(x)}eplnA(x) 即为答案。


完整模板

int n,k;
int a[maxl],b[maxl],rev[maxl];int quick_power(int x,int y){int res=1;for (;y;y=y>>1,x=(x*x)%mod){if (y&1)  res=(res*x)%mod;}return res;
}
int ny(int tmpxtmpxxx){return quick_power(tmpxtmpxxx,mod-2);}namespace poly{int tmp[maxl],f[maxl],g[maxl];void NTT(int *A,int len,int flag){for (rg int i=0;i<len;++i){if (i>rev[i])  swap(A[i],A[rev[i]]);}for (rg int i=2;i<=len;i*=2){int wn;if (flag==1)  wn=quick_power(G,(mod-1)/i);else wn=quick_power(Gi,(mod-1)/i);for (int j=0;j<len;j+=i){int w=1;for (rg int k=j;k<j+(i/2);k++){int u=A[k],v=(w*A[k+(i/2)])%mod;A[k]=(u+v)%mod,A[k+(i/2)]=(u+mod-v)%mod;w=(w*wn)%mod;}}}if (flag==-1){int ducati_cai=quick_power(len,mod-2);for (int i=0;i<len;++i)  A[i]=(A[i]*ducati_cai)%mod;}}void Mul(int *A,int *B,int *C,int n,int m){int F[maxl],G[maxl];int p=1,cnt=0;while (p<=n+m)  p*=2,cnt++;for (int i=0;i<=p;++i)  rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<=n;++i)  F[i]=A[i];for (int i=0;i<=m;++i)  G[i]=B[i];for (int i=n+1;i<=p;++i)  F[i]=0;for (int i=m+1;i<=p;++i)  G[i]=0;NTT(F,p,1),NTT(G,p,1);for (rg int i=0;i<=p;++i)  C[i]=(F[i]*G[i])%mod;NTT(C,p,-1);}void get_inv(int *A,int *res,int len){if (len==1){res[0]=quick_power(A[0],mod-2);return;}get_inv(A,res,(len+1)>>1);int p=1,cnt=0;while (p<=len<<1)  p<<=1,cnt++;for (rg int i=0;i<=p;++i)  rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<=len;++i)  tmp[i]=A[i];for (int i=len;i<=p;++i)  tmp[i]=0;NTT(tmp,p,1),NTT(res,p,1);for (rg int i=0;i<=p;++i)  res[i]=(((2-res[i]*tmp[i])%mod+mod)%mod*res[i])%mod;NTT(res,p,-1);for (int i=len;i<=p;++i)  res[i]=0;}void Divide(int *A,int *B,int *D,int *R,int n,int m){int invb[maxl],dtmp[maxl];reverse(B+1,B+m+1),reverse(A+1,A+n+1);get_inv(B,invb,n-m+1),Mul(A,invb,D,n-m,n-m);reverse(A+1,A+n+1),reverse(B+1,B+m+1),reverse(D+1,D+n-m+1);Mul(B,D,dtmp,m,n-m);for (int i=0;i<m;++i)  R[i]=(A[i]-dtmp[i]+mod)%mod;}void get_mod(int *A,int *B,int *R,int n,int m){Divide(A,B,tmp,R,n,m);}void qiudao(int *A,int *res,int len){for (int i=1;i<len;++i)  res[i-1]=(A[i]*i)%mod;res[len-1]=0;}void jifen(int *A,int *res,int len){for (int i=1;i<len;++i)  res[i]=(A[i-1]*ny(i))%mod;res[0]=0;}void get_ln(int *A,int *res,int len){int inva[maxl],da[maxl],mul_num[maxl];memset(inva,0,sizeof(inva));get_inv(A,inva,len);qiudao(A,da,len);Mul(inva,da,mul_num,len,len);jifen(mul_num,res,len);}void get_exp(int *A,int *res,int len){if (len==1){res[0]=1;return;}get_exp(A,res,(len+1)>>1);int p=1,cnt=0;while (p<=len<<1)  p<<=1,cnt++;for (rg int i=0;i<p;++i)  rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<len;++i)  g[i]=A[i];for (int i=len;i<p;++i)  g[i]=0;for (int i=0;i<p;++i)  f[i]=0;get_ln(res,f,len);NTT(g,p,1),NTT(f,p,1),NTT(res,p,1);for (rg int i=0;i<p;++i)  res[i]=((1-f[i]+g[i]+mod)%mod*res[i])%mod;NTT(res,p,-1);for (int i=len;i<p;++i)  res[i]=0;}void get_pow(int *A,int *res,int len,int k){int C[maxl];get_ln(A,C,len);for (int i=0;i<len;++i)  C[i]=(C[i]*k)%mod;get_exp(C,res,len);}
};

学会了这些多项式的算法之后,我们来看看这些算法的广大应用。

下篇

多项式学习笔记[二](全网最详细!有图有代码有解释有例题有总结!)相关推荐

  1. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

  2. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)

    ** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...

  3. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  4. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  5. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  6. Linux学习笔记 文件服务Vsftp详细介绍

    Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...

  7. 二维码学习笔记(二) | 数据分析与数据编码

    唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...

  8. 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现

    深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...

  9. 学习笔记二.矩阵按键

    #学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...

最新文章

  1. python返回元组_python – numpy.where返回一个元组的目的是什么?
  2. SSM整合时配置文件的编写
  3. [云炬创业基础笔记]第二章创业者测试22
  4. RRT,RRT*,A*,Dijkstra,PRM算法
  5. web调试:ie缓存
  6. Windows 7下的Excel 2010同时打开多个独立的窗口
  7. Codeforces976D Degree Set 【构造】
  8. 从对工作流理论发展的理解到jBPM4的设计思想
  9. 你们真的会追汉纸么?!
  10. Atitit 身份证 证件编码规范
  11. 分享一个网盘:千脑网
  12. 服务器系统怎么么安装手绘板驱动,wacom数位板如何使用?wacom数位板驱动安装教程!...
  13. win11QQ文件另存为崩溃
  14. 废柴日记之国庆特辑:那些年我们一直分不清楚的近义词们②
  15. KNN代码学习:将iris.csv处理成bunch格式
  16. android平板 跑分软件,安卓平板拿啥比?M1 iPad Pro跑分公布:差距实在太大
  17. Web 应用程序安全检查表
  18. 《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》目录(最终定稿)...
  19. 【文献阅读】The role of news sentiment in oil futures returns and volatility forecasting
  20. ev6 ev8 ev4a加密视频破解翻录提取教程

热门文章

  1. 计算机网络 5电路交换
  2. windows下之定时执行bat脚本
  3. 洛谷P4942 小凯的数字
  4. 科技不总是冷冰冰,智能便携打印机让文字更有温度!——硬件方案篇
  5. Nginx 最实用的配置技巧!速看
  6. OCR EasyOCR + PaddleHub 光学字符识别(Optical Character Recognition, OCR)
  7. CT图像分割dicom文件与nii.gz文件预处理----窗宽(window width)和窗位(window level)的设置
  8. Redis设置密码,查看密码,修改密码,忘记密码。
  9. 【干货】今日头条的新闻推荐算法原理
  10. Java之乐观锁和悲观锁