C++实现伽罗华域生成及四则运算(三)

article/2025/7/27 13:13:28

目录

  • 原来的求行列式代码
  • 改进后的求行列式代码
  • GF(256)域幻方4阶矩阵求逆
  • 致敬

上一篇文章介绍了用C++实现伽罗华域 G F ( 2 n ) GF(2^n) GF(2n)数的次幂、矩阵数乘、方阵次幂、求行列式、求伴随矩阵、逆矩阵的函数,本篇继续,对求行列式的函数进行改进,最后结合幻方4阶矩阵探索一下求逆矩阵的其他方法。

原来的求行列式代码

/*方阵行列式,r是阶数
代数余子式法
*/
template<uint8_t n>
uint16_t GFM<n>::delta(uint16_t* A, uint16_t r) {if (r == 0) throw TypeException("矩阵阶数出错");if (r == 1) return A[0];if (r == 2) return this->multi(A[0],A[3]) ^ this->multi(A[1],A[2]); //对角线法// 按第0行展开代数余子式uint16_t* B = (uint16_t*)malloc(sizeof(uint16_t) * (r-1) * (r-1));uint16_t res = 0;for (uint16_t omit = 0; omit < r; omit++) { //指定列号,求指定列的代数余子式for (uint16_t i = 1, k = 0; i < r; i++) { //从第1行开始读取,写入B[k]for (uint16_t j = 0; j < r; j++) { //逐列读取if (j == omit) continue; //跳过指定的列B[k++] = A[i*r+j];}}res ^= this->multi(A[omit],delta(B, r-1)); //按A的第0行代数余子式展开 }free(B); //释放内存return res;
}

是利用嵌套展开代数余子式的方法,uint16_t* B = (uint16_t*)malloc(sizeof(uint16_t) * (r-1) * (r-1));申请内存,用于存放比方阵A低1阶的子方阵,而对于该子方阵,只用再次调用delta函数就可以了,理解上应该没有困难,但仔细一想,太费内存了。
假如A是16阶,则B就是15阶,B的子方阵就是14阶,依次类推,直到最后到达2阶if (r == 2) return this->multi(A[0],A[3]) ^ this->multi(A[1],A[2]);才结束,这前后一共申请内存 ( 16 2 + 15 2 + ⋯ + 2 2 ) ∗ s i z e o f ( u i n t 16 _ t ) = 2982 B y t e s (16^2+15^2+\dots+2^2)*sizeof(uint16\_t)=2982Bytes (162+152++22)sizeof(uint16_t)=2982Bytes,足足约3K。

改进后的求行列式代码

/*方阵行列式,r是阶数
上三角对角线法
*/
template<uint8_t n>
uint16_t GFM<n>::delta(uint16_t* A, uint16_t r) {if (r == 0) throw TypeException("矩阵阶数出错");if (r == 1) return A[0];//复制Auint16_t* B = (uint16_t*)malloc(sizeof(uint16_t) * r * r);memcpy(B, A, sizeof(uint16_t) * r * r); uint16_t res = 1;//将方阵转化成上三角形for (uint16_t i = 0; i < r-1; i++) { //指定与第i行异或if (B[i*r+i] == 0) { //第i行i列若已经是0,则要与不为0的下一行交换一整行,行列式变号,但GF(2^n)域内特殊,不用变号for (uint16_t j = i+1; j < r; j++) {if (B[j*r+i] == 0) continue;uint16_t temp[r];memcpy(temp, B+i*r, sizeof(uint16_t)*r);memcpy(B+i*r, B+j*r, sizeof(uint16_t)*r);memcpy(B+j*r, temp, sizeof(uint16_t)*r);}if (B[i*r+i] == 0) return 0; //全部查询一遍,结果仍为0,则结果必然为0};for (uint16_t j = i+1; j < r; j++) { //指定当前参与变换的行if (B[j*r+i] == 0) continue; //已经是0,刚好不用乘uint16_t row_times = this->multi(this->adver(B[i*r+i]),B[j*r+i]); //计算商=B[j][i]/B[i][i]for (uint16_t k = i; k < r; k++) { //当前行加上第i行乘row_times,行列式不变,省略前i个0B[j*r+k] ^= this->multi(B[i*r+k],row_times);}}}//计算对角线乘积for (uint16_t i = 0; i < r; i++) {res = this->multi(B[i*r+i], res);}
cout << res << endl;free(B); //释放内存return res;
}

