正则语言的性质

news2024/11/15 22:56:16

正则语言的性质

一、正则语言的性质

1.正则语言的泵引理

L L L是正则语言,则存在与 L L L相关的常数 n n n满足:对于任何 L L L中的串 w w w,如果 ∣ w ∣ ≥ n |w|\geq n wn,则我们就能把 w w w打断为三个串 w = x y z w=xyz w=xyz使得:

  1. y ≠ ϵ y \not= \epsilon y=ϵ
  2. ∣ x y ∣ ≤ n |xy|\leq n xyn
  3. 对于所有的 k ≥ 0 k\geq 0 k0,串 x y k z xy^kz xykz也属于 L L L

也就是说,我们总能在离 w w w的开始处不远的地方,找到一个非空串 y y y,然后可以把它作为“泵”,也就是说,重复 y y y任意多次,或者去掉它( k = 0 k=0 k=0),而所得到的结果串仍属于 L L L

在这里插入图片描述

2.泵引理的应用

泵引理主要用于证明某个语言是非正则的。主要步骤如下:

  1. 选择一个给定的需要证明的非正则语言 L L L
  2. 选择一个合适的 n n n,注意这里 n n n并不是某个常数,而是要考虑任何可能的 n n n
  3. 选择串 w w w,它可以与 n n n相关,且长度至少为 n n n
  4. w w w拆分成 x , y , z x,y,z x,y,z,同时满足泵引理中规定的限制条件:$y \not= \epsilon $以及 $ |xy| \leq n$。
  5. 如果能够选择任意 k ≥ 0 k \geq 0 k0使得 x y k z xy^kz xykz不属于 L L L,其中 k k k可以是 n , x , y , z n,x,y,z n,x,y,z的函数,则能够证明 L L L不是正则语言。

证明下面的语言不是正则语言:

例1 { w w ∣ w ∈ { 0 , 1 } ∗ } \{ww\mid w \in \{0,1\}^*\} {www{0,1}}

证明:

假设 L = { w w ∣ w ∈ { 0 , 1 } ∗ } L=\{ww\mid w \in \{0,1\}^*\} L={www{0,1}}是正则语言。
对于给定的 n n n,构造串 w = 0 n 1 0 n ∈ L w=0^n10^n \in L w=0n10nL
根据正则语言的泵引理,将 w w w分割为 w = x y z w=xyz w=xyz,且使得$|xy|<n,y \not= \epsilon 。易知, 。 易知, 。易知,y=0^k(0<k\leq n) ,且 ,且 ,且w_i = xy^iz \in L 。令 。 令 。令i = 2 ,则 ,则 ,则w_2=0{n+k}10n1 \notin L ,得出矛盾,故 ,得出矛盾,故 ,得出矛盾,故L$不是正则语言。

例2 { w ∣ ∣ 0 ∣ w ≥ ∣ 1 ∣ w , w ∈ { 0 , 1 } ∗ } \{w\mid |0|_w\geq |1|_w,w\in \{0,1\}^*\} {w∣0w∣1w,w{0,1}}

证明:

假设 L = { w ∣ ∣ 0 ∣ w ≥ ∣ 1 ∣ w , w ∈ { 0 , 1 } ∗ } L=\{w\mid |0|_w\geq |1|_w,w\in \{0,1\}^*\} L={w∣0w∣1w,w{0,1}}是正则语言。
对于给定的 n n n,构造串 w = 1 n 0 n ∈ L w=1^n0^n \in L w=1n0nL
根据正则语言的泵引理,将 w w w分割为 w = x y z w=xyz w=xyz,且使得$|xy|<n,y \not= \epsilon 。易知, 。 易知, 。易知,y=1^k(0<k\leq n) ,且 ,且 ,且w_i = xy^iz \in L 。令 。 令 。令i = 2 ,则 ,则 ,则w_2=1{n+k}0n \notin L ,得出矛盾,故 ,得出矛盾,故 ,得出矛盾,故L$不是正则语言。

例3 { w ∣ ∣ 0 ∣ w + ∣ 1 ∣ w = n 2 , n ∈ N } \{w\mid |0|_w + |1|_w = n^2 ,n \in N\} {w∣0w+∣1w=n2,nN}

证明:

假设 L = { w ∣ ∣ 0 ∣ w + ∣ 1 ∣ w = n 2 , n ∈ N } L=\{w\mid |0|_w + |1|_w = n^2 ,n \in N\} L={w∣0w+∣1w=n2,nN}是正则语言。
对于给定的 n n n,构造串 w = 0 n 1 n 2 − n ∈ L w=0^n1^{n^2-n} \in L w=0n1n2nL
根据正则语言的泵引理,将 w w w分割为 w = x y z w=xyz w=xyz,且使得$|xy|<n,y \not= \epsilon 。易知, 。 易知, 。易知,y=0^k(0<k\leq n) ,且 ,且 ,且w_i = xy^iz \in L 。令 。 令 。令i = 2 ,则 ,则 ,则w_2=0{n+k}1{n^2-n} \notin L ,得出矛盾,故 ,得出矛盾,故 ,得出矛盾,故L$不是正则语言。

例4 { 0 x ∣ x is a prime number } \{0^x \mid \text{x is a prime number}\} {0xx is a prime number}

证明:

假设 L = { 0 x ∣ x is a prime number } L=\{0^x \mid \text{x is a prime number}\} L={0xx is a prime number}是正则语言。
对于给定的素数 n n n,构造串 w = 0 n ∈ L w=0^n \in L w=0nL
根据正则语言的泵引理,将 w w w分割为 w = x y z w=xyz w=xyz,且使得$|xy|<n,y \not= \epsilon 。易知, 。 易知, 。易知,y=0^k(0<k\leq n) ,且 ,且 ,且w_i = xy^iz \in L 。令 。 令 。令i = n-k ,则 ,则 ,则w’=0^{n-k+k(n-k)} 。由于 。 由于 。由于n-k+k(n-k)=(n-k)(k+1) 不是一个素数,所以 不是一个素数,所以 不是一个素数,所以w’\notin L ,得出矛盾,故 ,得出矛盾,故 ,得出矛盾,故L$不是正则语言。

二、正则语言的判定性质

1.测试正则语言的空性

判定正则语言是否为空( ∅ \empty ),考虑正则语言的表述形式:

  1. 如果正则语言是 DFA/NFA \text{DFA/NFA} DFA/NFA,则判定是否能从初始状态到达接受状态。(可以根据状态和对应的状态转移,使用深度优先遍历进行)

  2. 如果正则语言是正则表达式形式,采用下面的式子递归地对正则表达式进行判定:
    假设 R R R是正则语言,则:

    • R = R 1 + R 2 R=R_1+R_2 R=R1+R2。则 L ( R ) L(R) L(R)当且仅当 L ( R 1 ) L(R_1) L(R1)为空且 L ( R 2 ) L(R_2) L(R2)为空。
    • R = R 1 R 2 R=R_1R_2 R=R1R2。则 L ( R ) L(R) L(R)为空当且仅当 L ( R 1 ) L(R_1) L(R1)为空或 L ( R 2 ) L(R_2) L(R2)为空。
    • R = R 1 ∗ R=R_1^* R=R1。则 L ( R ) L(R) L(R)不为空; L ( R ) L(R) L(R)总是至少包含 ϵ \epsilon ϵ
    • R = ( R 1 ) R=(R_1) R=(R1)。则 L ( R ) L(R) L(R)当且仅当 L ( R 1 ) L(R_1) L(R1)为空。二者是相同的语言。

三.正则语言的封闭性

正则语言的封闭性有:

  1. 两个正则语言的并是正则的。
  2. 正则语言的补是正则的。
  3. 两个正则语言的交是正则的。
  4. 两个正则语言的差是正则的。
  5. 正则语言的反转是正则的。
  6. 正则语言的闭包(星)是正则的。
  7. 几个正则语言的连接是正则的。
  8. 正则语言的同态(用串来代替符号)是正则的。
  9. 正则语言的逆同态是正则的。

下面是上述定理的简要证明:

  1. 如果 L L L M M M都是正则语言,则 L ∪ M L \cup M LM也是正则的。

证明 由于 L L L M M M都是正则的,所以它们都有正则表达式, L = L ( R ) L=L(R) L=L(R) M = L ( S ) M=L(S) M=L(S),所以 L ∪ M = L ( R + S ) L\cup M = L(R+S) LM=L(R+S)也是正则的。

