2-SAT问题相关理论和算法

前言

SAT 问题简介

SAT是可满足性、适定性(Satisfiability)问题的简称。一般形式为k-适定性问题或k-可满足性问题,简称 k-SAT。

何为布尔可满足性问题?给定一条真值表达式,包含逻辑变量、逻辑与、逻辑或以及非运算符,如:
( a ∧ ¬ b ∧ ( ¬ ( c ∨ d ∨ ¬ a ) ∨ ( b ∧ ¬ d ) ) ) ∨ ( ¬ ( ¬ ( ¬ b ∨ a ) ∧ c ) ∧ d ) (a\wedge\neg b\wedge(\neg(c\vee d\vee\neg a)\vee(b\wedge\neg d)))\vee(\neg(\neg(\neg b\vee a)\wedge c)\wedge d) (a¬b(¬(cd¬a)(b¬d)))(¬(¬(¬ba)c)d)

是否存在一组对这些变量的赋值,使得整条式子最终的运算结果为 t r u e true true?若可以,那么这个性质被称为这条逻辑公式的可满足性(satisfiability),如何快速高效地判断任意指定逻辑公式的可满足性是理论计算机科学中的一个重要的问题,也是第一个被证明为NP-完全(NP-complete,NPC)的问题。

k > 2 k>2 k>2时,可满足性问题是NPC问题,因此我们一般只研究 k = 2 k=2 k=2的情况。

2-SAT算法

通常所说的2-SAT问题往往需要我们处理对于 n n n个布尔变量 { x n } ( x i ∈ { 0 , 1 } ) \{x_n\}\left(x_i\in\{0,1\}\right) {xn}(xi{0,1}) m m m个限制。
其每个限制都形如一个 ∨ \vee 运算符连接的两个简单限制条件,简单限制条件为 x i = t r u e x_i=true xi=true(记作 x i x_i xi)或 x i = f a l s e x_i=false xi=false(记作 ¬ x i \neg x_i ¬xi),因此限制条件一共有四种:

  • s k = x i ∨ x j s_k=x_i\vee x_j sk=xixj
  • s k = ¬ x i ∨ x j s_k=\neg x_i\vee x_j sk=¬xixj
  • s k = x i ∨ ¬ x j s_k=x_i\vee\neg x_j sk=xi¬xj
  • s k = ¬ x i ∨ ¬ x j s_k=\neg x_i\vee \neg x_j sk=¬xi¬xj

我们需要满足: ⋀ m i = 1 s i = t r u e \underset{i=1}{\overset m{ \bigwedge }}s_i=true i=1msi=true
也就是需要每一个 s k s_k sk都为真。

其处理方法为:
首先建图,对变量 x i x_i xi建立两个点 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1表示选 x i = 0 x_i=0 xi=0 x i = 1 x_i=1 xi=1,然后在新图上对每个限制按照如下方式连边。
例如对于限制 s k s_k sk,我们讨论这条限制下 a , b ∈ { 0 , 1 } a,b\in\{0,1\} a,b{0,1} x i = a x_i=a xi=a时是否一定有 x j = b x_j=b xj=b,如果一定有,就连有向边 x i , a → x j , b x_{i,a}\rightarrow x_{j,b} xi,axj,b
同理我们讨论 x j = a x_j=a xj=a是否一定有 x i = b x_i=b xi=b,如果一定有,就连有向边 x j , a → x i , b x_{j,a}\rightarrow x_{i,b} xj,axi,b

感性理解这张图,如果 x i , a x_{i,a} xi,a可达 x j , b x_{j,b} xj,b,则说明 x i = a x_i=a xi=a可以推出 x j = b x_j=b xj=b,或者说 x i = a x_i=a xi=a蕴含了 x j = b x_j=b xj=b

因此我们知道这个可满足性问题无解的充要条件为,存在 i i i使得 x i , 0 x_{i,0} xi,0 x i , 1 x_{i,1} xi,1处于同一个强连通分量内,这意味着 x i = 0 x_i=0 xi=0推出 x i = 1 x_i=1 xi=1,同时 x i = 1 x_i=1 xi=1推出 x i = 0 x_i=0 xi=0,因此无解。