看着有些长,但它不嵌套,采用的是变换上三角方法,最后直接把对角线作乘积就得出了其行列式值。这里用到2个定理:

  • 一行的倍数加到另一行,行列式不变
    ∣ a b c d e f g h i ∣ = ∣ a b c d + a ∗ k e + b ∗ k f + c ∗ k g h i ∣ \begin{vmatrix} a & b & c\\ d & e & f\\ g & h & i \end{vmatrix} =\begin{vmatrix} a & b & c\\ d+a*k & e+b*k & f+c*k\\ g & h & i \end{vmatrix} adgbehcfi = ad+akgbe+bkhcf+cki
  • 交换两行,行列式变号
    ∣ a b c d e f g h i ∣ = − ∣ d e f a b c g h i ∣ \begin{vmatrix} a & b & c\\ d & e & f\\ g & h & i \end{vmatrix} =-\begin{vmatrix} d & e & f\\ a & b & c\\ g & h & i \end{vmatrix} adgbehcfi = dagebhfci

GF(256)域幻方4阶矩阵求逆

幻方4阶矩阵形如下:
[ a b c d d a b c c d a b b c d a ] 或 [ a b c d b c d a c d a b d a b c ] \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} 或 \begin{bmatrix} a & b & c & d\\ b & c & d & a\\ c & d & a & b\\ d & a & b & c \end{bmatrix} adcbbadccbaddcba abcdbcdacdabdabc
其特点是每行依次左移或右移1位,在很多加密算法里都比较常见。
那么如何求它的逆矩阵呢?用前2点的方法肯定可以,现在我介绍第3种方法,先看推导:
[ a b c d d a b c c d a b b c d a ] 4 = ( [ a b c d d a b c c d a b b c d a ] × [ a b c d d a b c c d a b b c d a ] ) 2 \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} ^4= \left( \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} \times \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} \right) ^2 adcbbadccbaddcba 4= adcbbadccbaddcba × adcbbadccbaddcba 2

= [ a ∗ a + b ∗ d + c ∗ c + d ∗ b a ∗ b + b ∗ a + c ∗ d + d ∗ c a ∗ c + b ∗ b + c ∗ a + d ∗ d a ∗ d + b ∗ c + c ∗ b + d ∗ a d ∗ a + a ∗ d + b ∗ c + c ∗ b d ∗ b + a ∗ a + b ∗ d + c ∗ c d ∗ c + a ∗ b + b ∗ a + c ∗ d d ∗ d + a ∗ c + b ∗ b + c ∗ a c ∗ a + d ∗ d + a ∗ c + b ∗ b c ∗ b + d ∗ a + a ∗ d + b ∗ c c ∗ c + d ∗ b + a ∗ a + b ∗ d c ∗ d + d ∗ c + a ∗ b + b ∗ a b ∗ a + c ∗ d + d ∗ c + a ∗ b b ∗ b + c ∗ a + d ∗ d + a ∗ c b ∗ c + c ∗ b + d ∗ a + a ∗ d b ∗ d + c ∗ c + d ∗ b + a ∗ a ] 2 =\begin{bmatrix} a*a+b*d+c*c+d*b & a*b+b*a+c*d+d*c & a*c+b*b+c*a+d*d & a*d+b*c+c*b+d*a\\ d*a+a*d+b*c+c*b & d*b+a*a+b*d+c*c & d*c+a*b+b*a+c*d & d*d+a*c+b*b+c*a\\ c*a+d*d+a*c+b*b & c*b+d*a+a*d+b*c & c*c+d*b+a*a+b*d & c*d+d*c+a*b+b*a\\ b*a+c*d+d*c+a*b & b*b+c*a+d*d+a*c & b*c+c*b+d*a+a*d & b*d+c*c+d*b+a*a \end{bmatrix} ^2 = aa+bd+cc+dbda+ad+bc+cbca+dd+ac+bbba+cd+dc+abab+ba+cd+dcdb+aa+bd+cccb+da+ad+bcbb+ca+dd+acac+bb+ca+dddc+ab+ba+cdcc+db+aa+bdbc+cb+da+adad+bc+cb+dadd+ac+bb+cacd+dc+ab+babd+cc+db+aa 2

