(详解)矩阵快速幂详解与常见转移矩阵的构造_秦小咩的博客-CSDN博客_矩阵快速幂转移矩阵

目录

矩阵乘法

矩阵快速幂 伪代码模板

例题一

例题2

例题三

例题四

高斯消元

整形高斯消元

浮点型高斯消元

例题

模数型高斯消元

异或型高斯消元

例题


矩阵乘法

假设有n的地点,从地点i到地点j坐飞机有aij种选择,坐火车有bij种选择。求从地点i先坐飞机再转成火车到j的方案数

矩阵乘法

假设 A=(aij),B=(bij)是两个n元矩阵,它们的乘积C=AB也是一个n元矩阵C=(cij),

满足cij=

矩阵快速幂 伪代码模板

const int N=505;void matpow()
{int ans[N][N];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans[i][j]=(i==j);while(pow){if(pow&1)matmul(ans,base,ans);matmul(base,base,base);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){a[i][j]=ans[i][j];}}
}

例题一

Magic Gems

             

行                            列

考虑继承

base矩阵是快速幂关键,继承也就有一定技巧性

设F[n]   = base* F[n-1]则

n-m=1时 n-1=m

F[n]=  base ^n-m * F(m)

其中F数组m行   base数组  m行*m列·

# include<cstdio>
# include<algorithm>
# include<iostream>
# include<map>
# include<cstring>
# include<set>
# include<algorithm>
# include<vector>
# include<queue>
# include<cstring>using namespace  std;
# define mod  1000000007typedef long long int ll;ll f[110][110],base[110][110];
ll n,m;void mul(ll a[110][110],ll b[110][110])
{ll c[110][110]= {0};for(int i=1; i<=m; i++){for(int j=1; j<=m; j++){for(int k=1; k<=m; k++){c[i][j]=(c[i][j]+a[i][k]*b[k][j]%mod)%mod;}}}for(int i=1; i<=m; i++){for(int j=1; j<=m; j++){a[i][j]=c[i][j]%mod;}}
}
ll ans[110][110];int main ()
{cin>>n>>m;base[1][1]=1;base[1][m]=1;for(int i=2; i<=m; i++){base[i][i-1]=1;}f[1][1]=2;for(int i=2; i<=m; i++){f[i][1]=1;}ll pow=n-m;if(pow<=0){if(pow<0)cout<<1;elsecout<<2;return  0;}for(int i=1; i<=m; i++){ans[i][i]=1;}while(pow){if(pow&1)mul(ans,base);pow>>=1;mul(base,base);}ll an=0;for(int i=1;i<=m;i++){an=(an+ans[1][i]*f[i][1]%mod)%mod;}cout<<an;return 0;}

例题2

方格填色

我们用1代表白色,0代表黑色。左右两格不能同时是白色  &运算之后,一定是0 ,两列不能全是黑也就是两列不能全是0

        其中base数组的转移规则为,i,j不能同时是0,且ij&运算之后不能是1

另外base数组的pow应该是n-1

# include<cstdio>
# include<algorithm>
# include<iostream>
# include<map>
# include<cstring>
# include<set>
# include<algorithm>
# include<vector>
# include<queue>
# include<cstring>using namespace  std;
# define mod  1000000007typedef long long int ll;ll base[50][50],n,m;ll f[50][50];
ll ans[50][50];void cheng(ll a[50][50],ll b[50][50])
{ll temp[50][50]={0};for(int i=0;i<(1<<m);i++){for(int j=0;j<(1<<m);j++){for(int k=0;k<(1<<m);k++){temp[i][j]=(temp[i][j]+a[i][k]*b[k][j]%mod)%mod;}}}for(int i=0;i<(1<<m);i++){for(int j=0;j<(1<<m);j++){a[i][j]=temp[i][j];}}
}
int main ()
{cin>>m>>n;for(int i=0;i<(1<<m);i++){for(int j=0;j<(1<<m);j++){if(i&j)continue;if(!i&&!j)continue;base[i][j]=1;}}ll pow=n-1;for(int i=0;i<(1<<m);i++){ans[i][i]=1;f[i][1]=1;}while(pow){if(pow&1)cheng(ans,base);pow>>=1;cheng(base,base);}ll an=0;for(int i=0;i<(1<<m);i++){for(int j=0;j<(1<<m);j++){an=(an+ans[i][j]*f[j][1]%mod)%mod;}}cout<<an;return 0;}