因此我们可以使用Tarjan算法求强连通分量来判断2-SAT问题是否有解,事实上我们还可以输出一组可行解。
具体方法如下,首先对我们建图的图求强连通分量缩点,得到一张DAG,然后对DAG进行拓扑排序,则 x i x_i xi对应的两个节点中,对应的强连通分量拓扑序较为靠后的节点对应的权值,是 x i x_i xi取得的权值。
其原理是,如果 x i = a x_i=a xi=a会推出 x i = b x_i=b xi=b,那么就不能选 x i = a x_i=a xi=a,此时只能选 x i = b x_i=b xi=b

这样我们就用Tarjan算法取得了可满足性问题的 O ( n + m ) O(n+m) O(n+m)做法。

具体的连边方式

首先,所有限制都可以转化为 x i = a ⇒ x j = b x_i=a\Rightarrow x_j=b xi=axj=b的形式进行连边,这里记录一些经典的连边方式,这样就不需要每次做转化了。

  • x i = a ⇒ x j = b x_i=a\Rightarrow x_j=b xi=axj=b
    • x i , a → x j , b x_{i,a}\rightarrow x_{j,b} xi,axj,b
    • x j , ¬ b → x i , ¬ a x_{j,\neg b}\rightarrow x_{i,\neg a} xj,¬bxi,¬a
  • a ∨ b a\vee b ab
    • a 0 → b 1 a_0\rightarrow b_1 a0b1
    • b 0 → a 1 b_0\rightarrow a_1 b0a1
  • ¬ a ∨ b \neg a\vee b ¬ab
    • a 1 → b 1 a_1\rightarrow b_1 a1b1
    • b 0 → a 0 b_0\rightarrow a_0 b0a0
  • ¬ a ∨ ¬ b \neg a\vee\neg b ¬a¬b
    • a 1 → b 0 a_1\rightarrow b_0 a1b0
    • b 1 → a 0 b_1\rightarrow a_0 b1a0
  • a = t r u e a=true a=true
    • 转化为 a = 0 ⇒ a = 1 a=0\Rightarrow a=1 a=0a=1
    • a 0 → a 1 a_0\rightarrow a_1 a0a1
  • a = f a l s e a=false a=false
    • 转化为 a = 1 ⇒ a = 0 a=1\Rightarrow a=0 a=1a=0
    • a 1 → a 0 a_1\rightarrow a_0 a1a0
  • a = b a=b a=b
    • 转化为 a = 1 ⇒ b = 1 a=1\Rightarrow b=1 a=1b=1,且 a = 0 ⇒ b = 0 a=0\Rightarrow b=0 a=0b=0
  • a ≠ b a\not=b a=b a ⊗ b a\otimes b ab
    • 转化为 a = 0 ⇒ b = 1 a=0\Rightarrow b=1 a=0b=1,且 a = 1 ⇒ b = 0 a=1\Rightarrow b=0 a=1b=0
  • x 1 , x 2 , x 3 , . . . x_1,x_2,x_3,... x1,x2,x3,...至多一个为真
    • 转化为:
      • x 1 = 1 ⇒ x 2 = 0 x_1=1\Rightarrow x_2=0 x1=1x2=0,且 x 1 = 1 ⇒ x 3 = 0 x_1=1\Rightarrow x_3=0 x1=1x3=0,…
      • x 2 = 1 ⇒ x 1 = 0 x_2=1\Rightarrow x_1=0 x2=1x1=0,且 x 2 = 1 ⇒ x 3 = 0 x_2=1\Rightarrow x_3=0 x2=1x3=0,…
      • x 3 = 1 ⇒ x 1 = 0 x_3=1\Rightarrow x_1=0 x3=1x1=0,且 x 3 = 1 ⇒ x 2 = 0 x_3=1\Rightarrow x_2=0 x3=1x2=0,…
    • 注意这样连出来的边数是 O ( m 2 ) O(m^2) O(m2)级别的
  • x 1 , x 2 , x 3 , . . . x_1,x_2,x_3,... x1,x2,x3,...至多 k > 1 k>1 k>1个为真
    • 2-sat一般不能做
  • x 1 , x 2 , x 3 , . . . x_1,x_2,x_3,... x1,x2,x3,...至少 k ≥ 1 k\geq 1 k1个为真
    • 2-sat一般不能做
  • x 1 , x 2 , x 3 , . . . x_1,x_2,x_3,... x1,x2,x3,...恰好 k ≥ 1 k\geq 1 k1个为真
    • 2-sat一般不能做