ε
ε
...
...
ε
ε
q0
R_start
S_start
R_finish
S_finish
qn
  1. 如果 L L L是字母表 Σ \Sigma Σ上的正则语言,则 L ‾ = Σ ∗ − L \overline{L}=\Sigma^*-L L=ΣL也是正则语言。

证明 A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)是某个接受 L = L ( A ) L=L(A) L=L(A) DFA \text{DFA} DFA,则 L ‾ = L ( B ) \overline{L}=L(B) L=L(B),其中 B B B B = ( Q , Σ , δ , q 0 , Q − F ) B=(Q,\Sigma,\delta,q_0,Q-F) B=(Q,Σ,δ,q0,QF) w w w属于 L ( B ) L(B) L(B)当且仅当 w w w不属于 L ( A ) L(A) L(A)

  1. 如果 L L L M M M都是正则语言,则 L ∩ M L \cap M LM也是正则的。

证明 由德摩根律, L ∩ M = L ‾ ∪ M ‾ ‾ L\cap M = \overline{\overline{L}\cup \overline{M}} LM=LM。由正则语言在并和补下的封闭性知, L ∩ M L\cap M LM也为正则语言。

我们可以通过乘积构造法构造接受 L ∩ M L\cap M LM的自动机 A A A
A = ( Q L × Q M , Σ , δ , ( q L , q M ) , F L × F M ) A=(Q_L\times Q_M,\Sigma,\delta,(q_L,q_M),F_L\times F_M) A=(QL×QM,Σ,δ,(qL,qM),FL×FM)
其中, δ ( ( p , q ) , a ) = ( δ L ( p , a ) , δ M ( q , a ) ) \delta((p,q),a)=(\delta_L(p,a),\delta_M(q,a)) δ((p,q),a)=(δL(p,a),δM(q,a))

A A A接受 w w w当且仅当 w ∈ L w\in L wL w ∈ M w \in M wM

在这里插入图片描述

  1. 如果 L L L M M M是正则语言,则 L − M L-M LM也是正则语言。

证明 注意到 L − M = L ∩ M ‾ L-M=L\cap \overline{M} LM=LM。由正则语言在交和补上的封闭性知, L − M L-M LM也是正则语言。

  1. 如果 L L L是正则语言,则 L R L^R LR R R R的反转)也是正则语言。

证明 L L L由正则表达式 E E E定义,则对 E E E的长度进行归纳。

基础 如果 E E E ϵ \epsilon ϵ ∅ \empty 或者某个符号 a a a,则 E R = E E_R=E ER=E

归纳 根据 E E E的形式,分为一下三种情况:

  1. E = E 1 + E 2 E = E_1 + E_2 E=E1+E2,则 E R = E 1 R + E 2 R E^R=E_1^R+E_2^R ER=E1R+E2R
  2. E = E 1 E 2 E=E_1E_2 E=E1E2,则 E R = E 2 R E 1 R E^R=E_2^RE_1^R ER=E2RE1R
  3. E = E 1 ∗ E=E^*_1 E=E1,则 E R = ( E 1 R ) ∗ E^R=(E_1^R)^* ER=(E1R)

同样地,也可以构造自动机来证明该封闭性。给定一个正则语言 L L L的自动机 L ( A ) L(A) L(A),通过下列方法构造 L R L^R LR的自动机:

  1. A A A的状态转移图中所有箭弧反转。
  2. 新自动机惟一的接受状态是 A A A的初始状态。
  3. 创建一个新的初始状态 p 0 p_0 p0,同时从该状态出发到所有 A A A的接受状态都建立一个 ϵ \epsilon ϵ转移。
  1. 如果 L L L是正则语言,则 L ∗ L^* L也是正则语言。

证明 由于 L L L是正则的,所以它有正则表达式 L = L ( R ) L=L(R) L=L(R),所以 L ∗ = L ( R ∗ ) L^*=L(R^*) L=L(R)也是正则的。

  1. 如果 L L L是正则语言, M M M是正则语言,则 L M LM LM是正则语言。

证明 由于 L L L M M M都是正则的,所以它们都有正则表达式, L = L ( R ) L=L(R) L=L(R) M = L ( S ) M=L(S) M=L(S),所以 L M = L ( R S ) LM = L(RS) LM=L(RS)也是正则的。