例题三

Sasha and Array

首先,菲波那切数列的转移方程

在这里不得不提一个规律,那就是base数组的x次幂所得到的  base[1][1]正好是 f(x-1)

比如0次幂的单位矩阵   base[1][1]=1=f(1)

1次幂    base[1][1]=f(2)

2次幂  base[1][1]=f(3)

而本题的突破点就在这里。

每次进行的区间修改用线段树来实现,那么线段树的实际意义该如何定义?

首先看两项操作  对于[L,R]区间内的a[i]进行加 x,操作

对于【L,R]区间内的斐波那契数列求和

第一项操作对于第二项操作的影响在于   每次加x,相当于对f[i]对应的base矩阵进行了幂数+x,也就是乘上一个幂数为x的base矩阵

之后我们线段树的sum数组该如何定义? 我们的lazy标记又该如何定义

首先我们是无法预处理出10^9那么大的斐波那契数列的,也就意味着我们sum数组不能是单纯的数字,应该是矩阵形式。

而sum数组就对应了 该区间base数组之和。 这样的合理性在于 [L,R]之间所有矩阵分别乘x个base矩阵,所得到的base[1][1]之和,与先把矩阵相加,再乘x个base矩阵所得结果相同

在返回答案时,只需要进行base[1][1]的求和即可

涉及重载运算符,代码细节多