= [ a ∗ a + c ∗ c 0 b ∗ b + d ∗ d 0 0 a ∗ a + c ∗ c 0 b ∗ b + d ∗ d b ∗ b + d ∗ d 0 a ∗ a + c ∗ c 0 0 b ∗ b + d ∗ d 0 a ∗ a + c ∗ c ] 2 =\begin{bmatrix} a*a+c*c & 0 & b*b+d*d & 0\\ 0 & a*a+c*c & 0 & b*b+d*d\\ b*b+d*d & 0 & a*a+c*c & 0\\ 0 & b*b+d*d & 0 & a*a+c*c \end{bmatrix} ^2 = aa+cc0bb+dd00aa+cc0bb+ddbb+dd0aa+cc00bb+dd0aa+cc 2

= [ ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 0 ( a ∗ a + c ∗ c ) ( b ∗ b + d ∗ d ) + ( b ∗ b + d ∗ d ) ( a ∗ a + c ∗ c ) 0 0 ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 0 ( a ∗ a + c ∗ c ) ( b ∗ b + d ∗ d ) + ( b ∗ b + d ∗ d ) ( a ∗ a + c ∗ c ) ( b ∗ b + d ∗ d ) ( a ∗ a + c ∗ c ) + ( a ∗ a + c ∗ c ) ( b ∗ b + d ∗ d ) 0 ( b ∗ b + d ∗ d ) 2 + ( a ∗ a + c ∗ c ) 2 0 0 ( b ∗ b + d ∗ d ) ( a ∗ a + c ∗ c ) + ( a ∗ a + c ∗ c ) ( b ∗ b + d ∗ d ) 0 ( b ∗ b + d ∗ d ) 2 + ( a ∗ a + c ∗ c ) 2 ] =\begin{bmatrix} (a*a+c*c)^2+(b*b+d*d)^2 & 0 & (a*a+c*c)(b*b+d*d)+(b*b+d*d)(a*a+c*c) & 0\\ 0 & (a*a+c*c)^2+(b*b+d*d)^2 & 0 & (a*a+c*c)(b*b+d*d)+(b*b+d*d)(a*a+c*c)\\ (b*b+d*d)(a*a+c*c)+(a*a+c*c)(b*b+d*d) & 0 & (b*b+d*d)^2+(a*a+c*c)^2 & 0\\ 0 & (b*b+d*d)(a*a+c*c)+(a*a+c*c)(b*b+d*d) & 0 & (b*b+d*d)^2+(a*a+c*c)^2 \end{bmatrix} = (aa+cc)2+(bb+dd)20(bb+dd)(aa+cc)+(aa+cc)(bb+dd)00(aa+cc)2+(bb+dd)20(bb+dd)(aa+cc)+(aa+cc)(bb+dd)(aa+cc)(bb+dd)+(bb+dd)(aa+cc)0(bb+dd)2+(aa+cc)200(aa+cc)(bb+dd)+(bb+dd)(aa+cc)0(bb+dd)2+(aa+cc)2

= [ ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 0 0 0 0 ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 0 0 0 0 ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 0 0 0 0 ( a ∗ a + c ∗ c ) 2 + ( b ∗ b + d ∗ d ) 2 ] =\begin{bmatrix} (a*a+c*c)^2+(b*b+d*d)^2 & 0 & 0 & 0\\ 0 & (a*a+c*c)^2+(b*b+d*d)^2 & 0 & 0\\ 0 & 0 & (a*a+c*c)^2+(b*b+d*d)^2 & 0\\ 0 & 0 & 0 & (a*a+c*c)^2+(b*b+d*d)^2 \end{bmatrix} = (aa+cc)2+(bb+dd)20000(aa+cc)2+(bb+dd)20000(aa+cc)2+(bb+dd)20000(aa+cc)2+(bb+dd)2

= [ a 4 + c 4 + b 4 + d 4 0 0 0 0 a 4 + c 4 + b 4 + d 4 0 0 0 0 a 4 + c 4 + b 4 + d 4 0 0 0 0 a 4 + c 4 + b 4 + d 4 ] = A =\begin{bmatrix} a^4+c^4+b^4+d^4 & 0 & 0 & 0\\ 0 & a^4+c^4+b^4+d^4 & 0 & 0\\ 0 & 0 & a^4+c^4+b^4+d^4 & 0\\ 0 & 0 & 0 & a^4+c^4+b^4+d^4 \end{bmatrix}=A = a4+c4+b4+d40000a4+c4+b4+d40000a4+c4+b4+d40000a4+c4+b4+d4 =A

