当前位置: 首页 > article >正文

算法分析与设计-动态规划、贪心算法

目录

第三章——动态规划

第四章——贪心算法 


第三章——动态规划

/*【问题描述】
使用动态规划算法解矩阵连乘问题,具体来说就是,依据其递归式自底向上的方式进行计算,在计算过程中,保存子问题答案,每个子问题只解决一次,在后面计算需要时只要简单查一下得到其结果,从而避免大量的重复计算,最终得到多项式时间的算法。
【输入形式】
在屏幕上输入第1个矩阵的行数和第1个矩阵到第n个矩阵的列数,各数间都以一个空格分隔。
【输出形式】
矩阵连乘A1,...,An的最少数乘次数和最优计算次序。
【样例1输入】
30 35 15 5 10 20 25
【样例1输出】
15125
((A1(A2A3))((A4A5)A6))
【样例说明】
输入:第1个矩阵的行数和第1个矩阵到第6个矩阵的列数,以一个空格分隔。
输出:矩阵连乘A1,...,An的最少数乘次数为15125,最优计算次序为((A1(A2A3))((A4A5)A6))。
【数据规模】
矩阵个数在10以内。*/
#include<bits/stdc++.h>
using namespace std;
const int N=15;
int A[N];//矩阵规模
int m[N][N];//最优解
int s[N][N];
void MatrixChain(int n){int r,i,j,k;for(i=0;i<=n;i++)m[i][i]=0;for(r=2;r<=n;r++)//r个矩阵连乘{for(i=1;i<=n-r+1;i++){//r个矩阵的r-1个空隙中依次测试最优点j=i+r-1;m[i][j]=m[i][i]+m[i+1][j]+A[i-1]*A[i]*A[j];s[i][j]=i;for(k=i+1;k<j;k++)//变换分隔位置,逐一测试{int t=m[i][k]+m[k+1][j]+A[i-1]*A[k]*A[j];if(t<m[i][j]){m[i][j]=t;s[i][j]=k;}}}}
}
void print(int i,int j){if(i==j){cout<<"A"<<i;return;}cout<<"(";print(i,s[i][j]);print(s[i][j]+1,j);//递归1到s[i][j]cout<<")";
}
int main(void){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n=0;while(scanf("%d",&A[n++])!=EOF){;}n-=2;MatrixChain(n);cout<<m[1][n]<<endl;print(1,n);return 0;
}
/*【问题描述】
使用动态规划算法解最长公共子序列问题,具体来说就是,依据其递归式自底向上的方式依次计算得到每个子问题的最优值。
【输入形式】
在屏幕上输入两个序列X和Y。
【输出形式】
序列Xi和Yj的最长公共子序列的长度。这个输出的最长公共子序列选取的方法是:当xi!=yj时,而c[i-1,j]==c[i,j-1],那么,c[i,j]是由c[i-1,j]得到的。其中c[i,j]中存放的是:序列Xi和序列Yj的最长公共子序列的长度。
当最长公共子序列为空时,输出最长公共子序列长度为0,最长公共子序列为:None。
【样例1输入】
ABCBDAB
BDCABA
【样例1输出】
4
BCBA
【样例1说明】
输入:第一行输入序列X的各元素,第二行输入序列Y的各元素。
输出:序列X和Y的最长公共子序列的长度为4,其中一个最长公共子序列为:BCBA。
【样例2输入】
ABCD
EFGH
【样例2输出】
0
None
【样例2说明】
输入:第一行输入序列X的各元素,第二行输入序列Y的各元素。
输出:序列X和Y的最长公共子序列为空,最长公共子序列的长度为0,最长公共子序列为:None。
【数据规模】序列长度不超过20。*/
#include<bits/stdc++.h>
using namespace std;
string x,y;
//0左上方,1左,2上
vector<vector<int>> c(30,vector<int>(31));
vector<vector<int>> b(30,vector<int>(31));
vector<vector<int>>lcs_length(){int m=x.size();int n=y.size();for(int i=1;i<=m;++i){for(int j=1;j<=n;++j){if(x[i-1]==y[j-1]){c[i][j]=c[i-1][j-1]+1;b[i][j]=0;}else if(c[i-1][j]>=c[i][j-1]){c[i][j]=c[i-1][j];b[i][j]=2;}else{c[i][j]=c[i][j-1];b[i][j]=1;}}}return c;
}
void print(int str1_len,int str2_len){if(str1_len==0||str2_len==0){return;}if(b[str1_len][str2_len]==0){print(str1_len-1,str2_len-1);cout<<x[str1_len-1];}else if(b[str1_len][str2_len]==2){print(str1_len-1,str2_len);}else{print(str1_len,str2_len-1);}
}
int main(void){cin>>x>>y;auto c=lcs_length();cout<<c[x.size()][y.size()]<<'\n';if(c[x.size()][y.size()]==0)cout<<"None";elseprint(x.size(),y.size());return 0;
}
/*【问题描述】
使用动态规划算法解最大子段和问题,具体来说就是,依据递归式,按照顺序求得子问题。
【输入形式】
在屏幕上输入一个序列元素,包含负整数、0和正整数。
【输出形式】
序列的最大子段和,及得到最大子段和时的起始和终止编号。可能会存在多个最优解, 样例输出的是起始编号最小的那个最优解, 并且最优解包含的元素最少.
【样例1输入】
-2 1 -1 6 -4 5 -5 -2 0 7
【样例1输出】
7
4
6
【样例1说明】
输入:10个数,元素间以空格分隔。
输出:序列的最大子段和7,得到最大子段和时的起始编号为4,终止编号为6。虽然最后一个元素7也是一个最优解,但是起始编号更大,因此不是所求的最优解。
【样例2输入】
1 -1 6
【样例2输出】
6
3
3
【样例2说明】
输入:3个数,元素间以空格分隔。
输出:序列的最大子段和6,得到最大子段和时的起始编号为3,终止编号为3。虽然{1, -1, 6}三个数加起来为6,但是包含了3个元素,而{6}只包含了1个元素,因此{6}是所求的最优解。
【样例3输入】
0 8
【样例3输出】
8
2
2
【样例3说明】
输入:2个数,元素间以空格分隔。
输出:序列的最大子段和8,得到最大子段和时的起始编号为2,终止编号为2。虽然{0, 8}二个数加起来为8,但是包含了2个元素,而{8}只包含了1个元素,因此{8}是所求的最优解。
【数据规模】
序列的长度不超过100。*/
#include<bits/stdc++.h>
using namespace std;
int a[150],n;
struct node{int sum;int l,r;
}; 
int main(){while(scanf("%d",&a[n])!=EOF){n++;}n--;if(n==0){cout<<0<<'\n'<<0<<'\n'<<0;return 0;}node ans,temp;ans=temp={INT_MIN,-1,-1};for(int i=0;i<=n;++i){if(temp.sum>0){temp.sum+=a[i];temp.r=i;}else{temp.sum=a[i];temp.l=temp.r=i;}if(temp.sum>ans.sum){ans=temp;}}cout<<ans.sum<<'\n';cout<<ans.l+1<<'\n';cout<<ans.r+1<<'\n';return 0;
}
/*【问题描述】
使用分治递归算法解最大子段和问题,具体来说就是,将序列分为长度相等的左右两段,分别求出这两段的最大子段和,包含左右部分子段的最大子段和,求这三种情况得到的最大子段和的最大值。
【输入形式】
在屏幕上输入一个序列元素,包含负整数、0和正整数。
【输出形式】
序列的最大子段和,及得到最大子段和时的起始和终止编号。可能会存在多个最优解, 样例输出的是起始编号最小的那个最优解, 并且最优解包含的元素最少.
【样例1输入】
-2 1 -1 6 -4 5 -5 -2 0 7
【样例1输出】
7
4
6
【样例1说明】
输入:10个数,元素间以空格分隔。
输出:序列的最大子段和7,得到最大子段和时的起始编号为4,终止编号为6。虽然最后一个元素7也是一个最优解,但是起始编号更大,因此不是所求的最优解。
【样例2输入】
1 -1 6
【样例2输出】
6
3
3
【样例2说明】
输入:3个数,元素间以空格分隔。
输出:序列的最大子段和6,得到最大子段和时的起始编号为3,终止编号为3。虽然{1, -1, 6}三个数加起来为6,但是包含了3个元素,而{6}只包含了1个元素,因此{6}是所求的最优解。
【样例3输入】
0 8
【样例3输出】
8
2
2
【样例3说明】
输入:2个数,元素间以空格分隔。
输出:序列的最大子段和8,得到最大子段和时的起始编号为2,终止编号为2。虽然{0, 8}二个数加起来为8,但是包含了2个元素,而{8}只包含了1个元素,因此{8}是所求的最优解。
【数据规模】序列的长度不超过100。*/
#include<bits/stdc++.h>
using namespace std;
int a[150],n;
struct node{int sum;int l,r;
}; 
node betterNode(const node& a,const node& b){//比较原则:(不重叠)大小>起始编号>元素个数;(重叠)大小>元素个数>起始编号if(a.r<b.l||b.r<a.l){//比较原则:(不重叠)大小>起始编号>元素个数if(a.sum>b.sum) return a;if(a.sum<b.sum) return b;if(a.l<b.l) return a;if(a.l>b.l) return b;if(a.r-a.l<b.r-b.l) return a;if(a.r-a.l>b.r-b.l) return b;return a;//a=b}else{//比较原则:(重叠)大小>元素个数>起始编号if(a.sum>b.sum) return a;if(a.sum<b.sum) return b;if(a.r-a.l<b.r-b.l) return a;if(a.r-a.l>b.r-b.l) return b;return a.l<b.l?a:b;}
}
node MaxSubSum(int left,int right){node ans;ans.sum=0;if(left==right) {ans.sum=a[left];//ans.sum=a[left]>0?a[left]:0;ans.l=left;ans.r=right;}else{int center=(left+right)/2;node leftans=MaxSubSum(left,center);node rightans=MaxSubSum(center+1,right);int lefts=0;node s1;s1.sum=INT_MIN;s1.r=center;for(int i=center;i>=left;i--){lefts+=a[i];if(lefts>s1.sum){s1.sum=lefts;s1.l=i;}}int rights=0;node s2;s2.sum=INT_MIN;s2.l=center+1;for(int i=center+1;i<=right;i++){rights+=a[i];if(rights>s2.sum){s2.sum=rights;s2.r=i;}}ans.sum=s1.sum+s2.sum;ans.l=s1.l;ans.r=s2.r;ans=betterNode(ans,leftans);ans=betterNode(ans,rightans);}return ans;
}
int main(){while(scanf("%d",&a[n])!=EOF){n++;}n--;if(n==0){cout<<0<<'\n'<<0<<'\n'<<0;return 0;}node ans=MaxSubSum(0,n);cout<<ans.sum<<'\n';cout<<ans.l+1<<'\n';cout<<ans.r+1<<'\n';return 0;
}
/*【问题描述】
使用动态规划算法解凸多边形最优三角剖分问题,具体来说就是,依据递归式,按照顺序求得子问题,使得该三角剖分中诸三角形上权之和为最小。
【输入形式】
在屏幕上输入凸多边形顶点个数和顶点坐标。按逆时针顺序输入顶点坐标。
【输出形式】
最优三角剖分后的三角形顶点。
【样例输入】
7
8 26
0 20
0 10
10 0
22 12
27 21
15 26
【样例输出】
012
234
024
456
046
【样例说明】
输入:顶点个数为7,每一行为一个顶点坐标,以空格分隔。如下图所示,第二行至第八行分别为顶点v0~v6的坐标。
输出:每一行为顺序产生的最优三角剖分后的三角形顶点。
【数据规模】
顶点个数不超过10。*/
#include<bits/stdc++.h>
using namespace std;
//t:i-1到j的凸多边形最优权值,w:i到j的权值,s:与vi-1和vj一起构成三角形的第3个顶点的位置
int t[100][100],w[100][100],s[100][100],n,inf=99999;
struct node{int x,y;
}p[100];
int W(int i,int k,int j){//三角形i,k,jreturn w[i][k]+w[k][j]+w[i][j];
}
void MIN_WEIGHT(){for(int i=1;i<n;i++)t[i][i]=0;for(int len=2;len<=n;len++){for(int i=1;i<=n-len+1;i++){int j=i+len-1;t[i][j]=inf;for(int k=i;k<j;k++){int q=t[i][k]+t[k+1][j]+W(i-1,k,j);if(q<t[i][j]){t[i][j]=q;s[i][j]=k;}}}}return;
}
void print(int i,int j){if(i==j) return;print(i,s[i][j]);print(s[i][j]+1,j);cout<<i-1<<s[i][j]<<j<<'\n';return;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>p[i].x>>p[i].y;w[i][i]=0;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int disx=p[j].x-p[i].x;int disy=p[j].y-p[i].y;w[i][j]=sqrt(disx*disx+disy*disy);}}//顶点i到j的距离MIN_WEIGHT();print(1,n-1);return 0;
}
/*【问题描述】
使用动态规划算法解0-1背包问题,具体来说就是,依据递归式,按照顺序求得子问题,使得选择合适物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。
【输入形式】
在屏幕上输入背包容量、物品数量、每件物品价值和重量。
【输出形式】
最优解时所选物品的价值总和及其编号。
【样例输入】
10
5
6 3 5 4 6
2 2 6 5 4
【样例输出】
15
1 2 5
【样例说明】
输入:背包容量10、物品数量5、每件物品价值6, 3, 5, 4, 6和重量2, 2, 6, 5, 4。
输出:最优解时选择物品的价值总和为15,编号为1,2,5。
提示:按照教材的代码求解最优解。也就是, 当m[i+1,j]和m[i+1,j-wi]+vi相同时,不选当前物品i,x[i]为0。
【数据规模】物品个数不超过10。*/
#include<bits/stdc++.h>
using namespace std;
//v:价值,w:质量,x:是否选,m[i][j]:剩 i 个物品 放入容量为 j 的背包的最大价值
int c,n,v[1000],w[1000],m[1000][1000],x[1000];
void Knapsack(){int jmax=min(w[n]-1,c);for(int j=0;j<=jmax;j++)m[n][j]=0;for(int j=w[n];j<=c;j++)m[n][j]=v[n];for(int i=n-1;i>=1;i--){jmax=min(w[i]-1,c);for(int j=0;j<=jmax;j++)m[i][j]=m[i+1][j];for(int j=w[i];j<=c;j++)m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);}
}
void Traceback(){int cc=c;for(int i=1;i<n;i++){if(m[i][cc]==m[i+1][cc])x[i]=0;else{x[i]=1;cc-=w[i];}}x[n]=m[n][cc]?1:0;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>c>>n;for(int i=1;i<=n;i++){cin>>v[i];}for(int i=1;i<=n;i++){cin>>w[i];}Knapsack();Traceback();cout<<m[1][c]<<'\n';for(int i=1;i<=n;i++)if(x[i]==1)cout<<i<<" ";return 0;
}

