容斥原理,多步容斥

news2024/11/25 22:41:55
  1. 容斥意义法
    设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。
    如果我们要求方案数的话,通常情况下我们的把限制视为两个方面,一方面是总限制,一方面是对于每个物品的限制,这样设集合 S i S_i Si表示满足总限制以及对第 i i i个限制的方案构成的集合,若答案为 ∣ ⋃ n i = 1 S i ∣ \left| {\underset{i=1}{\overset{n}\bigcup}}S_i\right| i=1nSi ∣ ⋂ n i = 1 S i ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right| i=1nSi ,则可以使用容斥原理求解。
  2. 容斥符号法
    如果认为这个题是容斥,并且没什么太好的容斥想法,可以尝试容斥符号,例如把 = = = ≤ \leq ≥ \geq = = = ⊆ , ⊇ \subseteq,\supseteq ,(例如把双射容斥为子集), ⊂ \subset ⊆ \subseteq
  3. 修正法
    可以先编一个错误的答案,然后再考虑如何容斥掉多余的部分。很多较为复杂的题都可以修正。

容斥原理

一般的容斥原理就是设出集合,使得集合的并/交为答案,然后利用容斥原理求解的过程。
如果设不出集合,或者难以求解,则可以考虑更加复杂的计数方式,例如反演。