其中一些限制条件也可以在连边的时候判掉。

2-SAT原理

我们现在有 n n n个布尔变量,称为 { x n } ( x i ∈ { 0 , 1 } ) \{x_n\}\left(x_i\in \{0,1\}\right) {xn}(xi{0,1}),现在给出 m m m条限制,每一条限制都形如:
x i = a x_i=a xi=a时,有 x j = b x_j=b xj=b a , b ∈ { 0 , 1 } a,b\in\{0,1\} a,b{0,1}
即: x i = a ⇒ x j = b x_i=a\Rightarrow x_j=b xi=axj=b

接下来说一下如何求解这个问题。

图的建立

点的意义

我们使用图论方法对这个问题进行求解,按照经典套路,我们需要在图上定义一个集合,然后把原问题的意义在集合内体现出来。

具体来说,我们有一个集合 S S S,同时在图上有 2 n 2n 2n个点,其中每个比尔变量 x i x_i xi对应两个点,一个叫做 x i , 0 x_{i,0} xi,0,另一个叫做 x i , 1 x_{i,1} xi,1
我们规定 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1当中只能恰好有一个属于集合 S S S,如果 x i , 0 ∈ S x_{i,0}\in S xi,0S,则 x i = 0 x_i=0 xi=0;如果 x i , 1 ∈ S x_{i,1}\in S xi,1S,则 x i = 1 x_i=1 xi=1

我们知道根据限制能够推出一些关系,例如如果 x i , a ∈ S x_{i,a}\in S xi,aS,那么一定有 x j , b ∈ S x_{j,b}\in S xj,bS,我们希望用边表示这一种关系,因此我们规定对于任意元素 u ∈ S u\in S uS u u u在图上可达的所有点 v v v均属于 S S S

边的意义

刚才已经定义了图中的点,以及集合 S S S。现在具体说一下图中的边是如何连接的:
对于限制: x i = a ⇒ x j = b x_i=a\Rightarrow x_j=b xi=axj=b

我们考虑一个一个向着集合 S S S内添加元素的过程,我们必然是找到一个点 u u u加入集合,然后将 u u u的所有后继加入 S S S,然后把这些后继的所有后继加入 S S S
由于我们知道 x i = a x_i=a xi=a时, x j = b x_j=b xj=b,因此对于这个限制,我们在图上连边 x i , a → x j , b x_{i,a}\rightarrow x_{j,b} xi,axj,b,这样就似乎可以表示这个限制了。
(注意连边方式到这里还不完全正确)

此时我们会得到一个暴力算法:

  • 枚举一个未被确定的变量 x i x_i xi
  • 先选择 x i , 0 x_{i,0} xi,0,然后检查 x i , 0 x_{i,0} xi,0可达的所有点,我们将会选中他们。
    • 如果发生冲突(即存在 x j , 0 , x j , 1 ∈ S x_{j,0},x_{j,1}\in S xj,0,xj,1S),那么就说明 x i ≠ 0 x_i\not=0 xi=0,回溯。
  • 如果 x i , 0 x_{i,0} xi,0不能选,那么就选择 x i , 1 x_{i,1} xi,1,然后检查 x i , 1 x_{i,1} xi,1的可达点,检查是否有冲突,如果没有就选上它们,否则就说明无解。

但是我们会发现这个算法是会错的,举例来说,对于以下两个限制:

  • y = 0 ⇒ x = 1 y=0\Rightarrow x=1 y=0x=1
  • y = 1 ⇒ x = 1 y=1\Rightarrow x=1 y=1x=1

我们会连出这张图:
在这里插入图片描述
但是如果我们一开始选择 x 0 x_0 x0,后来就会发现无论选择 y 0 y_0 y0还是 y 1 y_1 y1都会有矛盾,此时就输出无解,显然是不对的。

这样会出错是因为,对于这样的一条限制 y = 0 ⇒ x = 1 y=0\Rightarrow x=1 y=0x=1来说,选择 x x x的值是会对 y y y的值产生影响的,具体来说,如果 x = 0 x=0 x=0,这就说明 y ≠ 0 y\not=0 y=0,即 y = 1 y=1 y=1