x = a 4 + b 4 + c 4 + d 4 x=a^4+b^4+c^4+d^4 x=a4+b4+c4+d4因此
A ÷ x = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] A \div x = \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} A÷x= 1000010000100001

由此可以推断:
[ a b c d d a b c c d a b b c d a ] 3 ÷ x 与 [ a b c d d a b c c d a b b c d a ] 互为逆矩阵 \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} ^3 \div x 与 \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} 互为逆矩阵 adcbbadccbaddcba 3÷x adcbbadccbaddcba 互为逆矩阵

证:
[ a b c d d a b c c d a b b c d a ] 3 ÷ x = [ a ∗ a + c ∗ c 0 b ∗ b + d ∗ d 0 0 a ∗ a + c ∗ c 0 b ∗ b + d ∗ d b ∗ b + d ∗ d 0 a ∗ a + c ∗ c 0 0 b ∗ b + d ∗ d 0 a ∗ a + c ∗ c ] × [ a b c d d a b c c d a b b c d a ] ÷ x \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} ^3 \div x = \begin{bmatrix} a*a+c*c & 0 & b*b+d*d & 0\\ 0 & a*a+c*c & 0 & b*b+d*d\\ b*b+d*d & 0 & a*a+c*c & 0\\ 0 & b*b+d*d & 0 & a*a+c*c \end{bmatrix} \times \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} \div x adcbbadccbaddcba 3÷x= aa+cc0bb+dd00aa+cc0bb+ddbb+dd0aa+cc00bb+dd0aa+cc × adcbbadccbaddcba ÷x
= [ a 3 + a c 2 + b 2 c + c d 2 a 2 b + b c 2 + b 2 d + d 3 a 2 c + c 3 + a b 2 + a d 2 a 2 d + c 2 d + b 3 + b d 2 a 2 d + c 2 d + b 3 + b d 2 a 3 + a c 2 + b 2 c + c d 2 a 2 b + b c 2 + b 2 d + d 3 a 2 c + c 3 + a b 2 + a d 2 a 2 c + c 3 + a b 2 + a d 2 a 2 d + c 2 d + b 3 + b d 2 a 3 + a c 2 + b 2 c + c d 2 a 2 b + b c 2 + b 2 d + d 3 a 2 b + b c 2 + b 2 d + d 3 a 2 c + c 3 + a b 2 + a d 2 a 2 d + c 2 d + b 3 + b d 2 a 3 + a c 2 + b 2 c + c d 2 ] ÷ x = \begin{bmatrix} a^3+ac^2+b^2c+cd^2 & a^2b+bc^2+b^2d+d^3 & a^2c+c^3+ab^2+ad^2 & a^2d+c^2d+b^3+bd^2\\ a^2d+c^2d+b^3+bd^2 & a^3+ac^2+b^2c+cd^2 & a^2b+bc^2+b^2d+d^3 & a^2c+c^3+ab^2+ad^2\\ a^2c+c^3+ab^2+ad^2 & a^2d+c^2d+b^3+bd^2 & a^3+ac^2+b^2c+cd^2 & a^2b+bc^2+b^2d+d^3\\ a^2b+bc^2+b^2d+d^3 & a^2c+c^3+ab^2+ad^2 & a^2d+c^2d+b^3+bd^2 & a^3+ac^2+b^2c+cd^2 \end{bmatrix} \div x = a3+ac2+b2c+cd2a2d+c2d+b3+bd2a2c+c3+ab2+ad2a2b+bc2+b2d+d3a2b+bc2+b2d+d3a3+ac2+b2c+cd2a2d+c2d+b3+bd2a2c+c3+ab2+ad2a2c+c3+ab2+ad2a2b+bc2+b2d+d3a3+ac2+b2c+cd2a2d+c2d+b3+bd2a2d+c2d+b3+bd2a2c+c3+ab2+ad2a2b+bc2+b2d+d3a3+ac2+b2c+cd2 ÷x
= [ a 3 + a c 2 + b 2 c + c d 2 x a 2 b + b c 2 + b 2 d + d 3 x a 2 c + c 3 + a b 2 + a d 2 x a 2 d + c 2 d + b 3 + b d 2 x a 2 d + c 2 d + b 3 + b d 2 x a 3 + a c 2 + b 2 c + c d 2 x a 2 b + b c 2 + b 2 d + d 3 x a 2 c + c 3 + a b 2 + a d 2 x a 2 c + c 3 + a b 2 + a d 2 x a 2 d + c 2 d + b 3 + b d 2 x a 3 + a c 2 + b 2 c + c d 2 x a 2 b + b c 2 + b 2 d + d 3 x a 2 b + b c 2 + b 2 d + d 3 x a 2 c + c 3 + a b 2 + a d 2 x a 2 d + c 2 d + b 3 + b d 2 x a 3 + a c 2 + b 2 c + c d 2 x ] = \begin{bmatrix} \frac{a^3+ac^2+b^2c+cd^2}{x} & \frac{a^2b+bc^2+b^2d+d^3}{x} & \frac{a^2c+c^3+ab^2+ad^2}{x} & \frac{a^2d+c^2d+b^3+bd^2}{x}\\ \frac{a^2d+c^2d+b^3+bd^2}{x} & \frac{a^3+ac^2+b^2c+cd^2}{x} & \frac{a^2b+bc^2+b^2d+d^3}{x} & \frac{a^2c+c^3+ab^2+ad^2}{x}\\ \frac{a^2c+c^3+ab^2+ad^2}{x} & \frac{a^2d+c^2d+b^3+bd^2}{x} & \frac{a^3+ac^2+b^2c+cd^2}{x} & \frac{a^2b+bc^2+b^2d+d^3}{x}\\ \frac{a^2b+bc^2+b^2d+d^3}{x} & \frac{a^2c+c^3+ab^2+ad^2}{x} & \frac{a^2d+c^2d+b^3+bd^2}{x} & \frac{a^3+ac^2+b^2c+cd^2}{x} \end{bmatrix} = xa3+ac2+b2c+cd2xa2d+c2d+b3+bd2xa2c+c3+ab2+ad2xa2b+bc2+b2d+d3xa2b+bc2+b2d+d3xa3+ac2+b2c+cd2xa2d+c2d+b3+bd2xa2c+c3+ab2+ad2xa2c+c3+ab2+ad2xa2b+bc2+b2d+d3xa3+ac2+b2c+cd2xa2d+c2d+b3+bd2xa2d+c2d+b3+bd2xa2c+c3+ab2+ad2xa2b+bc2+b2d+d3xa3+ac2+b2c+cd2

