斐波那契数列的矩阵乘法方法

news2024/11/17 12:36:48

1、求斐波那契数列矩阵乘法的方法

1.1 斐波那契数列的线性求解( O ( n ) O(n) O(n))的方法

//斐波那契数列:1 1 2 3 5 8 ...
int fibonacci(int n) {
    if (n < 1) return 0;
    if (n == 1 || n == 2) return 1;

    int a = 1, b = 1, c = 0;
    for (int i = 3; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }

    return c;
}

1.2 利用线性代数改写成矩阵乘法的方法

通常,计算斐波那契数列的时间复杂度都为 O ( n ) O(n) O(n),但是有方法可以使得计算的时间复杂度为 O ( l o g n ) O(logn) O(logn),且看如下说明。

利用线性代数,斐波那契数列也可以改写成另一种表示:
∣ F ( n ) F ( n − 1 ) ∣ = ∣ F ( 2 ) F ( 1 ) ∣ × ∣ 二 阶 矩 阵 ∣ n − 2 \left| \begin {array}{c} F(n) & F(n-1) \\ \end{array}\right| = \left| \begin {array}{c} F(2) & F(1) \\ \end{array} \right| \times \left| \begin {array}{c} 二阶矩阵 \end{array} \right| ^ {n-2} F(n)F(n1)=F(2)F(1)×n2

我们都知道,斐波那契数列的初始项 F ( 1 ) = 1 , F ( 2 ) = 1 F(1) = 1, F(2)=1 F(1)=1,F(2)=1,而其他项的严格递推公式为 F ( n ) = F ( n − 1 ) + F ( n − 2 ) F(n) = F(n-1) + F(n-2) F(n)=F(n1)+F(n2),像这种除了初始项,剩下的每一项都有严格的递推式的问题,都有 O ( l o g n ) O(logn) O(logn) 的求解方法。