换句话说,命题 y = 0 ⇒ x = 1 y=0\Rightarrow x=1 y=0x=1的逆否命题 x ≠ 1 ⇒ y ≠ 0 x\not=1\Rightarrow y\not =0 x=1y=0,即 x = 0 ⇒ y = 1 x=0\Rightarrow y=1 x=0y=1,具有和原命题一致的真假性,因此选择 x x x的值可能会对 y y y造成影响,因此我们需要进一步讨论 x = a ⇒ y = b x=a\Rightarrow y=b x=ay=b说明了 x , y x,y x,y之间的那些关系:

  • 当我们选择了 x a x_a xa时,必然有 y b y_b yb
  • 当我们选择了 x ¬ a x_{\neg a} x¬a时,这条限制不提供任何约束,即有可能选择 y b y_b yb y ¬ b y_{\neg b} y¬b
  • 当我们选择了 y b y_b yb时,这条限制不提供任何约束,即有可能选择 x a x_a xa x ¬ a x_{\neg a} x¬a
  • 当我们选择了 y ¬ b y_{\neg b} y¬b时,必然有 x ¬ a x_{\neg a} x¬a

因此事实上对于限制 x i = a ⇒ x j = b x_i=a\Rightarrow x_{j}=b xi=axj=b来说,我们应该连接两条边:

  • x i , a → x j , b x_{i,a}\rightarrow x_{j,b} xi,axj,b
  • x j , ¬ b → x i , ¬ a x_{j,\neg b}\rightarrow x_{i,\neg a} xj,¬bxi,¬a

此时我们再进行刚才的暴力算法,我们就获得了时间复杂度为 O ( n ⋅ m ) O(n\cdot m) O(nm)的2-sat问题的dfs做法。值得一提的是,这种做法还能同时让我们获得2-sat问题字典序最小的解。

接下来简要对暴力做法的正确性进行说明:

首先我们证明解的充分性,即我们求出的解确实是原问题的一组解:
首先我们知道,对于一个限制 x i = a ⇒ x j = b x_{i}=a\Rightarrow x_{j}=b xi=axj=b,这个限制被违反当且仅当 x i , a , x j , ¬ b ∈ S x_{i,a},x_{j,\neg b}\in S xi,a,xj,¬bS

如果说在算法过程中 x i , a x_{i,a} xi,a x j , ¬ b x_{j,\neg b} xj,¬b先选的话,发生这种情况一定不可能,因为我们选择 x i , a x_{i,a} xi,a时根据连边,一定选择了 x j , b x_{j,b} xj,b,因此后来无法选择 x j , ¬ b x_{j,\neg b} xj,¬b了,矛盾。
如果 x i , a x_{i,a} xi,a x j , ¬ b x_{j,\neg b} xj,¬b后选的话,这种情况还是不可能,因为根据连边的方式,如果我们选择了 x j , ¬ b x_{j,\neg b} xj,¬b,我们一定选择了 x i , ¬ a x_{i,\neg a} xi,¬a,不可能再选择 x i , a x_{i,a} xi,a,因此仍然矛盾。

因此我们就证明,我们构造出的一组解满足所有限制条件,因此是一组合法解。

接下来我们证明解的必要性,即有解的时候,我们一定能够构造出一组解。
只需证明逆否命题,即如果我们构造不出一组解,此时这个问题无解。
我们考虑求解过程在决定变量 x i x_i xi的取值时报告了无解。
此时必然是因为发生了矛盾,首先讨论选取 x i , 0 x_{i,0} xi,0时候的情况,矛盾即存在元素 x j , 0 , x j , 1 ∈ S x_{j,0},x_{j,1}\in S xj,0,xj,1S
此时有两种情况,第一种情况是 x j , 0 , x j , 1 x_{j,0},x_{j,1} xj,0,xj,1都是在 x i , 0 x_{i,0} xi,0加入集合 S S S后加入集合的,此时显然选择 x i , 0 x_{i,0} xi,0会同时推出 x j = 0 x_j=0 xj=0 x j = 1 x_j=1 xj=1,因此 x i ≠ 0 x_i\not=0 xi=0