[ a b c d d a b c c d a b b c d a ] 3 ÷ x × [ a b c d d a b c c d a b b c d a ] \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} ^3 \div x \times \begin{bmatrix} a & b & c & d\\ d & a & b & c\\ c & d & a & b\\ b & c & d & a \end{bmatrix} adcbbadccbaddcba 3÷x× adcbbadccbaddcba

在这里插入图片描述

= [ a 4 + d 4 + c 4 + b 4 x 0 x 0 x 0 x 0 x a 4 + d 4 + c 4 + b 4 x 0 x 0 x 0 x 0 x a 4 + d 4 + c 4 + b 4 x 0 x 0 x 0 x 0 x a 4 + d 4 + c 4 + b 4 x ] = E =\begin{bmatrix} \frac{a^4+d^4+c^4+b^4}{x} & \frac{0}{x} & \frac{0}{x} & \frac{0}{x}\\ \frac{0}{x} & \frac{a^4+d^4+c^4+b^4}{x} & \frac{0}{x} & \frac{0}{x}\\ \frac{0}{x} & \frac{0}{x} & \frac{a^4+d^4+c^4+b^4}{x} & \frac{0}{x}\\ \frac{0}{x} & \frac{0}{x} & \frac{0}{x} & \frac{a^4+d^4+c^4+b^4}{x} \end{bmatrix}=E = xa4+d4+c4+b4x0x0x0x0xa4+d4+c4+b4x0x0x0x0xa4+d4+c4+b4x0x0x0x0xa4+d4+c4+b4 =E
证毕。

测试代码如下:

//测试4阶幻方矩阵GFM<8> gf8;// uint16_t a[16] = {0xe,0x9,0x8,0x7, 0x7,0xe,0x9,0x8, 0x8,0x7,0xe,0x9, 0x9,0x8,0x7,0xe};uint16_t a[16] = {0xe,0x9,0x8,0x7, 0x9,0x8,0x7,0xe, 0x8,0x7,0xe,0x9, 0x7,0xe,0x9,0x8};uint16_t res[16];uint16_t q[16];uint16_t x = gf8.adver(gf8.calc("0xe^4+0x9^4+0x8^4+0x7^4"));gf8.matrixPow(q, a, 4, 3);gf8.matrixNumMulti(q, q, 4, 4, x);gf8.matrixMulti(res, a, 4, 4, q, 4, 4);cout << "验证:" << endl;for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++){cout << hex << setw(2) << res[i*4+j] << " ";}cout << endl;}

致敬

向伽罗瓦、莱布尼茨等老一辈数学家致敬!


http://www.hkcw.cn/article/LdpFIKOsVu.shtml

相关文章

【AIGC专栏】微软Bing ImageCreator 创建图片

图像创建器是一款产品,可帮助用户使用 DALLE 3 生成 AI 图像。得到文本提示后,AI 将生成一组与该提示匹配的图像。 当前的Bing Image Creator 依然处在预览周期,所以很多区域无法访问。特别是位于中国大陆和香港、澳门区域都无法正常使用这些服务。 另外还有两个条件: 注…

2025年05月总结及随笔之家电询价及以旧换新

1. 回头看 日更坚持了882天。 读《数据自助服务实践指南&#xff1a;数据开放与洞察提效》更新完成读《数据科学伦理&#xff1a;概念、技术和警世故事》开更并更新完成读《红蓝攻防&#xff1a;技术与策略》开更并持续更新 2023年至2025年05月底累计码字2356176字&#xff…

【IC】chip binning是什么

你刚买了一块新的CPU或显卡&#xff0c;在电脑上启动了它。它运行起来感觉很酷&#xff0c;于是你尝试了一下超频。频率越来越高&#xff0c;看起来你似乎得到了一些特别的东西。这肯定不应该吧&#xff1f; 于是你冲到互联网上分享你中了硅片大奖的兴奋之情&#xff0c;没过几…

mysql核心知识点

Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包括连接器&#xff0c;查询缓存、解析器、预处理器、优化器、执行器等。另外&#xff0c;所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;和所有跨存储引…

可暂停Windows更新的便捷工具

软件介绍 今天给大家介绍一款能实现Windows暂停更新的实用工具。 吾爱jiedeng按照这个思路开发了一个小工具。该工具能将Windows更新暂停的上限设为7000天&#xff0c;这几乎相当于永久暂停了。 软件使用起来很简单&#xff0c;输入要暂停的天数后&#xff0c;点击【一键修改…

lidar和imu的标定(二)GRIL-Calib

直接看IV. PREPROCESSING这一部分&#xff0c; 首先是提取了地平面。 然后看这个公式&#xff0c;表示地平面和[0,0,1]向量之间构成的旋转矩阵&#xff0c;当然是使用角轴的方式构建的。 B. LiDAR Odometry Utilizing the Ground Plane Residual 使用平面约束的的激光里程计约…

怎么更改cursor chat中的字体大小

使用 ctrl 【Ctrl键和加号键一起按】增加所有窗口的字体大小 然后打开 VS Code 设置并减小文本编辑器字体大小即可

JMeter 直连数据库

1.直连数据库的使用场景 1.1 参数化&#xff0c;例如登录使用的账户名密码都可以从数据库中取得 1.2 断言&#xff0c;查看实际结果和数据库中的预期结果是否一致 1.3 清理垃圾数据&#xff0c;例如插入一个用户&#xff0c;它的ID不能相同&#xff0c;在测试插入功能后将数据删…

【火山引擎 大模型批量推理数据教程---详细讲解一篇过!】

0. 相关的文档 &#xff01;&#xff01;先注册火山引擎账号第一步&#xff01;&#xff01; 批量推理文档网页对象存储网页提交批量处理网页费用接口网页 1. 准备jsonl数据集 官网地址样例&#xff0c;需要根据你自己的数据进行需改 import json## 你的数据&#xff0c;自…

测量3D翼片的距离与角度