在这里插入图片描述

  1. 如果 L L L是字母表 Σ \Sigma Σ上的正则语言, h h h是字母表 Σ \Sigma Σ上的一个同态,则 h ( L ) h(L) h(L)也是正则的。

证明同态是串的函数,它对于每一个符号用一个特别的串来替换。

L = L ( R ) L=L(R) L=L(R),其中 R R R是正则表达式。用结构归纳法来证明上述结论:取出 R R R的一个子表达式 E E E,并对它应用 h h h得到 h ( E ) h(E) h(E),那么 L ( h ( E ) ) = h ( L ( E ) ) L(h(E))=h(L(E)) L(h(E))=h(L(E))

基础 如果 E E E ϵ \epsilon ϵ或者 ∅ \empty h ( E ) = E h(E)=E h(E)=E。因此 L ( h ( E ) ) = h ( L ( E ) ) L(h(E))=h(L(E)) L(h(E))=h(L(E))

如果 E = a E=a E=a a a a Σ \Sigma Σ中的一个符号,此时 L ( E ) = a L(E)={a} L(E)=a h ( L ( E ) ) = h ( a ) h(L(E))={h(a)} h(L(E))=h(a),因此 L ( h ( E ) ) = h ( L ( E ) ) L(h(E))=h(L(E)) L(h(E))=h(L(E))

归纳

  • E = F + G E=F+G E=F+G L ( h ( E ) ) = L ( h ( F ) + h ( G ) ) = L ( h ( F ) ) ∪ L ( h ( G ) ) L(h(E))=L(h(F)+h(G))=L(h(F))\cup L(h(G)) L(h(E))=L(h(F)+h(G))=L(h(F))L(h(G))
  • E = F ∗ E=F^* E=F L ( h ( E ) ) = L ( h ( F ∗ ) ) = L ( h ( F ) ∗ ) = L ( h ( F ) ) ∗ L(h(E))=L(h(F^*))=L(h(F)^*)=L(h(F))^* L(h(E))=L(h(F))=L(h(F))=L(h(F))
  • E = F G E=FG E=FG L ( h ( E ) ) = L ( h ( F G ) ) = L ( h ( F ) h ( G ) ) = L ( h ( F ) ) L ( h ( G ) ) L(h(E))=L(h(FG))=L(h(F)h(G))=L(h(F))L(h(G)) L(h(E))=L(h(FG))=L(h(F)h(G))=L(h(F))L(h(G))

L ( h ( F ) ) , L ( h ( G ) ) L(h(F)),L(h(G)) L(h(F)),L(h(G))都可以通过基础归纳证明是正则语言,故 h ( L ) h(L) h(L)也是正则语言。

  1. 如果 h h h是字母表 T T T到字母表 T T T的同态,且 L L L是字母表 T T T上的正则语言,那么 h − 1 ( L ) h^{-1}(L) h1(L)也是正则语言。

证明 L L L的一个 DFA A \text{DFA A} DFA A h h h出发,构造一个 h − 1 ( L ) h^{-1}(L) h1(L) DFA B \text{DFA B} DFA B

DFA \text{DFA} DFA使用 A A A的状态,但转移前把输入符号按照 h h h转移一下。

Start
A
输入a
h
接受/拒绝

DFA A = { Q , T , δ , q 0 , F } \text{DFA A}=\{Q,T,\delta,q_0,F\} DFA A={Q,T,δ,q0,F},则 B = ( Q , Σ , γ , q 0 , F ) B=(Q,\Sigma,\gamma,q_0,F) B=(Q,Σ,γ,q0,F)

其中 γ ( q , a ) = δ ( q , h ( a ) ) \gamma(q,a)=\delta(q,h(a)) γ(q,a)=δ(q,h(a))

四、正则语言的等价性

给定两个正则语言 L L L M M M,可以通过乘积构造法来判断它们接受的语言是否相同。

L = L ( R ) L=L(R) L=L(R) M = L ( S ) M=L(S) M=L(S) R R R S S S分别为接受 L L L M M M的自动机。

我们不妨假设它们的字母表相同(不同可以取并)。

R = ( Q , Σ , δ R , q , F R ) R=(Q,\Sigma,\delta_R,q,F_R) R=(Q,Σ,δR,q,FR) S = ( S , Σ , δ R , s , F S ) S=(S,\Sigma,\delta_R,s,F_S) S=(S,Σ,δR,s,FS)