# include<iostream>
# include<cstring>
# include<vector>
# include<math.h># include<algorithm>using namespace std;# define mod 1000000007
typedef long long int ll;struct MAT
{ll mat[3][3]={0};  void init(){mat[1][1]=mat[2][2]=1;mat[1][2]=mat[2][1]=0;//这一行必须有,没有就会错,之所以会错,是因为init不仅要承担0矩阵初始化为0级幂矩阵的任务还承担的降幂的任务}}sum[100000*4+10],lazy[100000*4+10];MAT operator*(MAT a, MAT b)
{MAT c;memset(c.mat,0,sizeof(c.mat));for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int k=1;k<=2;k++){c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j]%mod)%mod;}}}return c;}MAT operator+ (MAT a, MAT b)
{MAT c;memset(c.mat,0,sizeof(c.mat));for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){c.mat[i][j]=(a.mat[i][j]+b.mat[i][j])%mod;}}return c;}MAT quickpow(ll pow)
{MAT c;c.init();MAT base;base.mat[1][1]=base.mat[1][2]=base.mat[2][1]=1;base.mat[2][2]=0;while(pow){if(pow&1)c=c*base;pow>>=1;base=base*base;}return c;}
void pushup(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];}
void pushdown(int rt)  //懒标记的下传实际上是幂级的累加,幂级的累加靠乘法来实现
{sum[rt<<1]=sum[rt<<1]*lazy[rt];sum[rt<<1|1]=sum[rt<<1|1]*lazy[rt];lazy[rt<<1]=lazy[rt<<1]*lazy[rt];lazy[rt<<1|1]=lazy[rt<<1|1]*lazy[rt];lazy[rt].init();  //幂级归零}void build(int l,int r,int rt)
{sum[rt].init();lazy[rt].init();if(l==r){ll x;cin>>x;sum[rt]=quickpow(x-1);   //f(x)为x-1次幂的base数组return ;}int mid=(l+r)>>1;build(l,mid,rt<<1);build(mid+1,r,rt<<1|1);pushup(rt);}void change(int L,int R,int l,int r,int rt,MAT x)  //把矩阵块累加到区间
{if(L<=l&&r<=R){lazy[rt]=lazy[rt]*x;sum[rt]=sum[rt]*x;return;}pushdown(rt);int mid=(l+r)>>1;if(L<=mid)change(L,R,l,mid,rt<<1,x);if(R>mid)change(L,R,mid+1,r,rt<<1|1,x);pushup(rt);}ll getsum(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R){return sum[rt].mat[1][1]%mod;}pushdown(rt);int mid=(l+r)>>1;ll ans=0;if(L<=mid)ans=(ans+getsum(L,R,l,mid,rt<<1))%mod;if(R>mid)ans=(ans+getsum(L,R,mid+1,r,rt<<1|1))%mod;return ans;}
int main ()
{int n,m;cin>>n>>m;build(1,n,1);while(m--){int a;cin>>a;if(a==1){ll l,r,x;cin>>l>>r>>x;MAT y=quickpow(x);change(l,r,1,n,1,y);}else{int l,r;cin>>l>>r;cout<<getsum(l,r,1,n,1)<<'\n';}}return 0;}

例题四

​​​​​​区间加区间sin和

根据公式

且易发现,对一个区间每个数加a,再根据公式求sin 与先求sin之和再根据公式求sin结果相同

故可以利用线段树进行求解。懒标记是所加的a,懒标记的下传方式需要按照公式

# include<iostream>
# include<cstring>
# include<vector>
# include<math.h>
# include<algorithm>
using namespace std;
# define mod 1000000007
typedef long long int ll;double sumsin[200000*4+10],sumcos[200000*4+10],lazy[200000*4+10];
/*sin(a+x)  = sina cosx + sinx cosacos(a+x)  =cosa cosx -sina sinx*/void pushup(int rt)
{sumcos[rt]=sumcos[rt<<1]+sumcos[rt<<1|1];sumsin[rt]=sumsin[rt<<1]+sumsin[rt<<1|1];}void push(double la,int rt)
{double temsin=sumsin[rt];double temcos=sumcos[rt];sumsin[rt]=sin(la)*temcos+cos(la)*temsin;sumcos[rt]=temcos*cos(la)-sin(la)*temsin;}
void pushdown(int rt)
{if(lazy[rt])  //进行下传{push(lazy[rt],rt<<1);push(lazy[rt],rt<<1|1);lazy[rt<<1]+=lazy[rt];lazy[rt<<1|1]+=lazy[rt];lazy[rt]=0;}}
void build(int l,int r,int rt)
{if(l==r){double  x;cin>>x;sumsin[rt]=sin(x);sumcos[rt]=cos(x);return ;}int mid=(l+r)>>1;build(l,mid,rt<<1);build(mid+1,r,rt<<1|1);pushup(rt);}void change(int L,int R,int l,int r,int rt,double x)
{if(L<=l&&r<=R){push(x,rt);lazy[rt]+=x;return ;}int mid=(l+r)>>1;pushdown(rt);if(L<=mid)change(L,R,l,mid,rt<<1,x);if(R>mid)change(L,R,mid+1,r,rt<<1|1,x);pushup(rt);}
double querysum(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R){return sumsin[rt];}int mid=(l+r)>>1;pushdown(rt);double ans=0;if(L<=mid)ans+=querysum(L,R,l,mid,rt<<1);if(R>mid)ans+=querysum(L,R,mid+1,r,rt<<1|1);return ans;}int main ()
{int n;cin>>n;build(1,n,1);int t;cin>>t;while(t--){int a;cin>>a;if(a==1){int l,r,x;cin>>l>>r>>x;change(l,r,1,n,1,x);}else{int l,r;cin>>l>>r;cout<<querysum(l,r,1,n,1)<<endl;}}return 0;}

高斯消元

为线性代数在计算机编码中的应用。

常见的形式为求解 线性方程组

ax+by+cz= A

dx+ey+fz=B

gx+hy+iz=C

求解出 x,y,z

名词 系数矩阵

增广矩阵

利用高斯消元可以将此线性方程组进行求解

常见的高斯消元有四大类  整数解型,浮点数解型,取模型,异或型。

整形高斯消元

int a[50][50];
int x[50];int gcd(int x,int y)
{return !x?x:gcd(y,x%y);}
int lcm(int x,int y)
{return x/gcd(x,y)*y;}
int Gauss(int hang,int lie)
{for(int i=0;i<=lie;i++){x[i]=0;}int row=0,col=0;for(row=0;row<hang&&col<lie;col++,row++){int maxrow=row;for(int i=row+1;i<hang;i++){if(abs(a[i][col])>abs(a[maxrow][col]))maxrow=i;}if(maxrow!=row){for(int j=col;j<=lie;j++){swap(a[row][j],a[maxrow][j]);}}if(a[row][col]==0){row--;continue;}for(int i=row+1;i<hang;i++){if(a[i][col]!=0){int LCM=lcm(abs(a[i][col]),abs(a[row][col]));int ta=LCM/abs(a[i][col]);int tb=LCM/abs(a[row][col]);if(a[i][col]*a[row][col]<0)tb=-tb;for(int j=col;j<=lie;j++){a[i][j]=a[i][j]*ta-a[row][j]*tb;}}}}for(int i=row;i<hang;i++){if(a[i][col])return -1;   //无解}int temp=hang-row;if(row<hang)return temp;   //自由元for(int i=hang-1;i>=0;i--){int temp=a[i][lie];for(int j=i+1;j<lie;j++){if(a[i][j]){temp-=a[i][j]*x[j];   //该行j列系数和第j解}}if(temp%a[i][i])return -2;    //有解但无整数解x[i]=temp/a[i][i];}return  0;}

浮点型高斯消元

例题

例题     ​​​​​​【模板】高斯消元法 - 洛谷

细节为EPS的设定

# include<iostream>
# include<cstring>
# include<vector>
# include<iomanip>
# include<queue>
# include<set>
# include<math.h>
# include<algorithm>
using namespace std;
# define mod 998244353
typedef __int128 ll;double  a[110][110];
double  x[110];bool check(double x)
{return fabs(x)>1e-6;}
int Gauss(int hang,int lie)
{for(int i=0;i<=lie;i++){x[i]=0;}int row=0,col=0;for(row=0;row<hang&&col<lie;col++,row++){int maxrow=row;for(int i=row+1;i<hang;i++){if(fabs(a[i][col])>fabs(a[maxrow][col]))maxrow=i;}if(maxrow!=row){for(int j=col;j<=lie;j++){swap(a[row][j],a[maxrow][j]);}}if(!check(a[row][col])){row--;continue;}for(int i=row+1;i<hang;i++){if(check(a[i][col])){double ji=a[i][col]/a[row][col];for(int j=col;j<=lie;j++){a[i][j]-=a[row][j]*ji;}a[i][col]=0;}}}for(int i=row;i<hang;i++){if(check(a[i][col]))return -1;   //无解}int temp=hang-row;if(row<hang)return temp;   //自由元for(int i=hang-1;i>=0;i--){double  tem=a[i][lie];for(int j=i+1;j<lie;j++){if(a[i][j]){tem-=a[i][j]*x[j];   //该行j列系数和第j解}}x[i]=tem/a[i][i];}return  0;}
int main()
{int n;cin>>n;for(int i=0;i<n;i++){for(int j=0;j<=n;j++){cin>>a[i][j];}}if(Gauss(n,n)){cout<<"No Solution";}else{for(int i=0;i<n;i++){cout<<fixed<<setprecision(2)<<x[i]<<endl;}}return 0;
}

模数型高斯消元

int a[100][100];int x[100];int gcd(int a,int b)
{return !b?a:gcd(b,a%b);}
int lcm(int a,int b)
{return a/gcd(a,b)*b;}
int gauss(int hang,int lie)
{for(int i=0;i<=lie;i++){x[i]=0;}int col=0,row=0;for(row=0;row<hang&&col<lie;row++,col++){int maxrow=row;for(int i=row+1;i<hang;i++){if(abs(a[i][col])>abs(a[maxrow][col]))maxrow=i;}if(maxrow!=row){for(int j=col;j<=lie;j++){swap(a[row][j],a[maxrow][j]);}}if(a[row][col]==0){row--;continue;}for(int i=row+1;i<hang;i++){if(a[i][col]!=0){int lc=lcm(abs(a[i][col]),abs(a[row][col]));int ta=lc/abs(a[i][col]);int tb=lc/abs(a[row][col]);if(a[i][col]*a[row][col]<0)tb=-tb;for(int j=col;j<=lie;j++){a[i][j]=((a[i][j]*ta-a[row][j]*tb)%mod+mod)%mod;}}}}for(int i=row;i<hang;i++){if(a[i][col])return  -1;}int temp=hang-row;if(row<hang)return temp;for(int i=hang-1;i>=0;i--){int temp=a[i][lie];for(int j=i+1;j<lie;j++){if(a[i][j]){temp-=a[i][j]*x[j];temp=(temp%mod+mod)%mod;}}while(temp%a[i][i]){temp+=mod;}x[i]=(temp/a[i][i])%mod;}return  0;}

异或型高斯消元

通常其系数矩阵为01,求出的解集也是01的形式

int a[100][100];int x[100];int gauss(int hang,int lie)
{for(int i=0;i<=lie;i++){x[i]=0;}int col=0,row=0;for(row=0;row<hang&&col<lie;row++,col++){int maxrow=row;for(int i=row+1;i<hang;i++){if(abs(a[i][col])>abs(a[maxrow][col]))maxrow=i;}if(maxrow!=row){for(int j=col;j<=lie;j++){swap(a[row][j],a[maxrow][j]);}}if(a[row][col]==0){row--;continue;}for(int i=row+1;i<hang;i++){if(a[i][col]){for(int j=col;j<=lie;j++){a[i][j]^=a[row][j];}}}}for(int i=row;i<hang;i++){if(a[i][col])return -1;}int temp=hang-row;if(row<hang)return temp;for(int i=hang-1;i>=0;i--){x[i]=a[i][lie];for(int j=i+1;j<lie;j++){x[i]^=(a[i][j]&&x[j]);}//异或之后x[i]==(a[i][i]&&x[i])  如果是1,那么x[i]必须是1,如果是0,那么要具体看题意再进行分析}return  0;}

例题

EXTENDED LIGHTS OUT

典型例题,开关灯问题

以3*3灯为例,研究第一盏灯

L1 ^ (   A(1,1)&&X(1)  )  ^   (   A(1,2)&&X(2)  ) ^.....(   A(1,9)&&X(9)  )  =0

L为初始状态  A(x,y)为 第y盏灯的开关是否对第x盏灯有影响  X为这盏灯是否按下

其异或结果为0才能保证最终第一站灯为熄灭状态

而我们对左边异或L1

(   A(1,1)&&X(1)  )  ^   (   A(1,2)&&X(2)  ) ^.....(   A(1,9)&&X(9)  )   =L1

类似处理其余8个灯,以A为系数矩阵,(A,L)为增广矩阵,求出X即可

# include<iostream>
# include<cstring>
# include<vector>
# include<iomanip>
# include<queue>
# include<set>
# include<math.h>
# include<algorithm>
using namespace std;
# define mod 998244353
typedef __int128 ll;int getid(int x,int y)
{return x*6+y;}int a[50][50];int x[50];int gauss(int hang,int lie)
{for(int i=0;i<=lie;i++){x[i]=0;}int row=0,col=0;for(row=0;row<hang&&col<lie;row++,col++){int maxrow=row;for(int i=row+1;i<hang;i++){if(a[i][col]>a[maxrow][col]){maxrow=i;}}if(maxrow!=row){for(int j=col;j<=lie;j++){swap(a[row][j],a[maxrow][j]);}}if(a[row][col]==0){row--;continue;}for(int i=row+1;i<hang;i++){if(a[i][col]){for(int j=col;j<=lie;j++){a[i][j]^=a[row][j];}}}}for(int i=hang-1;i>=0;i--){x[i]=a[i][lie];for(int j=i+1;j<lie;j++){x[i]^=(a[i][j]&&x[j]);}}return 0;}
int main()
{int t;cin>>t;int cnt=1;while(t--){memset(a,0,sizeof(a));for(int i=0; i<30; i++){cin>>a[i][30];}for(int i=0; i<5; i++){for(int j=0; j<6; j++){int t=i*6+j;a[t][t]=1;if(i>0)a[(i-1)*6+j][t]=1;if(i<4)a[(i+1)*6+j][t]=1;if(j>0)a[i*6+j-1][t]=1;if(j<5)a[i*6+j+1][t]=1;}}gauss(30,30);int mo=5;cout<<"PUZZLE #"<<cnt<<endl;for(int i=0;i<30;i++){cout<<x[i]<<" ";if(i&&i%mo==0){cout<<endl;mo+=6;}}cnt++;}return 0;
}

矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解相关推荐

  1. 中石油训练赛 - Switches(高斯消元求逆矩阵+逆矩阵求线性方程组)

    题目大意:给出一个 n * n 的布尔矩阵表示开关与灯的关系,现在每个灯来说,是否存在一种开关的集合,使得恰好使得只有当前灯是打开状态,其余灯都是熄灭状态,分别输出方案 题目分析:将开关视为变元,将灯 ...

  2. 高斯消元 AcWing 883. 高斯消元解线性方程组

    高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...

  3. 高斯分解LU矩阵之MATLAB实现

    高斯分解LU矩阵之MATLAB实现 数值代数是从这个星期开起来的,但是由于老师的影响感觉貌似已经上了两个星期一样,其实才上三大节课,这个星期把绪论和第一章的第一节:三角形方程组和三角分解讲完了.老师说 ...

  4. 三元组法矩阵加法java_C语言实现矩阵加法、减法、乘法和数乘运算

    一.知识储备 • 矩阵与矩阵之间可以进行加法.减法和乘法运算(矩阵的"除法",被特别地定义出了逆矩阵,通过一个矩阵与另一个的逆矩阵的乘法来实现),矩阵和数之间可以进行数乘运算: • ...

  5. 数学基础(矢量, 向量,矩阵,相等,加法,乘法)

    (人脸,图像)真实的事物--->数学对象(矢量)--->矢量间的关系(数学算法或者性质,矩阵,加减法)--->另外一些矢量(特征比较明确)--->真实事物(图像,人脸) 矢量: ...

  6. Java实现矩阵运算——矩阵乘法、矩阵转置、自动填充矩阵行

    在做大数据或人工智能开发的过程做难免会遇到矩阵运算,本文在这里给大家实现一个简单的矩阵运算,请看下代码: package test;/*** 矩阵运算* * @author Administrator ...

  7. 矩阵的基础知识回顾:矩阵乘法,矩阵的逆,伴随矩阵,矩阵的转置,行列式,相似矩阵,实对称矩阵

    Agenda 1. 矩阵matrix 1.1 矩阵运算matrix operations 1.1.1 矩阵乘法matrix multiplication 1.1.1.1 简化矩阵乘法(facilita ...

  8. 6-2 编写Matrix类,使用二维数组实现矩阵,实现两个矩阵的乘法。 (30分) java pta

    编写程序题, 根据要求编写一个Java类,补充到代码中. 定义Matrix(矩阵)类,使用二维数组实现矩阵,实现两个矩阵的乘法.要求如下: 4个变量:row(行数),column(列数), matri ...

  9. 华为畅享7php造型手机,华为畅享7 Plus发布华为千元矩阵布局完成

    今天下午,华为携千元新品华为畅享7 Plus正式发布.更大的5.5英寸屏幕,最高4GB运行内存,后置1200万大像素摄像头, 金属机身,4000mAh电池延续畅享系列续航基因,EMUI5.1保障持久流 ...

最新文章

  1. 简易计算机单片机编程思路,到底以什么单片机入门?一些单片机简单的学习方法...
  2. IDEA控制台输出乱码解决方案
  3. python初学者web还是爬虫-还在纠结学爬虫还是数据分析,不如看看这篇文章
  4. Java初学者疑难杂症之:一对一和一对多的关系
  5. 浅谈ICMP Flood***原理
  6. OpenCore 的代码结构
  7. java 相对路径获取_在java项目中通过相对路径获取资源的方式
  8. pacman吃豆人_通过Tensorflow和强化学习实现自动化吃豆人PacMan
  9. java placeholder_Java占位符
  10. [转载] python的系统模块_Python操作系统模块
  11. 软件应用:HexorBase Tool 实战测试!
  12. 2020-11-16梦笔记
  13. Java截图转文字程序
  14. Google可能退出中国
  15. VIMS(虚拟镜像管理系统)
  16. linux 查看裸设备与lv,LINUX 如何查看裸设备
  17. SQLmap-tamper详细介绍
  18. 微信热搜榜、订阅热词API
  19. 【Python 实战基础】如何绘制树状图展示Python数据分析师的知识结构
  20. Cathy Zhang 箭头函数与普通函数的区别

热门文章

  1. linux - mv
  2. .netcore空数据映射处理
  3. 用腾讯优图AI视觉模组在树莓派上玩吃火锅体感游戏
  4. C++ 2048 编程 小游戏
  5. 【威海seo博客】SEO优化:当下进行网站优化左右排名的重要因素分析
  6. linux redis重启,互联网常识:linux下重启redis的方法
  7. 教你如何给每个视频添加STR字幕
  8. java全局变量放在什么地方_java中的全局变量
  9. unity绘制管道_【译文】unity可编程渲染管道#1——自定义管道
  10. Openlayers6叠加Mapbox地图