第二种情况是, x j , a x_{j,a} xj,a是在 x i , 0 x_{i,0} xi,0加入集合 S S S前加入集合的,而 x j , ¬ a x_{j,\neg a} xj,¬a是因为加入 x i , 0 x_{i,0} xi,0而加入集合 S S S的(换句话说存在路径使得 x i , 0 ⇝ x j , ¬ a x_{i,0}\rightsquigarrow x_{j,\neg a} xi,0xj,¬a),这种情况不存在,这是因为,如果存在路径使得 x i , 0 ⇝ x j , ¬ a x_{i,0}\rightsquigarrow x_{j,\neg a} xi,0xj,¬a,由于接下来说到的性质2,我们必然知道存在一条路径使得 x j , a ⇝ x i , 1 x_{j,a}\rightsquigarrow x_{i,1} xj,axi,1,因此当 x j , a ∈ S x_{j,a}\in S xj,aS后, x i , 1 ∈ S x_{i,1}\in S xi,1S,这与 x i x_i xi取值未确定矛盾,因此第二种情况不存在。

不可能存在一种情况使得 x j , 0 , x j , 1 x_{j,0},x_{j,1} xj,0,xj,1在加入 x i , 0 x_{i,0} xi,0前都在集合 S S S内,因为这违反 S S S的定义。

同理我们知道,如果在选择 x i , 1 x_{i,1} xi,1的时候发生矛盾,只可能是因为 x i ≠ 1 x_i\not=1 xi=1。此时我们就得知了 x i ≠ 0 x_i\not=0 xi=0 x i ≠ 1 x_i\not=1 xi=1,因此得到这个可满足性问题无解。

QED.

线性算法

接下来我们说一下这个问题的线性算法,线性算法是这样的:

  • 对建出来的图缩强连通分量
  • 这样会得到一张DAG
  • 如果存在点 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1在一个强连通分量内,则说明无解。
  • 否则有解,对DAG拓扑排序, x i x_i xi的取值是它对应的两个点 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1对应的强连通分量中拓扑序较靠后的那个点的取值。

证明

接下来我们证明一下线性算法的正确性。

性质1

边的对称性:
对于任意一条有向边, ( x i , a , x j , b ) (x_{i,a},x_{j,b}) (xi,a,xj,b),都存在有向边 ( x j , ¬ b , x i , ¬ a ) (x_{j,\neg b},x_{i,\neg a}) (xj,¬b,xi,¬a),我们称为其对称边。

证明:
回忆建图的方式,这条性质是显然成立的。

性质2

路径的对称性:
对于任意一条从 x i , a x_{i,a} xi,a x j , b x_{j,b} xj,b的路径,必然存在对应的一条路径从 x j , ¬ b x_{j,\neg b} xj,¬b x i , ¬ a x_{i,\neg a} xi,¬a

证明:
我们找到从 x i , a x_{i,a} xi,a x j , b x_{j,b} xj,b的路径上的每一条边的对称边,显然它们拼成一条从 x j ¬ b x_{j\neg b} xj¬b x i , ¬ a x_{i,\neg a} xi,¬a的路径。

算法1

我们可以据此提出一个求解2-sat问题的算法:

  • 对建出来的图缩强连通分量
  • 这样会得到一张DAG
  • 如果存在点 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1在一个强连通分量内,则说明无解。
  • 否则有解,我们通过如下过程构造解:
    • 找到一个没有确定的 x i x_i xi
    • 由于 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1不强连通,因此不可能存在二者相互可达。
    • 如果有 x i , 0 ⇝ x i , 1 x_{i,0}\rightsquigarrow x_{i,1} xi,0xi,1,那就令 x i , 1 ∈ S x_{i,1}\in S xi,1S。否则说明一定有 x i , 1 ⇝ x i , 0 x_{i,1}\rightsquigarrow x_{i,0} xi,1xi,0,或者 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1互相不可达,此时令 x i , 0 ∈ S x_{i,0}\in S xi,0S
    • 如果此时我们有 x i , a ∈ S x_{i,a}\in S xi,aS,那就说明有 x i , ¬ a ∉ S x_{i,\neg a}\notin S xi,¬a/S。同时说明 x i , a x_{i,a} xi,a的所有后继都属于 S S S,把它们加入 S S S
    • 同时说明 x i , ¬ a x_{i,\neg a} xi,¬a的所有前驱都不属于 S S S
    • 直到所有的变量取值都确定,此时我们得到了一组可行解。

定理1

缩点后得到的DAG,满足没有任何一个 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1强连通,是原问题有解的必要条件。