容斥原理:
补集转换 : S = U − S ‾ 补集转换:S=U-\overline{ S} 补集转换:S=US
德 ⋅ 摩根定律 : ⋃ n i = 1 S i ‾ = ⋂ n i = 1 S i ‾ , ⋂ n i = 1 S i ‾ = ⋃ n i = 1 S i ‾ 德·摩根定律:\overline{\underset{i=1}{\overset{n}{\bigcup}}S_i}=\underset{i=1}{\overset{n}{\bigcap}}\overline{S_i},\overline{\underset{i=1}{\overset{n}{\bigcap}}S_i }=\underset{i=1}{\overset{n}{\bigcup}}\overline{S_i} 摩根定律:i=1nSi=i=1nSi,i=1nSi=i=1nSi
集合的并 : ∣ ⋃ n i = 1 S i ∣ = ∑ ∅ ≠ T ⊆ [ n ] ( − 1 ) ∣ T ∣ − 1 ∣ ⋂ i ∈ T S i ∣ 集合的并:\left|\underset{i=1}{\overset{n}{\bigcup}}S_i \right|={\underset{\varnothing\not=T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|-1}\left |{\underset{i\in T}{\overset{}\bigcap}}S_i\right | 集合的并: i=1nSi ==T[n](1)T1 iTSi
集合的交 : ∣ ⋂ n i = 1 S i ∣ = ∑ T ⊆ [ n ] ( − 1 ) ∣ T ∣ ∣ ⋂ i ∈ T S i ‾ ∣ 集合的交:\left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|={\underset{T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|}\left|{\underset{i\in T}{\bigcap}\overline{S_i}}\right| 集合的交: i=1nSi =T[n](1)T iTSi

事实上求解集合的交的式子是由两步构成,根据德·摩根定律, ∣ ⋂ n i = 1 S i ∣ = U − ∣ ⋃ n i = 1 S i ‾ ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|=U-\left| {\underset{i=1}{\overset{n}\bigcup}}\overline{S_i}\right| i=1nSi =U i=1nSi
这说明集合的交=全集-补集的并,但是并集往往都比交集更难求解(除非集合之间没有交时,并集才好求解,但是我们在求解补集的并时,如果各个补集之间没有交,说明原集的并为全集,这样就不用求解了),因此我们注意到 ∣ ⋃ n i = 1 S i ‾ ∣ \left| {\underset{i=1}{\overset{n}\bigcup}}\overline{S_i}\right| i=1nSi 也是集合的交集的形式,因此我们套用容斥原理进行求解,这样的过程叫做有人称为多步容斥。

补集转化

补集转化较简单。

有标号连通图计数

n n n个节点的无向连通图有多少个,节点有标号,编号为 [ 1 , n ] [1,n] [1,n]
n < = 5000 n<=5000 n<=5000

这个题是朴素容斥,即考虑如何用容斥原理来修正答案。

f i f_i fi表示大小为 i i i的连通图数量,一个想法是首先连出一棵树,但是不太好搞,考虑补集转换,总边数为 i ( i − 1 ) 2 \frac{i(i-1)}2 2i(i1),总可能性为 h ( i ) = 2 i ( i − 1 ) 2 h(i)=2^{\frac {i(i-1)}2} h(i)=22i(i1)种,减去不连通的情况即可,那我们枚举 1 1 1号点所在的连通块大小 j j j,然后从剩下的 i − 1 i-1 i1个点中选出 j − 1 j-1 j1个点,情况数量为: f j ( i − 1 j − 1 ) f_j \begin{pmatrix}i-1\\ j-1\end{pmatrix} fj(i1j1),剩下 i − j i-j ij个点随意连边,转移方程为:
f i = h ( i ) − ∑ j < i f j ( i − 1 j − 1 ) h ( i − j ) f_i=h(i)-\underset{j<i}\sum f_j \begin{pmatrix}i-1\\ j-1\end{pmatrix}h(i-j) fi=h(i)j<ifj(i1j1)h(ij)

集合的交

容斥原理求解集合的交比较多,求解并反而比较少,因为题目往往要求同时遵守所有限制,而不是只遵守其中一个,这符合交的形式。

CF451E

限制 f i f_i fi是难以求解的,去掉 f i f_i fi的限制是好做的,很容易想到把它容斥掉。

容斥意义法:我们把选择 s s s朵花看做总限制,对第 i i i个花瓶的限制设出集合,则 S i S_i Si表示满足总共选了 s s s朵花,并且第 i i i个花瓶的花 ≤ f i \leq f_i fi的方案的集合,则答案为 ∣ ⋂ n i = 1 S i ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right| i=1nSi ,容易想到用容斥原理来求解。
则: ∣ ⋂ n i = 1 S i ∣ = ∑ T ⊆ [ n ] ( − 1 ) ∣ T ∣ ∣ ⋂ i ∈ T S i ‾ ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|={\underset{T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|}\left|{\underset{i\in T}{\bigcap}\overline{S_i}}\right| i=1nSi =T[n](1)T iTSi ,对于 T T T,我们要求出限制 i ∈ T i\in T iT均不合法的方案数,则我们指定物品 i i i至少选择了 f i + 1 f_i+1 fi+1次,剩下的次数为 s − ∑ i ∈ T ( f i + 1 ) s-\underset{i\in T}\sum (f_i+1) siT(fi+1),我们将它们划分到 n n n个花瓶中,根据集合的定义,我们不需要管这些花瓶的限制,这是隔板法问题,即 ( s − ∑ i ∈ T ( f i + 1 ) + n − 1 n − 1 ) \begin{pmatrix}s-\underset{i\in T}\sum (f_i+1)+n-1\\n-1\end{pmatrix} (siT(fi+1)+n1n1)。因此最终的式子就是: ∣ ⋂ n i = 1 S i ∣ = ∑ T ⊆ [ n ] ( − 1 ) ∣ T ∣ ( s − ∑ i ∈ T ( f i + 1 ) + n − 1 n − 1 ) \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|={\underset{T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|}\begin{pmatrix}s-\underset{i\in T}\sum (f_i+1)+n-1\\n-1\end{pmatrix} i=1nSi =T[n](1)T(siT(fi+1)+n1n1)

注:部分题解当中提到了“多重集的组合数”,很容易看成是“多重组合数”,但其实两者没啥关系。

代码(值域很大的组合数很难直接求解,我们把组合数转化为下降幂求解):

#include<iostream>
using namespace std;
const int N=20;
const long long M=1e9+7;
long long pow(long long a,long long b,long long c) {
	long long ans=1;
	while(b) {
		if(b&1) (ans=ans*a)%=M;
		(a=a*a)%=M;
		b>>=1;
	}
	return ans;
}
long long inv(long long x) {
	return pow(x,M-2,M);
}
long long a[N+5];
int n;
long long m;
long long d(long long x,long long k) {
	if(k==0) return 1;
	else return x%M*d(x-1,k-1)%M;
} 
long long calc(int s) {
	long long sum=0;
	for(int i=1;i<=n;i++) if(s>>i-1&1) sum+=a[i]+1;
	if(m-sum<0) return 0;
	return d(m-sum+n-1,n-1)*inv(d(n-1,n-1))%M;
} 
int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	long long ans=0;
	for(int s=0;s<1<<n;s++) 
		(ans+=calc(s)*(__builtin_popcount(s)&1?-1:1))%=M;
	cout<<(ans%M+M)%M;
}

P1450

容易想到把 d i d_i di容斥掉。

容斥意义:我们把购买了价值为 s s s的物品作为总限制,把对硬币 i i i的数量的限制作为集合,则设 S i S_i Si表示满足对第 i i i个硬币数量限制,且购买了价值为 s s s的物品的方案的集合,则答案为 ∣ ⋂ 4 i = 1 S i ∣ \left| {\underset{i=1}{\overset{4}\bigcap}}S_i\right| i=14Si ,接下来根据 ∣ ⋂ n i = 1 S i ∣ = ∑ T ⊆ [ n ] ( − 1 ) ∣ T ∣ ∣ ⋂ i ∈ T S i ‾ ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|={\underset{T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|}\left|{\underset{i\in T}{\bigcap}\overline{S_i}}\right| i=1nSi =T[n](1)T iTSi ,我们要求解补集的交,即对于一些硬币的限制不满足的方案数。
如果硬币 i ∈ T i\in T iT的限制不满足,显然它选了至少 d i + 1 d_i+1 di+1个,我们提前dp出 f x f_x fx表示购买了价值为 s s s物品的完全背包方案数,则此时的方案数量为 f s − ∑ i ∈ T ( d i + 1 ) f_{s-\underset{i\in T}\sum(d_i+1)} fsiT(di+1)

则本次询问的答案为: ∣ ⋂ 4 i = 1 S i ∣ = ∑ T ⊆ [ 4 ] ( − 1 ) ∣ T ∣ f s − ∑ i ∈ T ( d i + 1 ) \left| {\underset{i=1}{\overset{4}\bigcap}}S_i\right|={\underset{T\subseteq [4]}{\overset{}\sum}}(-1)^{|T|}f_{s-\underset{i\in T}\sum(d_i+1)} i=14Si =T[4](1)TfsiT(di+1)

每做一次询问,我们就进行一次容斥,复杂度为 O ( 2 4 ) O(2^4) O(24),因此总复杂度为 ( n ⋅ 2 4 ) (n\cdot 2^4) (n24)

#include<iostream>
#include<algorithm>
using namespace std;
const int R=100000;
long long f[R+5];
int a[10],b[10];
long long calc(int s,int x) {
	int t=1;
	while(s) x-=(s&1)*a[t]*(b[t]+1),s>>=1,t++;
	if(x<0) return 0;
	else return f[x];
}
int main() {
	int n;
	cin>>a[1]>>a[2]>>a[3]>>a[4]>>n;
	f[0]=1;
	for(int i=1;i<=4;i++)
		for(int j=a[i];j<=R;j++) 
			f[j]+=f[j-a[i]];
	while(n--) {
		int x;
		cin>>b[1]>>b[2]>>b[3]>>b[4]>>x;
		long long ans=0;
		for(int i=0;i<1<<4;i++) 
			ans+=calc(i,x)*(__builtin_popcount(i)&1?-1:1);
//		cout<<"***";
		cout<<ans<<endl;
	}
}

UVA11806

将 k 个棋子放在 n × m n\times m n×m 的棋盘上。我们将连续的紧贴棋盘边界的放置棋子位置称为边缘。问上下左右四个边缘上都至少放置一个棋子的棋子放置方案共有多少种.
可以做到 n × m ≤ 1 0 5 , k ≤ 1 0 5 n\times m\leq 10^5,k\leq 10^5 n×m105,k105

容斥意义:我们总共四个边缘,我们设 S i S_i Si表示第 i i i个边缘有棋子的所有方案构成的集合,则答案为 ∣ ⋂ S ∣ \left|\bigcap S\right| S,求解补集相当于指定一些边缘没有棋子,剩下位置随意,容斥原理求解即可。

互质问题1

给出一个整数 n n n和一个整数 m m m,求 [ 1 , m ] [1,m] [1,m]之中有多少个数与 n n n互质。
1 ≤ n , m ≤ 1 0 18 1\leq n,m\leq 10^{18} 1n,m1018

首先我们会分析出来,如果与 n n n互质,则说明这个数不含有 n n n的任何一个质因子,因此可以容斥意义:设 S i S_i Si表示 [ 1 , m ] [1,m] [1,m]中不含有 n n n的第 i i i个本质不同质因子的数的集合,则答案为 ∣ ⋂ S i ∣ |\bigcap S_i| Si,对应的 T T T相当于求出 [ 1 , m ] [1,m] [1,m]之中有多少个数含有质因子集合 T T T,则方案数为 ⌊ m ∏ i ∈ T p i ⌋ \left\lfloor\frac m{\underset{i\in T}\prod p_i}\right\rfloor iTpim

这个容斥的时间复杂度为 O ( 2 ∣ P ∣ ) O\left(2^{|P|}\right) O(2P),其中 P P P表示 n n n的本质不同质因子构成的集合,则 ∣ P ∣ = O ( ln ⁡ ln ⁡ n ) |P|=O(\ln\ln n) P=O(lnlnn)

互质问题2

给出一个整数 m m m,一个具有 n n n个元素的数组,求出 [ 1 , m ] [1,m] [1,m]中有多少个数与 n n n的所有元素互质:
n ≤ 20 , m ≤ 2 62 n\leq 20,m\leq 2^{62} n20,m262

首先会考虑到,与 n n n中所有元素互质,相当于没有 n n n中任何一个元素的任何一个质因子,因此我们可以将求出 n n n中的本质不同质因子集合,设为 P P P,则问题转化为求出 [ 1 , n ] [1,n] [1,n]当中有多少个数与 ∏ P \prod P P互质。

POJ1091

给定 n n n个数,其数值取值范围为 [ 1 , m ] [1,m] [1,m],请问有多少种情况使得这 n n n个数与 m m m的最大公约数为 1 1 1
n , m = 1 0 5 n,m=10^5 n,m=105

相当于对序列计数,满足: { a n } , a i ∈ [ 1 , m ] , gcd ⁡ ( gcd ⁡ n i = 1 { a i } , m ) = 1 \{a_n\},a_i\in[1,m],\gcd\left(\underset{i=1}{\overset n\gcd}\{a_i\},m\right)=1 {an},ai[1,m],gcd(i=1gcdn{ai},m)=1

我们会发现,如果序列的 gcd ⁡ \gcd gcd m m m不互质,说明它含有 m m m的某些质因子,则说明序列中的每个数都含有这些质因子。因此我们可以用容斥意义来做这个题:设 S i S_i Si表示 m m m的第 i i i个本质不同质因子不出现在序列最大公约数的方案的集合,则答案为 ∣ ⋂ S i ∣ |\bigcap S_i| Si,那么补集为指定 m m m的质因子集合的子集 T T T是序列每一个元素的约数,也就是说序列每一个数都是 ∏ i ∈ T p i \underset{i\in T}\prod p_i iTpi的倍数,那这样的序列共有 ⌊ m ∏ i ∈ T p i ⌋ n \left\lfloor\frac m{\underset{i\in T}\prod p_i}\right\rfloor^n iTpimn,容斥原理求解即可。

集合的并

HDU1796

题意简述:给出一个具有 n n n个元素的数组和一个整数 m m m,求出 [ 1 , m ] [1,m] [1,m]中有多少个数至少能整除 a a a数组中的一个数。
n ≤ 10 , a i , m ≤ 2 31 n\leq 10,a_i,m\leq 2^{31} n10,ai,m231

可以想到,能够整除 x x x的数的数量为 σ 0 ( x ) \sigma_0(x) σ0(x),能够整除 y y y的数量为 σ 0 ( y ) \sigma_0(y) σ0(y),还要在减去算重的数量,也就是既整除 x x x又整除 y y y的数,数量为 σ 0 ( gcd ⁡ ( x , y ) ) \sigma_0(\gcd(x,y)) σ0(gcd(x,y))
其中 σ 0 \sigma_0 σ0表示约数个数函数。

容斥意义:我们把值域为 [ 1 , m ] [1,m] [1,m]作为总限制,对“能够整除 a i a_i ai”设计集合,则 S i S_i Si表示能够整除 a i a_i ai的数的集合,答案为 ∣ ⋃ n i = 1 S i ∣ \left|\underset{i=1}{\overset{n}{\bigcup}}S_i \right| i=1nSi ,则我们根据 ∣ ⋃ n i = 1 S i ∣ = ∑ ∅ ≠ T ⊆ [ n ] ( − 1 ) ∣ T ∣ − 1 ∣ ⋂ i ∈ T S i ∣ \left|\underset{i=1}{\overset{n}{\bigcup}}S_i \right|={\underset{\varnothing\not=T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|-1}\left |{\underset{i\in T}{\overset{}\bigcap}}S_i\right | i=1nSi ==T[n](1)T1 iTSi ,只需要求解集合的交即可。
也就是对于 T T T来说,求出是所有能够整除 i ∈ T i\in T iT的数的数量,也就是 σ 0 ( gcd ⁡ i ∈ T { a i } ) \sigma_0\left({\underset{i\in T}\gcd \{a_i\}}\right) σ0(iTgcd{ai}),因此答案为 ∣ ⋃ n i = 1 S i ∣ = ∑ ∅ ≠ T ⊆ [ n ] ( − 1 ) ∣ T ∣ − 1 σ 0 ( gcd ⁡ i ∈ T { a i } ) \left|\underset{i=1}{\overset{n}{\bigcup}}S_i \right|={\underset{\varnothing\not=T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|-1}\sigma_0\left({\underset{i\in T}\gcd \{a_i\}}\right) i=1nSi ==T[n](1)T1σ0(iTgcd{ai})
约数个数函数可以通过预处理质因子等手段求出。

时间复杂度为 O ( 2 n ) O(2^n) O(2n)

P3349

这个题还可以子集反演,本质上是一样的。不过这个题完全可以直接容斥。

我们要建立一个从树节点到图节点的映射 f f f,使得 f f f为一个双射,这是不好限制的,我们把它转化为, f f f共有 n n n个不同的像。

那我们设 S i S_i Si表示第 i i i个图节点是像的方案的集合,则答案为 ∣ ⋂ n i = 1 S i ∣ = ∑ T ⊆ [ n ] ( − 1 ) ∣ T ∣ ∣ ⋂ i ∈ T S i ‾ ∣ \left| {\underset{i=1}{\overset{n}\bigcap}}S_i\right|={\underset{T\subseteq [n]}{\overset{}\sum}}(-1)^{|T|}\left|{\underset{i\in T}{\bigcap}\overline{S_i}}\right| i=1nSi =T[n](1)T iTSi ,这样 T T T相当于求解指定一些图节点不能使用,剩下的节点随便。

s = [ n ] ⊕ T s=[n]\oplus T s=[n]T,此时这个交集的大小是可以树形dp出来的,设 f u , i f_{u,i} fu,i表示dp到了树节点 u u u,节点 u u u对应图节点 i i i的方案数,则转移就是,对于 u u u的儿子 v v v对应的图节点为 j j j,只要 ( i , j ) (i,j) (i,j)在图上有连边,并且 i , j ∈ s i,j\in s i,js,就可以转移:

void dfs(int u,int fa) {
	for(int v=1;v<=n;v++)
		if(b[u][v]&&(v^fa)) {
			dfs(v,u);
			for(int i=1; i<=n; i++)
				if(s>>i-1&1) {
					long long sum=0;
					for(int j=1; j<=n; j++)
						if(s>>j-1&1)
							if(a[i][j])
								sum+=f[v][j];
					f[u][i]*=sum;
				}
		}
}

显然初值为 f u , i ∈ s = 1 f_{u,i\in s}=1 fu,is=1

模拟赛题

在这里插入图片描述
其中 n ≤ 20 , m ≤ 150 , k ≤ 7 , d ≤ 1 0 9 n\leq 20,m\leq 150,k\leq 7,d\leq 10^9 n20,m150,k7,d109

这个形式看起来非常的容斥,首先考虑没有 k k k的限制怎么做。这是个经典问题,设 f i , j f_{i,j} fi,j表示第 i i i秒在 j j j节点的方案数,就可以写出转移,观察到 n n n特别小, d d d特别大,因此可以矩阵快速幂加速转移。

那有了 k k k怎么做呢?首先可以子集反演,但是容斥意义还是更简单一点的。
S i S_i Si表示经过 i i i节点,到了第 d d d天的所有方案的集合,则答案为 ∣ ⋂ S i ∣ |\bigcap S_i| Si,补集相当于指定一些节点不能走,也就是禁止关于它们的转移,对于每个 T T T跑一次dp即可。
时间复杂度 O ( 2 k ⋅ n 3 ) O(2^k\cdot n^3) O(2kn3)

后记

于是皆大欢喜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSCode 如何设置背景图片

VSCode 设置背景图片 1.打开应用商店&#xff0c;搜索 background &#xff0c;选择第一个&#xff0c;点击安装。 2. 安装完成后点击设置&#xff0c;点击扩展设置。 3.点击在 settings.json 中编辑。 4.将原代码注释后&#xff0c;加入以下代码。 // { // "workben…

中海达守护电力人员作业安全

近日&#xff0c;中海达为电网某换流站作业人员提供的160余套北斗高精度定位产品顺利完成交付。通过使用北斗高精度定位技术&#xff0c;帮助换流站实现了人员&#xff08;车辆&#xff09;位置实时定位、电子围栏实时预警、远程作业指导等应用效果&#xff0c;用高科技保障电网…

红米redmi note7救砖/线刷/ROOT教程

一直循环开机界面&#xff0c;需要刷机 准备 使用windows电脑安装如下 MiUsbDriver.exe电脑连接小米手机驱动。可以去https://www.miui.com/unlock/index.html下载压缩包&#xff0c;里面有这个程序小米ROM固件包找一个适合自己手机型号的的即可&#xff0c;官网也可以下载但…

3D RPG Course | Core 学习日记三:Navigation智能导航地图烘焙

前言 前面我们已经绘制好了一个简单的地图场景&#xff0c;现在我们需要使用Navigation给地图做智能导航&#xff0c;以实现AI自动寻路&#xff0c;以及设置地图的可行走区域以及不可行走区域&#xff0c;Navigation的基础知识、原理、用法在Unity的官方文档&#xff0c;以及网…

Modelsim 使用教程(2)——Basic Simulation

一、概述 在本文中&#xff0c;我们将介绍Modelsim基本的仿真流程&#xff0c;包括有&#xff1a; Create the Working Design Library&#xff08;创建工具库&#xff09; Compile the Design Units&#xff08;编译设计单元&#xff09; Optimize the Design&#xff08;优化…

单工通信、半双工通信、全双工通信分别是什么?

单工通信&#xff1a; 单工通信是一种单向传输数据的通信方式&#xff0c;只允许信息在一个方向上流动。在单工通信中&#xff0c;通信的两个节点中的一个节点只能作为发送方&#xff0c;而另一个节点只能作为接收方。发送方只负责发送数据&#xff0c;而接收方只负责接收数据&…

LLMs之Agent之AutoGen:AutoGen的简介、安装、使用方法之详细攻略

LLMs之Agent之AutoGen&#xff1a;AutoGen的简介、安装、使用方法之详细攻略 目录 AutoGen的简介、安装、使用方法 1、多Agent对话框架 2、AutoGen的对话流程 3、增强的LLM推理 AutoGen的安装 1、安装 2、快速测试 AutoGen的使用方法 1、基础用法 (1)、启动两个代理之…

C++:map和set的基本使用

文章目录 搜索模型关联式容器setset的基本使用set的其他使用 multisetmapmap的基本使用map中的[] multimap 搜索模型 在实际搜索中有两个搜索模型&#xff1a;Key的搜索模型和Key/Value的搜索模型 Key的搜索模型&#xff1a; 简单来说就是在一个搜索树&#xff0c;搜索树中的…

大桌子安装笔记

单位弄了个服务器&#xff0c;里面全是虚拟机&#xff0c;自己也学着建了一个测试用的虚拟机&#xff0c;不知道干点啥好&#xff0c;朋友说做个网盘吧&#xff0c;就用大桌子。 于是&#xff0c;干起来&#xff0c;不会配制&#xff0c;就跟朋友一步一步学起来。 他说&#…

服务熔断保护实践--Sentinal

目录 概述 环境说明 步骤 Sentinel服务端 Sentinel客户端 依赖 在客户端配置sentinel参数 测试 保护规则设置 设置资源名 设置默认的熔断规则 RestTemplate的流控规则 Feign的流控规则 概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xf…

LangChain介绍及代码实践

一、简介 LangChian 作为一个大语言模型开发框架&#xff0c;是 LLM 应用架构的重要一环。那什么是 LLM 应用架构呢&#xff1f;其实就是指基于语言模型的应用程序设计和开发的架构。 LangChian 可以将 LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起&a…

如何看待将本增效?

如何看待将本增效&#xff1f; 么是降本增效&#xff1f;就是公司里&#xff0c;增进收益的动作要多做&#xff0c;无效的动作要少做&#xff0c;甚至不做。什么叫有效&#xff1f;回到公司的经营目标上去&#xff0c;企业的管理就是目标管理。降本&#xff0c;需要卓越运营&a…

NLP学习笔记:使用 Python 进行NLTK

一、说明 本文和接下来的几篇文章将介绍 Python NLTK 库。NLTK — 自然语言工具包 — NLTK 是一个强大的开源库&#xff0c;用于 NLP 的研究和开发。它内置了 50 多个文本语料库和词汇资源。它支持文本标记化、词性标记、词干提取、词形还原、命名实体提取、分割、分类、语义推…

【计算系统】5分钟了解超算,高性能计算,并行计算,分布式计算,网格计算,集群计算以及云计算的区别

5分钟了解超算&#xff0c;高性能计算&#xff0c;并行计算&#xff0c;分布式计算&#xff0c;网格计算&#xff0c;集群计算以及云计算的区别 1. 超算2. 高性能计算3. 并行计算4. 分布式计算5. 网格计算6. 集群计算7. 云计算小结相关资料 1. 超算 超级计算机&#xff08;Sup…

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View&#xff0c;Kotlin&#xff08;4&#xff09; import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import a…

MATLAB 支持向量机(SVM)

MATLAB 支持向量机&#xff08;SVM&#xff09;详细解释&#xff08;含代码&#xff09; 基础线性可分最大间隔超平面 SVM分类基本代码和工具二分类线性非线性 多分类详细解释 基础 线性可分 简单来讲就是如何将两个数据用点、直线、平面分开。。。。。 二维空间中&#xff…

ios原生分享

什么是 ios 系统的原生分享呢&#xff0c;如下图所示 具体使用系统UIActivityViewController&#xff0c;完整代码如下&#xff1a; -(void)shareAny:(NSString *)text url:(NSString *)_url imagePath:(NSString *)_imagePath {NSLog("shareAny, text:%, url:%, imagePa…

Security ❀ DNS协议常见DOS攻击详解

文章目录 1. DNS协议基础概述2. DNS报文详解2.1. DNS Request 请求包2.2. DNS Reply 响应包 3. DNS Request Flood3.1. 攻击原理3.2. 防护方法3.2.1. TC源认证3.2.2. 被动防御3.2.3. CNAME防护模式3.2.4. *CANME类型解析过程** 4. DNS Reply Flood4.1. 攻击原理4.2. 防护方法 5…

【44.全排列Ⅱ】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:vector<vector<int>> ret;vector<int> path;vector<bool> check;vector<vector<int>> permuteUnique(vector<int>&am…

C语言--温度转化(把华氏度转换为摄氏度)

一.问题描述: 有人用温度计测量出用华氏法表示的温度,今要求把它转换为以摄氏法表示的温度,转换公式如下: 这个代码是C语言的入门代码&#xff0c;难点在于5/9在程序中如何写出。在计算机中5/9等于1。 /符号&#xff1a;整除问题(整数/整数 结果是丢弃小数的整数) 5/2 2。那…