1&#xff0c;目的。 测量3D翼片的距离与角度。说明&#xff1a; 标注A 红色框选的区域即为翼片&#xff0c;本示例的3D 对象共有3个翼片待测。L1与L2的距离、L1与L2的角度即为所求的翼片距离与角度。 2&#xff0c;原理。 使用线结构光模型&#xff08;标定模式&#xff0…

单元测试-概述入门

目录 main方法测试缺点&#xff1a; 在pom.xm中&#xff0c;引入junit的依赖。,在test/java目录下&#xff0c;创建测试类&#xff0c;并编写对应的测试方法&#xff0c;并在方法上声明test注解。 练习&#xff1a;验证身份证合法性 测试成功 测试失败 main方法测试缺点&am…

模块联邦:更快的微前端方式!

什么是模块联邦 在前端项目中&#xff0c;不同团队之间的业务模块可能有耦合&#xff0c;比如A团队的页面里有一个富文本模块&#xff08;组件&#xff09;&#xff0c;而B团队 的页面恰好也需要使用这个富文本模块。 传统模式下&#xff0c;B团队只能去抄A团队的代码&#x…

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)

揭秘高效存储模型与数据结构底层实现 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 时间事件&#xff1a;serverCron函数更新服务器时间缓存更新LRU时钟-lruclock更新服务器每秒执行命令次…

ZIP Cracker版本更新了

废话不多说(也不能多说&#xff0c;原因都懂吧)&#xff0c;上图&#xff0c;阿修大佬已经更新了新的版本 参考原文&#xff1a;https://mp.weixin.qq.com/s/7ptu8tLR_2huivLJdcFBzQ

云南独龙江乡全部通信网络已抢通 紧急抢修保畅通

近日,受持续强降雨影响,怒江傈僳族自治州贡山县独龙江乡遭遇山洪和滑坡等自然灾害,导致通信网络严重受损。5月31日上午10时37分,全乡通信网络站点大面积中断,中国移动云南公司怒江分公司使用卫星传输基站保障独龙江乡政府所在地的通信正常。怒江移动分公司迅速启动防汛应急…

跨越时空的科学对话:现代科学解160年前的遗传学密码 科学家精神熠熠生辉

点滴故事中,领略科学家精神的熠熠光辉。通过讲述一个个科学家的故事,展现他们的风采,记录科技事业的发展历程,弘扬科学家的精神内涵。2025年5月31日是端午节,传统文化中有纪念屈原的习俗。两千三百年前,屈原在汨罗江畔仰观宇宙,以《天问》叩击苍穹:“日月安属?列星安陈…

美国民众开始不愿意花钱了 对现有经济存“潜在焦虑情绪” 多重经济压力交织

近期,一系列数据和调查显示,美国民众对本国经济前景的信心正处于低谷。美国密歇根大学公布的5月消费者信心指数初值降至50.8,连续第五个月下降,为2022年6月以来的最低水平。这种悲观情绪反映出美国经济深层次的矛盾与挑战。通货膨胀一直是困扰美国民众的主要问题。尽管美联…

【GESP真题解析】第 4 集 GESP 三级 2023 年 6 月编程题 1:春游

大家好,我是莫小特。 这篇文章给大家分享 GESP 三级 2023 年 6 月编程题第 1 题:春游。 题目链接 洛谷链接:B3842 春游 一、完成输入 根据输入格式的描述,输入包括两个正整数 N 和 M,N 是 N 位同学,M 是 M 次报出编号,数据范围: 2 ≤ N , M ≤ 1000 2\le N,M \le 10…

遭邻居多次持刀砍门当事人发声 精神疾病患者惹争议

近日,有大连网友在社交平台发布视频称,5月1日和5月28日,疑似患有精神疾病的邻居两次持刀上门,用刀砍其家门,并进行踢踹。网传视频截图显示了这一情况。该网友表示,他们一家才搬来一年,与这名邻居素不相识,没有正面交流过。记者多次尝试联系该网友,但未获回复。6月1日,…

攻防 FART 脱壳:特征检测识别 + 对抗绕过全解析

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ FART 对抗 某视频 app 的壳在启动的时候会检测 FART 特征&#xff0c;日志输出如下&#xff1a; 2025-05-29 02:16:25.612 2557-2557 ActivityThread …