证明其逆否命题:
如果存在 x i , 0 , x i , 1 x_{i,0},x_{i,1} xi,0,xi,1强连通,那么我们沿着 x i , 0 ⇝ x i , 1 ⇝ x i , 0 x_{i,0}\rightsquigarrow x_{i,1}\rightsquigarrow x_{i,0} xi,0xi,1xi,0的回路走,上面的边对应的限制条件就说明,当 x i = 0 x_{i}=0 xi=0 x i = 1 x_i=1 xi=1,并且当 x i = 1 x_i=1 xi=1 x i = 0 x_i=0 xi=0,此时显然无解。

QED.

定理2

按照上述算法1流程构造出的解,是原问题的一组解。

证明:
如果这组解不是原问题的一组解,那么一定存在至少一个限制被违背了,设这个限制是 x i = a ⇒ x j = b x_i=a\Rightarrow x_j=b xi=axj=b,这个限制被违反必须有 x i = a x_i=a xi=a x j = ¬ b x_j=\neg b xj=¬b

假如说 x i , a x_{i,a} xi,a x j , ¬ b x_{j,\neg b} xj,¬b后晚加入集合,当我们加入 x j , ¬ b x_{j,\neg b} xj,¬b时,由于这条限制对应连出的边, x i , ¬ a x_{i,\neg a} xi,¬a一定也会被加入集合,因此 x i , a x_{i,a} xi,a不可能加入集合,矛盾。

否则说明 x i , a x_{i,a} xi,a x j , ¬ b x_{j,\neg b} xj,¬b先加入集合,但是这也不可能,因为当我们加入 x i , a x_{i,a} xi,a时,由于这条限制对应连出的边, x j , b x_{j,b} xj,b也一定加入集合,因此 x j , b x_{j,b} xj,b不可能加入集合,矛盾。

QED.

定理3

根据定理1,定理2,我们证明了:
算法1能够求出一组解,是原问题有解的充要条件。它求出的解,是原问题的一组解。

定理4

容易发现Tarjan算法+拓扑排序求解2-sat问题的过程事实上在模拟算法1,因此其的正确性也有保证。

后记

于是皆大欢喜。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux配置yum源以及基本yum指令

文章目录 一、yum介绍二、什么是软件包三、配置yum源四、一键配置yum源【三步走】五、yum指令搜索软件安装软件卸载软件 六、其他yum指令更新内核更新软件更新指定软件显示所有可更新的软件清单卸载指定包并自动移除依赖包删除软件包,以及软件包数据和配置文件 一、…

2024年第3周农产品价格监测报告

一、摘要 农产品价格监测主要涉及对畜禽类产品、水产品、蔬菜类产品、水果类产品的价格,以周为单位,进行变化情况的数据监测。其中,蔬菜类产品共8种,分别为菜花、韭菜、豆角、西红柿、胡萝卜、土豆、大葱、葱头。 本周重点监测的…

【深度学习】BasicSR训练过程记录,如何使用BasicSR训练GAN

文章目录 两种灵活的使用场景项目结构概览简化的使用方式 项目结构解读1. 代码的入口和训练的准备工作2. data和model的创建2.1 dataloader创建2.2 model的创建 3. 训练过程 动态实例化的历史演进1. If-else判断2. 动态实例化3. REGISTER注册机制 REGISTER注册机制的实现1. DAT…

第1章-计算机网络基础

目录 1. 计算机网络与计算机 2. 计算机网络的定义和基本功能 2.1. 定义:计算机网络是一组自治计算机互连的集合 2.2. 基本功能 2.3. 计算机网络的演进 2.4. 广域网(Wide Area Network,WAN) 2.5. 网络的拓扑结构 2.6. 数据交换方式 2.7. 衡量计算…

ICC2:如何优化网表中的assign语法

更多学习内容请关注「拾陆楼」知识星球 拾陆楼知识星球入口 问题来自星球提问: ICC2中有两种解决方法: 1) set_app_options -name opt.port.eliminate_verilog_assign -value true 工具优化时自己插buffer解决 2) change_name -hier -rule verilog 需要注意的是: 第一个opti…

自己本机Video retalking制作数字人

首先需要注意的是,这个要求你的笔记本显存和内存都比较大。我的电脑内存是64G,显卡是8G,操作系统是Windows 11,勉强能够运行出来,但是效果不是很好。 效果如下,无法上传视频,只能通过图片展示出…