按照下面的方法构造一个乘积 DFA T \text{DFA T} DFA T

T = ( R × S , Σ , δ T , [ r , s ] , F T ) T=(R\times S,\Sigma,\delta_T,[r,s],F_T) T=(R×S,Σ,δT,[r,s],FT)

其中, δ T ( [ q , s ] , a ) = [ δ R ( q , a ) , δ S ( s , a ) ] \delta_T([q,s],a)=[\delta_R(q,a),\delta_S(s,a)] δT([q,s],a)=[δR(q,a),δS(s,a)]

F T F_T FT是由下面的状态对构成的集合:

[ r , s ] [r,s] [r,s]当且仅当 r r r s s s中只有一个是接受状态。

在这里插入图片描述

那么 L = M L=M L=M当且仅当 L ( B ) = ∅ L(B)=\empty L(B)=。因为 L = M L=M L=M当且仅当对于任意 w ∈ L w \in L wL w ∈ M w \in M wM且对于任意 w ∉ L w \notin L w/L w ∉ M w \notin M w/M。(即不存在一个串 w w w,使得它属于一方而不属于另一方)

通过测试 DFA B \text{DFA B} DFA B的空性即可确定最终 L L L M M M的等价性。

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

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

相关文章

2011年专业408

文章目录0 结果1 题目2 思路2.1 思路1&#xff08;暴力解&#xff1a;排序&#xff09;2.2 思路2&#xff08;较优解&#xff1a;归并合并数组&#xff09;2.3 思路3&#xff08;较优解&#xff1a;数组指针后移&#xff09;2.4 思路4&#xff08;最优解&#xff1a;两个数组的…

ARM BTI指令介绍

目录 一、JOP 二、BTI 三、启用BTI 四、BTI是怎么实现的 一、JOP JOP&#xff08;Jump-oriented programming&#xff09;类似于ROP&#xff08;Return-Oriented Programming&#xff09;。在 ROP 攻击中&#xff0c;会扫描出useful gadgets&#xff08;易被攻击的一段代码…

【数据结构】顺序队列的原理及实现

1.什么是队列 队列是一种比较特殊的线性表&#xff0c;特殊就在于它只允许在表的前端来进行删除&#xff0c;在表的后端来进行插入&#xff0c;队列它是一种操作受限制的线性表。插入的一端称为队尾&#xff0c;删除的一端称为队头&#xff0c;队列里没有元素就称它为空队列。…

快速使用代码编辑工具vim+ctags+cscope快捷使用itop3568开发板

当以上配置全部完成后&#xff0c;每当拿到新的工程代码&#xff0c;进入相关代码目录&#xff0c;利用 vim ./命令打 开当前目录&#xff0c; 然后 crtl 生成插件所需文件&#xff0c;最后使用命令:qa!退出 vim。此步只需进行一 次。 在此目录中打开任意代码文件或任意子目录…

jdk8新特性-日期时间

1、介绍 日期时间类在Java开发中是必不可少的&#xff0c;前后端如何传递时间参数、数据库的时间在Java中对应什么类型、Java中时间转换的各种方式有哪些&#xff1f; 2、Date类 Date类是JDK1.0时期推出来的第一代时间类&#xff0c;位于java.util包下&#xff0c;是最常用的…

unctf easy_serialize反序列化字符逃逸

&#xfeff;ctf题目平台&#xff1a;UNCTF - HACKING 4 FUN。web题难度适中 easy_serialize 题目源码&#xff1a; <?php include "function.php"; $action $_POST[action]; $name $_POST[name]; $pass $_POST[pass]; $email $_POST[email]; ​ function …

南京小米java面经(一面)

目录1.java支持多继承吗2.线程的生命周期3.线程和进程的区别4.单例模式有几种5.写一下双重锁的单例6.jvm有哪些区域7.jvm哪些区域是线程共享的&#xff0c;哪些是线程私有的8.gc中判断对象可回收的方式有哪些9.gc垃圾回收算法有哪些10.哪些对象可以作为gc root11.gc中的引用计数…

软件设计师教程(四)程序设计语言基础知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 程序设计语言知识软件设计师…

工资管理系统