而如下这种有条件转移的情况:
假设给定数组的初始项 F(1) = 1,F(2) = 1,然后给定一个布尔数组 arr
F ( n ) = { F ( n − 1 ) a r r [ n ] = F F ( n − 1 ) + F ( n − 2 ) a r r [ n ] = T F(n) = \begin{cases} F(n-1) & { arr[n] = F}\\ F(n-1) + F(n-2) &arr[n] = T\\ \end{cases} F(n)={F(n1)F(n1)+F(n2)arr[n]=Farr[n]=T
即在不同条件下有不同的递推式,这就没有 O ( l o g n ) O(logn) O(logn) 的解法。

而斐波那契数列是没有条件转移的严格递推式。

怎么得到开头的行列式表示方法的?

因为 F ( n ) = F ( n − 1 ) + F ( n − 2 ) F(n) = F(n-1) + F(n-2) F(n)=F(n1)+F(n2),其中减得最多的是2,所有行列式的表示方法中最后要乘一个 2 阶的常数矩阵。

且一定有:
∣ F ( 3 ) F ( 2 ) ∣ = ∣ F ( 2 ) F ( 1 ) ∣ × ∣ a b c d ∣ ∣ F ( 4 ) F ( 3 ) ∣ = ∣ F ( 3 ) F ( 2 ) ∣ × ∣ a b c d ∣ \left| \begin {array}{c} F(3) & F(2) \\ \end{array}\right| = \left| \begin {array}{c} F(2) & F(1) \\ \end{array} \right| \times \left| \begin {array}{c} a & b\\ c & d \end{array} \right| \\ \\ \\ \\ \left| \begin {array}{c} F(4) & F(3) \\ \end{array}\right| = \left| \begin {array}{c} F(3) & F(2) \\ \end{array} \right| \times \left| \begin {array}{c} a & b\\ c & d \end{array} \right| \\ F(3)F(2)=F(2)F(1)×acbdF(4)F(3)=F(3)F(2)×acbd

现在不知道这个常数矩阵 ∣ a b c d ∣ \left|\begin{array}{c}a & b\\c & d\\\end{array}\right| acbd 具体的值,但是可以通过代入实际数值进行计算:
斐波那契数列:1, 1, 2, 3, 5, 8…
代入公式中,即 ∣ 2 1 ∣ = ∣ 1 1 ∣ × ∣ a b c d ∣ \left| \begin{array}{c} 2 & 1\end{array} \right| = \left| \begin{array}{c} 1 & 1\end{array} \right| \times\left|\begin{array}{c}a & b\\c & d\\\end{array}\right| 21=11×acbd
所以 a + c = 2 b + d = 1 a + c = 2 \\ b + d = 1 a+c=2b+d=1
但仅凭这两个式子还不能算出结果,于是再多看两项:
∣ 3 2 ∣ = ∣ 2 1 ∣ × ∣ a b c d ∣ \left| \begin{array}{c} 3 & 2\end{array} \right| = \left| \begin{array}{c} 2 & 1\end{array} \right| \times\left|\begin{array}{c}a & b\\c & d\\\end{array}\right| 32=21×acbd
所以 2 a + c = 3 2 b + d = 2 2a + c = 3\\ 2b + d = 2 2a+c=32b+d=2

求得 a = 1 , b = 1 , c = 1 , d = 0 a = 1, b = 1, c = 1, d = 0 a=1,b=1,c=1,d=0
即二阶矩阵为 ∣ 1 1 1 0 ∣ \left|\begin{array}{c}1 & 1\\1 & 0\\\end{array}\right| 1110
通过该矩阵可以求得后续的各项。

即:
∣ F ( 3 ) F ( 2 ) ∣ = ∣ F ( 2 ) F ( 1 ) ∣ × ∣ a b c d ∣ ∣ F ( 4 ) F ( 3 ) ∣ = ∣ F ( 3 ) F ( 2 ) ∣ × ∣ a b c d ∣ ∣ F ( 5 ) F ( 4 ) ∣ = ∣ F ( 4 ) F ( 3 ) ∣ × ∣ a b c d ∣ . . . ∣ F ( n ) F ( n − 1 ) ∣ = ∣ F ( n − 1 ) F ( n − 2 ) ∣ × ∣ a b c d ∣ \left|\begin {array}{c}F(3) & F(2) \\\end{array}\right| = \left|\begin {array}{c} F(2) & F(1) \\\end{array}\right| \times \left|\begin {array}{c}a & b\\c & d\end{array}\right| \\ \\ \\ \\ \left|\begin {array}{c}F(4) & F(3) \\\end{array}\right| = \left|\begin {array}{c} F(3) & F(2) \\\end{array}\right| \times \left|\begin {array}{c}a & b\\c & d\end{array}\right| \\ \\ \\ \left|\begin {array}{c}F(5) & F(4) \\\end{array}\right| = \left|\begin {array}{c} F(4) & F(3) \\\end{array}\right| \times \left|\begin {array}{c}a & b\\c & d\end{array}\right| \\ .\\ .\\ .\\ \\ \left|\begin {array}{c}F(n) & F(n-1) \\\end{array}\right| = \left|\begin {array}{c} F(n-1) & F(n-2) \\\end{array}\right| \times \left|\begin {array}{c}a & b\\c & d\end{array}\right| F(3)F(2)=F(2)F(1)×acbdF(4)F(3)=F(3)F(2)×acbdF(5)F(4)=F(4)F(3)×acbd...F(n)F(n1)=F(n1)F(n2)×acbd
代入相等式后,得到:
∣ F ( n ) F ( n − 1 ) ∣ = ∣ F ( 2 ) F ( 1 ) ∣ × ∣ a b c d ∣ n − 2 \left|\begin {array}{c}F(n) & F(n-1) \\\end{array}\right| = \left|\begin {array}{c} F(2) & F(1) \\\end{array}\right| \times \left|\begin {array}{c}a & b\\c & d\end{array}\right|^{n-2} F(n)F(n1)=F(2)F(1)×acbdn2
而若要求得 F ( n ) F(n) F(n) 足够快,则需要矩阵的 n n n 次方计算得足够快。

一个矩阵的 n n n 次方怎么才能计算得快?

先来解决一个基本问题:一个数的 n n n 次方怎么才能计算得快?

例如 1 0 75 10 ^ {75} 1075 怎么才能算得快呢?

流程:先得到 75 的二进制形式 1001011,然后 t = 1 0 1 t = 10^1 t=101 不断进行自乘操作,然后根据 75 的二进制位中的 1 决定是否要将 t t t 乘入结果 a n s = 1 ans = 1 ans=1 中。

       64	32 16 8 4 2 1
75 = 1  0    0  1 0 1 1

所以 a n s = 1 ∗ 1 0 1 ∗ 1 0 2 ∗ 1 0 8 ∗ 1 0 64 ans = 1 * 10 ^ 1 * 10^2 * 10 ^8*10^{64} ans=11011021081064

而在 t t t 自乘的过程中,从1次方->2次方->4次方->8次方->… n次方,一共需要 l o g n logn logn 次;再根据次方的二进制位是否为1确定是否乘入结果中,这个过程也要 l o g n logn logn 次判断,所以总体是 2 l o g n 2logn 2logn,即 O ( l o g n ) O(logn) O(logn) 可以求解出 1 0 n 10^n 10n

这个思想的基础是二分,只不过通过二进制能分得更好。

同理,矩阵的 n n n 次方,就是:
a n s = [ 1 ⋯ ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ] ∗ 后 续 的 值 ans = \left[ \begin{array}{cccc} 1 & \cdots &\cdots &0\\ 0 & 1 &{\cdots} & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ \end{array} \right] * 后续的值 ans=10010001

矩阵的 n n n 次方计算的总体思路:
请添加图片描述

补充:矩阵乘法
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

矩阵的 n n n 次方的代码实现:

	//返回矩阵m的p次方
	public static int[][] matrixPower(int[][] m, int p) {
		int[][] res = new int[m.length][m[0].length];
		for (int i = 0; i < res.length; i++) {
			res[i][i] = 1; //对角线为1
		}
		// res = 矩阵中的1
		int[][] t = m;// 矩阵1次方
		for (; p != 0; p >>= 1) { //右移
			if ((p & 1) != 0) { //p&1得到次方的二进制形式最后1位,如果为1表示当前的值需要
				res = product(res, t);
			}
			t = product(t, t);
		}
		return res;
	}
	
	// 两个矩阵乘完之后的结果返回
	public static int[][] product(int[][] a, int[][] b) {
		int n = a.length; //a的行数
		int m = b[0].length; //b的列数
		int k = a[0].length; // a的列数同时也是b的行数
		int[][] ans = new int[n][m];
		for(int i = 0 ; i < n; i++) {
			for(int j = 0 ; j < m;j++) {
				for(int c = 0; c < k; c++) {
					ans[i][j] += a[i][c] * b[c][j];
				}
			}
		}
		return ans;
	}   

2、类似斐波那契数列的递归优化

如果某个递归,除了初始项之外,具有如下的形式:
F ( n ) = C 1 ∗ F ( n ) + C 2 ∗ F ( n − 1 ) + . . . + C k ∗ F ( n − k )    ( C 1 . . . C k 和 k 都 是 常 数 ) F(n) = C_1*F(n) + C_2*F(n-1) + ... + C_k*F(n-k) \space\space (C_1...C_k 和 k 都是常数) F(n)=C1F(n)+C2F(n1)+...+CkF(nk)  (C1...Ckk)
并且这个递推的表达式是严格的、不随条件转移的,那么都存在类似斐波那契数列的优化,时间复杂度都能优化成 O ( l o g n ) O(logn) O(logn)

【解释说明】确定常数矩阵是几阶的,就看 F ( n − k ) F(n-k) F(nk) k k k 的最大值,如上述形式中,减得最多的是 k k k,所以常数矩阵是 k k k 阶。

k k k 阶就是 k k k 项组成的行列式,即等号左边是 k k k 项。

例子: F ( n ) = 7 ∗ F ( n − 1 ) − 3 ∗ F ( n − 2 ) + 4 ∗ F ( n − 3 ) F(n) = 7 * F(n-1) - 3*F(n-2) + 4*F(n-3) F(n)=7F(n1)3F(n2)+4F(n3)

因为 F ( n − k ) F(n-k) F(nk) k k k 的最大值为 3,所以常数矩阵为 3 阶,且由 3 项组成行列式,所以有:

∣ F ( 4 ) F ( 3 ) F ( 2 ) ∣ = ∣ F ( 3 ) F ( 2 ) F ( 1 ) ∣ ∗ ∣ 3 阶 矩 阵 ∣ ∣ F ( 5 ) F ( 4 ) F ( 3 ) ∣ = ∣ F ( 4 ) F ( 3 ) F ( 2 ) ∣ ∗ ∣ 3 阶 矩 阵 ∣ \left| \begin{array}{cccc} F(4) & F(3) & F(2) \\ \end{array}\right| = \left| \begin{array}{cccc} F(3) & F(2) & F(1) \\ \end{array}\right| * \left| 3阶矩阵\right| \\ \\ \\ \left| \begin{array}{cccc} F(5) & F(4) & F(3) \\ \end{array}\right| = \left| \begin{array}{cccc} F(4) & F(3) & F(2) \\ \end{array}\right| * \left| 3阶矩阵\right| \\ F(4)F(3)F(2)=F(3)F(2)F(1)3F(5)F(4)F(3)=F(4)F(3)F(2)3
则这个 3 阶问题可以写成:
∣ F ( n ) F ( n − 1 ) F ( n − 2 ) ∣ = ∣ F ( 3 ) F ( 2 ) F ( 1 ) ∣ ∗ ∣ 3 阶 矩 阵 ∣ n − 3 \left| \begin{array}{cccc} F(n) & F(n-1) & F(n-2) \\ \end{array}\right| = \left| \begin{array}{cccc} F(3) & F(2) & F(1) \\ \end{array}\right| * \left| 3阶矩阵\right| ^ {n-3} F(n)F(n1)F(n2)=F(3)F(2)F(1)3n3

如果是 i i i 阶问题
∣ F ( n ) F ( n − 1 ) F ( n − 2 ) ⋯ F ( n − i + 1 ) ∣ = ∣ F ( i ) F ( i − 1 ) F ( i − 2 ) ⋯ F ( 1 ) ∣ ∗ ∣ i 阶 矩 阵 ∣ n − i \left| \begin{array}{cccc} F(n) & F(n-1) & F(n-2) & {\cdots} & F(n-i+1)\\ \end{array}\right| = \left| \begin{array}{cccc} F(i) & F(i - 1) & F(i-2) & {\cdots} & F(1)\\ \end{array}\right| * \left| i阶矩阵\right| ^ {n-i} F(n)F(n1)F(n2)F(ni+1)=F(i)F(i1)F(i2)F(1)ini

递推式中 F ( n − k ) F(n-k) F(nk)不连续的也是一样,如 F ( n ) = 6 ∗ F ( n − 1 ) + 3 ∗ F ( n − 5 ) F(n) = 6 * F(n-1) + 3 *F(n-5) F(n)=6F(n1)+3F(n5),那么常数矩阵是 5 阶,可以写成:
∣ F ( n ) F ( n − 1 ) F ( n − 2 ) F ( n − 3 ) F ( n − 4 ) ∣ = ∣ F ( 5 ) F ( 4 ) F ( 3 ) F ( 2 ) F ( 1 ) ∣ ∗ ∣ 5 阶 矩 阵 ∣ n − 5 \left| \begin{array}{cccc} F(n) & F(n-1) & F(n-2) & F(n-3) & F(n-4)\\ \end{array}\right| = \left| \begin{array}{cccc} F(5) & F(4) & F(3) & F(2) & F(1) \\ \end{array}\right| * \left| 5阶矩阵\right| ^ {n-5} F(n)F(n1)F(n2)F(n3)F(n4)=F(5)F(4)F(3)F(2)F(1)5n5

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

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

相关文章

K_A08_002 基于 STM32等单片机驱动MAX1508模块按键控制直流电机正反转加减速启停

目录 一、资源说明 二、基本参数 1、参数 2、引脚说明 3、驱动说明 MAX1508模块驱动时序 对应程序: PWM信号 四、部分代码说明 接线说明 1、STC89C52RCMAX1508模块 2、STM32F103C8T6MAX1508模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七、项目…

[附源码]计算机毕业设计springboot校园生活服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

PowerBI工作区连接Log Aanlytics

其实在2021.6月的时候微软已经更新了该功能&#xff0c;通过PowerBI高级容量工作区连接Log Analytics工作区&#xff0c;从而分析历史活动数据。并且在应用市场创建了一个模板应用方便分析日志数据。使用该模板可以&#xff1a; • 观察历史使用趋势 • 按照范围、容量、数据集…

常用通讯电平转换电路整理

常用通讯电平转换电路整理5V转3.3V 当5V端信号为低电平时&#xff0c;R4不导通&#xff0c;Q5基极高电平&#xff0c;Q5导通&#xff0c;Q5的集电极被拉低&#xff0c;3.3V端被拉低。R6在Q5导通时起到限流作用。 优势&#xff1a; 便宜&#xff1a;三极管容易常见并且容易采购&…

LOLBins免杀技术研究及样本分析

一、前言 自病毒木马诞生起&#xff0c;杀毒软件与病毒木马的斗争一直都没有停止过。从特征码查杀&#xff0c;到现在的人工智能查杀&#xff0c;杀毒软件的查杀技术也是越来越复杂。但是病毒木马却仍然层出不&#xff0c;这是因为大部分病毒木马使用了免杀技术。 免杀技术全称…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校教师工作量的核算的设计与实现g6ipj

大学计算机专业毕业的&#xff0c;实际上到了毕业的时候&#xff0c;基本属于会与不会之间。说会&#xff0c;是因为学了整套的理论和方法&#xff0c;就是所谓的科班出身。说不会&#xff0c;是因为实践能力极差。 不会的问题&#xff0c;集中体现在毕设的时候&#xff0c;系…

2023年天津天狮学院专升本市场营销专业《市场营销学》考试大纲

2023年天津天狮学院高职升本市场营销专业入学考试《市场营销学》考试大纲一、考试性质 《市场营销学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《市场营销学》…

【图像分割】DeepLabV3+

文章目录0. 介绍1. DeepLabV32. 结论3. 参考0. 介绍 DeepLabV3文章&#xff1a;https://arxiv.org/pdf/1802.02611.pdf DeepLabV3代码&#xff1a;https://github.com/VainF/DeepLabV3Plus-Pytorch 语义分割的两个主要问题&#xff1a; 物体的多尺度问题。多次下采样会造成特…

ABAP 计算时间差

源码 FUNCTION zfm_date_difference. *“---------------------------------------------------------------------- "“本地接口&#xff1a; *” IMPORTING *” VALUE(IV_DATE_BEG) TYPE SY-DATUM *" VALUE(IV_TIME_BEG) TYPE SY-UZEIT *" VALUE(IV_DATE_END)…

【赛后总结】第十三届服务外包创新创业大赛总结——A14

目录前言组队&#xff06;选题分工&项目推进提交材料&项目答辩区域赛初赛区域赛决赛全国总决赛写在最后前言 先摆两个参赛视频 初赛视频 决赛视频 比赛已经过去几个月了&#xff0c;也算是想起来这个比赛可以写一个总结了。在历时8个月左右的时间之后&#xff0c;我们…

香菇多糖-四甲基罗丹明 Lentinan-TRITC 四甲基罗丹明-PEG-香菇多糖

香菇多糖-四甲基罗丹明 Lentinan-TRITC 四甲基罗丹明-PEG-香菇多糖 中文名称&#xff1a;香菇多糖-四甲基罗丹明 英文名称&#xff1a;Lentinan-TRITC 别称&#xff1a;生物素修饰香菇多糖&#xff0c;生物素-香菇多糖 香菇多糖-聚乙二醇-四甲基罗丹明 TRITC-PEG-Lent…

[附源码]计算机毕业设计JAVA校园新闻管理系统

[附源码]计算机毕业设计JAVA校园新闻管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

带你走进脚本世界,ijkplayer之【init-ios.sh】脚本分析

前言 集成ijkplayer&#xff0c;需要执行脚本init-ios.sh&#xff0c;那么init-ios.sh脚本干嘛用的了,花了半天时间&#xff0c;学习了下shell脚本&#xff0c;感觉脚本语言学起来还是比较容易上手的&#xff0c;现在仅仅能看懂了&#xff0c;但是要自己写&#xff0c;还需要花…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校学生社团管理系统n4pcu

要开始我们毕业设计的第一步的关键就是选好我们的课题&#xff0c;有的同学开始选题的时候想着按照传统的课题延续下去&#xff0c;在设计题目时&#xff0c;不要过于笼统广泛&#xff0c;选择题目其实并不难&#xff0c;要多从自身的角度出发&#xff0c;要结合你们当前所处的…

VTK网格细分-vtkAdaptiveSubdivisionFilter

欢迎大家加入社区&#xff0c;雪易VTK社区-CSDN社区云 前言&#xff1a;此博文主要分享VTK中关于细分网格的相关Filter&#xff0c;同时希望能给其他小伙伴一些帮助。 小结&#xff1a;VTK中关于网格细分的Filter包括vtkSubdivisionFilter和vtkAdaptiveSubdivisionFilter。其…

【服务器数据恢复】EMC Unity存储误操作删除数据卷的数据恢复案例

服务器数据恢复环境&#xff1a; EMC Unity某型号存储&#xff1b; 存储设备连接的2台硬盘柜上共创建2组独立的POOL&#xff1b; 2组POOL共包含21块520字节的硬盘。 服务器故障&检测&#xff1a; 误操作删除了2组POOL上的部分数据卷&#xff0c;和用户沟通后得知有5个数据…

Linux学习记录——사 权限与工具

目录的权限 想要进入一个目录&#xff0c;必须有x权限。对于目录来讲&#xff0c;r权限代表着可以查看当前目录下的文件名属性&#xff0c;w权限代表着可以在该目录下创建新文件。 默认权限 现在创建一个目录和文件 创建普通文件时&#xff08;不包括可执行&#xff09;&…

冬天这么冷,到底要不要坚持送孩子入托?

进入初冬&#xff0c;天气转凉&#xff0c;很多家长担心宝宝着凉感冒&#xff0c;不送孩子去托班了&#xff0c;甚至干脆不带孩子出门。 事实上&#xff0c;无论从幼儿身体健康发育的角度&#xff0c;还是心理发展的层面&#xff0c;这种做法都是极不科学的。 看看下面这些理由…

[Java]图论详解(内附详细代码)

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.图的基本概念 2.图的存储结构 2.1 邻接矩阵…

[Linux]------线程控制与互斥

文章目录前言一、进程VS线程空间共享二、线程控制POSIX线程库创建线程获取线程IDpthread_join线程异常第二个参数线程的局部存储线程的分离exit()三、线程的互斥进城线程间的互斥相关背景概念互斥量mutex模拟抢票逻辑解决问题互斥量实现原理探究基于RAII机制锁的模拟实现四、可…