数字频率合成器dds的量化性能分析matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 DDS的基本原理 4.2 DDS的量化性能分析 5.完整工程文件 1.课题概述 数字频率合成器dds的量化性能分析matlab仿真,分别定义累加器位宽,截位位宽,模拟DAC位宽等&…

git merge和git rebase区别

具体详情 具体常见如下,假设有master和change分支,从同一个节点分裂,随后各自进行了两次提交commit以及修改。随后即为change想合并到master分支中,但是直接git commit和git push是不成功的,因为分支冲突了【master以…

13、Kafka ------ kafka 消费者API用法(消费者消费消息代码演示)

目录 kafka 消费者API用法消费者API使用消费者API消费消息消费者消费消息的代码演示1、官方API示例2、创建消费者类3、演示消费结果1、演示消费者属于同一个消费者组2、演示消费者不属于同一个消费者组3、停止线程不适用4、一些参数解释 代码生产者:MessageProducer…

Ultraleap 3Di配置以及在 Unity 中使用 Ultraleap 3Di手部跟踪

0 开发需求 1、硬件:Ultraleap 手部追踪相机(Ultraleap 3Di) 2、软件:在计算机上安装Ultraleap Gemini (V5.2) 手部跟踪软件。 3、版本:Unity 2021 LTS 或更高版本 4、Unity XR插件管理:可从软件包管理器窗…

xxe漏洞之scms靶场漏洞

xxe-scms 代码审核 (1)全局搜索simplexml_load_string simplexml_load_string--将XML字符串解释为对象 (2)查看源代码 ID1 $GLOBALS[HTTP_RAW_POST_DATA]就相当于file_get_contents("php://input"); 因此这里就存…

锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池SOC估计 | PatchTST时间序列模型锂电池SOC估计 采用新型PatchTST时间序列模型预测锂电池SOC,送锂电池数据集 可替换数据集,实现负荷预测、流量预测、降雨量预测、空气质量预测等其他多种…

【PWN · 格式化字符串|劫持fini_array|劫持got表】[CISCN 2019西南]PWN1

格式化字符串的经典利用:劫持got表。但是遇到漏洞点只能执行一次的情况,该怎么办? 前言 如果存在格式化字符串,保护机制开的不健全,通常可以劫持got表,构造后门函数。然而,如果不存在循环、栈溢…

MySQL 索引优化:深入探索自适应哈希索引的奥秘

在数据库管理系统中,索引优化是提高查询性能的关键所在。MySQL 作为最流行的开源关系型数据库管理系统之一,提供了多种索引类型以满足不同查询场景的需求。其中,自适应哈希索引(Adaptive Hash Index,AHI)是…

【大数据精讲】HBase基本概念与读写流程

目录 基本概念 概念 数据模型 Name Space命名空间 Table Row Column Time Stamp Cell 逻辑结构 json 物理存储结构 基础架构 Meta表架构 RegionServer架构 ⭐️写流程 ⭐️读流程 基本概念 Apache HBase – Apache HBase™ Home " This projects goal is …

使用DTS实现TiDB到GaiaDB数据迁移

1 概览 本文主要介绍通过 DTS 数据迁移功能,结合消息服务 for Kafka 与 TiDB 数据库的 Pump、Drainer 组件,完成从TiDB迁移至百度智能云云原生数据库 GaiaDB。 消息服务 for Kafka:详细介绍参见:消息服务 for Kafka 产品介绍百度智…

C#winform上位机开发学习笔记6-串口助手的断帧功能添加

1.功能描述 按照设定时间对接收数据进行断帧(换行) 应用于需要接收完整数据包的场景,例如下位机发送一包数据为1秒,每100ms发送一组数据 大部分用于接收十六进制数据时 2.代码部分 步骤1:添加计时器,设置默认时间为500ms 步骤…

MySQL-函数-日期函数

常见的日期函数 案例

《大型语言模型自然语言生成评估》综述

在快速发展的自然语言生成(NLG)评估领域中,引入大型语言模型(LLMs)为评估生成内容质量开辟了新途径,例如,连贯性、创造力和上下文相关性。本综述旨在提供一个关于利用LLMs进行NLG评估的全面概览…

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶(Full Self Driver)技术结构图,图中把自动驾驶模型拆分出分成了几个依赖的模块: 技术底座:自动标注技术处理大量数据,仿真技术创造图片数据,大数据引擎进不断地更新&…