一、系统简介 工资管理涉及企业管理的多个方面&#xff0c;如员工基本信息、员工在职离岗、员工考勤、员工加班等等。根据这些信息&#xff0c;在每个月的固定时间&#xff0c;生成全体员工的月工资&#xff0c;部门月工资以及全厂月工资。对于月工资&#xff0c;能够实现按照员…

机器学习【西瓜书/南瓜书】--- 第五章 神经网络

1.神经元模型 1.1 M-P神经元模型 输出函数&#xff1a; 其中θ为阈值&#xff0c; ω i为第i个神经元的连接权重&#xff0c; xi为来自第i个神经元的输入。 1.2 激活函数 阶跃函数&#xff1a; 理论上我们使用阶跃函数。将输入值映射为输出值为0/1&#xff0c;显然1为神经元…

Windows下编译安装OpenCASCADE

OpenCASCADE (以下简称OCC)是一套开源的几何建模系统&#xff0c;提供了曲面、实体等建模方式&#xff0c;已经广泛应用在CAD、CAE、CAM等软件开发。 OpenCASCADE官网已经提供OpenCASCADE的编译安装方法&#xff0c;本文结合实操过程&#xff0c;简述其过程。 零、环境 操作系…

Databend v0.9.0 版本发布

各位社区小伙伴们&#xff0c;历经数月开发&#xff0c;Databend 于 2023 年 1 月 13 日迎来了 v0.9.0 版本的正式发布&#xff01; 这次新版本是 Databend 迈向 1.0 版本的最后一个大版本&#xff0c;也是迄今为止我们对核心代码重构幅度最大的一个版本&#xff01;相较于 v0…

C++ string容器,cha*

目录 1.string基本概念 2.string构造函数,char* 3.string赋值操作 4.string字符串拼接,append 5.string查找和替换,find,replace 6.string字符串比较,compare 7.string字符存取[].at&#xff0c;取&#xff0c;修改单个字符&#xff0c;size返回字符串长度 8.string插入和…

数学建模学习笔记(13)分类模型

分类模型分类问题的基本概念逻辑斯蒂回归&#xff08;Logistic&#xff09;Fisher线性判别分析多分类问题的SPSS求解分类问题的基本概念 分类问题概述&#xff1a;对于给定的一个对象&#xff0c;根据其特征将其划分到多个已给定的类别中的一个。 二分类和多分类&#xff1a;…

题目:两数之和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录描述描述 方式1:暴力遍历 public static int[] twoSum(int[] nums, int target) {int i 0;int j 1;int[] result new int[2];for(int m i;m<nums.length-1;m){…

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法今天小编分享量子点偶联聚合物&#xff0c;一起看看吧&#xff1a;Cds/CdTe-PAA-P4VP/BSA的制备过程&#xff1a;称取86.5mgCdCl2于三口瓶中&#xff0c;加入295mL二次水&#xff08;考虑到在调pH值时会增加溶液的体积&#xf…

(14)工业界推荐系统-小红书推荐场景及内部实践【重排】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

目前音质最好的蓝牙耳机有哪些?2023公认音质最好的蓝牙耳机推荐

随着技术的进步&#xff0c;蓝牙耳机的功能也越来越多样&#xff0c;人们在选择蓝牙耳机时也更能够“精准”地搜索关键词&#xff0c;进行选择。不少人很注重蓝牙耳机的音质&#xff0c;最近看到不少人问&#xff0c;目前音质最好的蓝牙耳机有哪些&#xff1f;下面&#xff0c;…

如何录制视频课程?右下角带人脸的视频怎么录制

现如今网络十分发达&#xff0c;想学习知识也十分简单&#xff0c;只要在网上搜索你想要学习的内容&#xff0c;就会出现许多相关的视频课程。那您知道如何录制视频课程吗&#xff1f;在录制时如何录入人脸&#xff1f;其实一款专业的录屏软件就能轻松搞定。今天小编教大家使用…

分析一下spring循环依赖

1.为什么循环依赖是个问题 spring 中 Bean 的创建一定是经历创建对象和依赖注入两个步骤 假设对象 Bean_A 和 Bean_B 存在循环依赖&#xff0c;如下图 1.Bean_A 创建的时候需要 Bean_B&#xff0c;就会创建Bean_B 2.Bean_B创建的时候又需要Bean_A&#xff0c;又去创建Bean_A 3…