第四章——贪心算法 

/*【问题描述】
Dijkstra算法解决的是带权重的有向图上单源最短路径问题。所有边的权重都为非负值。设置顶点集合S并不断地作贪心选择来扩充这个集合。使用最小堆数据结构构造优先队列。第1个顶点为源。
【输入形式】
在屏幕上输入顶点个数和连接顶点间的边的权矩阵。
【输出形式】
顺序给出从源到各个顶点的最短距离及路径。
【样例输入】
5
0 10 0 30 100
0 0 50 0 0
0 0 0 0 10
0 0 20 0 60
0 0 0 0 0
【样例输出】
10: 1->2
50: 1->4->3
30: 1->4
60: 1->4->3->5
【样例说明】
输入:顶点个数为5。连接顶点间边的权矩阵大小为5行5列,位置[i,j]上元素值表示第i个顶点到第j个顶点的距离,0表示两个顶点间没有边连接。
输出:每行给出源1到其余各顶点(顺序给出)的最短距离及路径,冒号后有一空格。如果源1到该顶点没有路,则输出:"inf: 1->u",其中u为该顶点编号。
【数据规模】
顶点的个数不超过10。*/
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,g[15][15],pre[15],vis[15],dis[15];
struct edge{int u,v,w;bool operator<(const edge &a) const{return w>a.w;//如果当前边的权值 w 大于另一条边的权值 a.w,那么当前边的优先级更低。这样优先队列会将权值最小的边放在堆顶。}
};
priority_queue<edge> q;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){cin>>g[i][j];if(g[i][j]==0){g[i][j]=INF;}}for(int i=1;i<=n;i++){if(i!=1){pre[i]=1;dis[i]=g[1][i];q.push({1,i,dis[i]});}}int cnt=1,temp=1;//当前边数while(!q.empty()){edge t=q.top();q.pop();if(vis[t.v]) continue;vis[t.v]=1;cnt++;if(cnt==n) break;temp=t.v;//判断从1经过temp到i的距离是否更短for(int i=2;i<=n;i++){if(!vis[i]&&dis[temp]+g[temp][i]<dis[i]){dis[i]=dis[temp]+g[temp][i];pre[i]=temp;q.push({temp,i,dis[i]});}}}for(int i=2;i<=n;i++){if(dis[i]==INF){cout<<"inf: 1->"<<i<<'\n';continue;}stack<int> s;int t=i;while(t!=0){s.push(t);t=pre[t];}cout<<dis[i]<<": "<<s.top();s.pop();while(!s.empty()){cout<<"->"<<s.top();s.pop();}cout<<'\n';}return 0;
}
/*【问题描述】
使用贪心算法求解Huffman编码问题,具体来说就是,根据每个字符的出现频率,使用最小堆构造最小优先队列,构造出字符的最优二进制表示,即前缀码。
【输入形式】
在屏幕上输入字符个数和每个字符的频率。
【输出形式】
每个字符的Huffman编码。字符从a开始,依次为b, c, ...
【样例输入】
6
45 13 12 16 9 5
【样例输出】
a 0
b 101
c 100
d 111
e 1101
f 1100
【样例说明】
输入:字符个数为6,a至f每个字符的频率分别为:45, 13, 12, 16, 9, 5。
输出:a至f每个字符对应的Huffman编码。
说明:为了保证每个字符对应的Huffman编码的唯一性,对于所有测试样例,得到的Huffman编码树中,对于任何一个除叶结点以外的结点,其左儿子结点的频率小于其右儿子结点的频率(两者不会相等)。
【数据规模】
字符个数小于或等于10。*/
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,l;
struct node{int f=0,l=-1,r=-1,i=-1;bool operator<(node a) const{return f>a.f;}
}a[105];
string b[15];
priority_queue<node> q;
void BackTrace(int h,string s){if(a[h].i<n){b[h]=s;return;}BackTrace(a[h].l,s+'0');BackTrace(a[h].r,s+'1');
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i].f;a[i].i=i;q.push(a[i]);}l=n;while(q.size()!=1){node n1=q.top();q.pop();node n2=q.top();q.pop();a[++l].f=n1.f+n2.f;a[l].i=l;a[l].l=n1.i;a[l].r=n2.i;q.push(a[l]);}int head=q.top().i;BackTrace(head,"");for(int i=0;i<n;i++){char c=i+'a';cout<<c<<" "<<b[i]<<'\n';}return 0;
}
/*最小生成树 prime(贪心算法)
【问题描述】
Prim算法解决的是带权重的无向图上连接所有顶点的耗费最小的生成树。Q使用最小堆数据结构。
【输入形式】
在屏幕上输入顶点个数和连接顶点间的边的权矩阵。
【输出形式】
顺序输出按照贪心选择得到的各顶点序号,及该顶点的前驱顶点序号,及路径长度。
【样例1输入】
8
0 15 7 0 0 0 0 10
15 0 0 0 0 0 0 0
7 0 0 9 12 5 0 0 
0 0 9 0 0 0 0 0
0 0 12 0 0 6 0 0
0 0 5 0 6 0 14 8
0 0 0 0 0 14 0 3
10 0 0 0 0 8 3 0
【样例1输出】
3 1 7
6 3 5
5 6 6
8 6 8
7 8 3
4 3 9
2 1 15
【样例说明】
输入:顶点个数为8。连接顶点间边的权矩阵大小为8行8列,位置[i,j]上元素值表示第i个顶点到第j个顶点的距离,0表示两个顶点间没有边连接。
输出:顺序输出按照贪心选择得到的各顶点序号,及该顶点的前驱顶点序号,及路径长度。*/
#include<bits/stdc++.h>
using namespace std;
int n,g[15][15],vis[15];
const int INF=0x3f3f3f3f;
struct node{int u,v,w;bool operator<(const node &a)const{return w>a.w;}
};
priority_queue<node> q;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>g[i][j];if(g[i][j]==0)g[i][j]=INF;}}int temp=1,cnt=0;for(int i=2;i<=n;i++){if(g[temp][i]!=INF){q.push({temp,i,g[temp][i]});}}vis[1]=1;cnt++;while(!q.empty()){node t=q.top();q.pop();if(vis[t.v]) continue;vis[t.v]=1;cnt++;cout<<t.v<<' '<<t.u<<' '<<t.w<<'\n';if(cnt==n) break;temp=t.v;for(int i=1;i<=n;i++){if(!vis[i]&&g[temp][i]!=INF){q.push({temp,i,g[temp][i]});}}}return 0;
}

 

相关文章:

算法分析与设计-动态规划、贪心算法

目录 第三章——动态规划 第四章——贪心算法 第三章——动态规划 /*【问题描述】 使用动态规划算法解矩阵连乘问题&#xff0c;具体来说就是&#xff0c;依据其递归式自底向上的方式进行计算&#xff0c;在计算过程中&#xff0c;保存子问题答案&#xff0c;每个子问题只解…...

光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现

研究背景 ​背景与挑战​ 光伏发电受天气非线性影响,传统方法(统计模型、机器学习)难以处理高维时序数据,预测误差大。​创新模型提出​ 融合时序卷积网络(TCN)、高效通道注意力(ECANet)和门控循环单元(GRU)的混合架构。​方法论细节​ TCN:膨胀因果卷积提取长时序特…...

React组件基础

组件是什么&#xff1f; 概念&#xff1a;一个组件就是用户界面的一部分&#xff0c;它可以有自己的逻辑和外观&#xff0c;组件之间可以相互嵌套&#xff0c;也可以多次复用 组件化开发&#xff0c;可以让开发者像搭积木一样构建一个完整庞大的应用 react组件 在react中&a…...

2025年5月24日系统架构设计师考试题目回顾

当前仅仅是个人用于记录&#xff0c;还未做详细分析&#xff0c;待更新… 综合知识 设 x,y 满足约束条件&#xff1a;x-1>0, x-y<0, x-y-x<0, 则 y/x 的最大值是()。 A. 3 B. 2 C. 4 D. 1 申请软件著作权登记时应当向中国版本保护中心提交软件的鉴别材料&#xff…...

ABP 框架集成 EasyAbp.Abp.GraphQL 构建高性能 GraphQL API

&#x1f680; ABP 框架集成 EasyAbp.Abp.GraphQL 构建高性能 GraphQL API &#x1f4da; 目录 &#x1f680; ABP 框架集成 EasyAbp.Abp.GraphQL 构建高性能 GraphQL API&#x1f9ed; 背景与目标&#x1f6e0; 安装与依赖&#x1f4e6; 模块注册与启动MyProjectHttpApiHostMo…...

C# 用户控件(User Control)详解:创建、使用与最佳实践

在C#应用程序开发中&#xff0c;用户控件&#xff08;User Control&#xff09;是一种强大的工具&#xff0c;它允许开发者将多个标准控件组合成一个可复用的自定义组件。无论是Windows Forms还是WPF&#xff0c;用户控件都能显著提高UI开发的效率&#xff0c;减少重复代码&…...

OpenWrt 搭建 samba 服务器的方法并解决 Windows 不允许访问匿名服务器(0x80004005的错误)的方法

文章目录 一、安装所需要的软件二、配置自动挂载三、配置 Samba 服务器四、配置 Samba 访问用户和密码&#xff08;可选&#xff09;新建 Samba 专门的用户添加无密码的 Samba 账户使用root账户 五、解决 Windows 无法匿名访问Samba方案一 配置无密码的Samba账户并启用匿名访问…...

【 Redis | 完结篇 缓存优化 】

前言&#xff1a;本节包含常见redis缓存问题&#xff0c;包含缓存一致性问题&#xff0c;缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存击穿问题及其解决方案 1. 缓存一致性 我们先看下目前企业用的最多的缓存模型。缓存的通用模型有三种&#xff1a; 缓存模型解释Cache Asi…...

AI数据集构建:从爬虫到标注的全流程指南

AI数据集构建&#xff1a;从爬虫到标注的全流程指南 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AI数据集构建&#xff1a;从爬虫到标注的全流程指南摘要引言流程图&#xff1a;数据集构建全生命周期一、数据采…...

Android 颜色百分比对照

本文就是简单写个demo,打印下颜色百分比的数值.方便以后使用. 1: 获取透明色 具体的代码如下: /*** 获取透明色* param percent* param red* param green* param blue* return*/public static int getTransparentColor(int percent, int red, int green, int blue) {int alp…...

AI破局:饿了么如何搅动即时零售江湖

最近&#xff0c;即时零售赛道打的火热&#xff0c;对我们的生活也产生了不少的影响。 美女同事小张就没少吐槽“他们咋样了我不知道&#xff0c;奶茶那么便宜&#xff0c;胖了五六斤不说&#xff0c;钱包也空了&#xff0c;在淘宝买奶茶的时候&#xff0c;换了个手机还买了不少…...

04 APP 自动化- Appium toast 元素定位列表滑动

文章目录 一、toast 元素的定位二、滑屏操作 一、toast 元素的定位 toast 元素就是简易的消息提示框&#xff0c;toast 显示窗口显示的时间有限&#xff0c;一般3秒左右 # -*- codingutf-8 -*- from time import sleep from appium import webdriver from appium.options.an…...

判断它是否引用了外部库

在一个 C# 项目中&#xff0c;要系统性地判断它是否引用了外部库&#xff08;包括 NuGet 包、引用的 DLL、项目间依赖等&#xff09;&#xff0c;你应从以下几个关键维度入手进行检查和分析&#xff1a; 1. 检查 .csproj 项目文件 C# 项目使用 .csproj 文件&#xff08;MSBuil…...

物流项目第十期(轨迹微服务)

本项目专栏&#xff1a; 物流项目_Auc23的博客-CSDN博客 建议先看这期&#xff1a; MongoDB入门之Java的使用-CSDN博客 物流项目第九期&#xff08;MongoDB的应用之作业范围&#xff09;-CSDN博客 业务需求 快递员取件成功后&#xff0c;需要将订单转成运单&#xff0c;用…...

Python 入门到进阶全指南:从语言特性到实战项目

一、Python 简介 Python 是一种高级、跨平台、解释型编程语言&#xff0c;以简洁语法和高可读性著称&#xff0c;既适合编程初学者快速入门&#xff0c;也能满足资深开发者的复杂需求。其核心特性与应用场景如下&#xff1a; 核心特性解析 解释型语言&#xff1a;无需编译即可…...

【数据库】关系数据理论--规范化

1.问题的提出 关系模式由五部分组成&#xff0c;是一个五元组&#xff1a; R(U, D, DOM, F) &#xff08;1&#xff09;关系名R是符号化的元组语义 &#xff08;2&#xff09;U为一组属性 &#xff08;3&#xff09;D为属性组U中的属性所来自的域 &#xff08;4&#xff09;DOM…...

SQL 中 JOIN 的执行顺序优化指南

SQL 中 JOIN 的执行顺序优化指南 一、JOIN 执行顺序基础原理 在 SQL 查询中,JOIN的执行顺序是查询优化的重要环节。数据库引擎会根据多种因素决定最优的 JOIN 顺序: 逻辑执行顺序:SQL 语句的书写顺序(如 FROM → WHERE → GROUP BY)并不代表实际执行顺序物理执行顺序:由查…...

Oracle双平面适用场景讨论会议

4月28日&#xff0c;我在杭州组织召开了Oracle双平面会议讨论沙龙。在国产化数据库浪潮的今天&#xff0c;Oracle数据库作为国产数据库的应急库&#xff0c;在国产数据库发生故障或者性能下降时&#xff0c;如何更好的使用Oracle。会议主题如下&#xff1a; 1、背景与痛点速览&…...

OD 算法题 B卷【矩阵稀疏扫描】

文章目录 矩阵稀疏扫描 矩阵稀疏扫描 如果矩阵中的很多系数都为零&#xff0c;则为稀疏矩阵&#xff0c;给定一个矩阵&#xff0c;如果某行、列存在0的个数超出&#xff08;包含&#xff09;了行宽、列宽的一半&#xff08;整除&#xff09;&#xff0c;则认为该行、列为稀疏的…...

使用BERT/BiLSTM + CRF 模型进行NER进展记录~

使用代码处理数据集&#xff0c;发现了一些问题&#xff0c;以及解决办法~ 下载了一组数据集&#xff0c;数据存放在CSV中&#xff0c;GBK格式。如下&#xff1a; 首先对每一列直接进行NER抽取&#xff0c;结果非常不好&#xff1a; 几乎是乱抽取的&#xff0c;解决办法是自己创…...

HarmonyOS运动开发:精准估算室内运动的距离、速度与步幅

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在室内运动场景中&#xff0c;由于缺乏 GPS 信号&#xff0c;传统的基于卫星定位的运动数据追踪方法无法使用。因此&#xff0c;如何准确估算室内运动的距离、速度和步幅&#xff0c;…...

Web攻防-SQL注入高权限判定跨库查询文件读写DNS带外SecurePriv开关绕过

知识点&#xff1a; 1、Web攻防-SQL注入-高权限用户差异 2、Web攻防-SQL注入-跨库注入&文件读写&DNS带外 案例说明&#xff1a; 在应用中&#xff0c;数据库用户不同&#xff0c;可操作的数据库和文件读写权限不一&#xff0c;所有在注入过程中可以有更多的利用思路&a…...

C语言数据结构笔记3:Union联合体+结构体取8位Bool量

本文衔接上文要求&#xff0c;新增8位bool量的获取方式。 目录 问题提出&#xff1a; Union联合体struct结构体(方式1)&#xff1a; Union联合体struct结构体(方式2)&#xff1a; BYTE方式读取&#xff1a; 问题提出&#xff1a; 在STM32单片机的编程中&#xff0c;无法定义Boo…...

深拷贝与浅拷贝的区别?如何手写实现一个深拷贝?

导语&#xff1a; “深拷贝 VS 浅拷贝”是前端面试中绕不开的经典问题&#xff0c;既能考察 JavaScript 基础功&#xff0c;又能延伸至手写代码、递归、循环引用处理等进阶话题。本文从面试官视角解析其考察重点&#xff0c;并详解如何手写一个实用的深拷贝函数&#xff0c;助你…...

grafana 批量视图备份及恢复(含数据源)

一、grafana 批量视图备份 import requests import json import urllib3 import osfrom requests.auth import HTTPBasicAuthfilename_folders_map "folders_map.json" type_folder "dash-folder" type_dashboard "dash-db"# Grafana服务器地…...

SAP学习笔记 - 开发22 - 前端Fiori开发 数据绑定(Jason),Data Types(数据类型)

上一章讲了Icons&#xff08;图标&#xff09;&#xff0c;Icon Explorer。 SAP学习笔记 - 开发21 - 前端Fiori开发 Icons&#xff08;图标&#xff09;&#xff0c;Icon Explorer&#xff08;图标浏览器&#xff09;-CSDN博客 本章继续讲SAP Fiori开发的知识。 目录 1&…...

网络编程之TCP编程

基于 C/S &#xff1a;客户端&#xff08;client&#xff09;/服务器端&#xff08;server&#xff09; 1.流程 2. 函数接口 所有函数所需头文件&#xff1a; #include <sys/types.h> #include <sys/socket.h> 系统定义好了用来存储网络信息的结构体 ipv4通信使…...

C++进阶--C++11(04)

文章目录 C进阶--C11&#xff08;04&#xff09;lambdalambda表达式语法捕捉列表lambda的应用lambda的原理 包装器functionbind 总结结语 很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c…...

当AI遇上防火墙:新一代智能安全解决方案全景解析

在2025年网络安全攻防升级的背景下&#xff0c;AI与防火墙的融合正重塑安全防御体系。以下三款产品通过机器学习、行为分析等技术创新&#xff0c;为企业提供智能化主动防护&#xff1a; 1. 保旺达数据安全管控平台——AI驱动的动态治理引擎‌ 智能分类分级‌&#xff1a;基于…...

STL 库基础概念与示例

一、STL 库基础概念与示例 1. 容器分类 顺序容器 核心特性&#xff1a;按元素插入顺序存储&#xff0c;支持下标访问&#xff08;类似数组&#xff09;&#xff0c;动态扩展内存。典型容器&#xff1a;vector&#xff08;动态数组&#xff09;。适用场景&#xff1a;需要频繁…...