主頁 >  其他 > 《小學生都能看懂的快速沃爾什變換從入門到升天教程》(FWT / FMT / FMI)(最最嚴謹清晰的證明!零基礎也能得學會!)

《小學生都能看懂的快速沃爾什變換從入門到升天教程》(FWT / FMT / FMI)(最最嚴謹清晰的證明!零基礎也能得學會!)

2021-02-23 10:47:50 其他

整理的演算法模板合集: ACM模板

點我看演算法全家桶系列!!!

實際上是一個全新的精煉模板整合計劃


目錄

  • 0x00 卷積
    • 0x01 多項式
    • 0x02 卷積的定義
    • 0x03 卷積的基本性質
    • 0x04 位運算卷積定義及其性質
  • 0x10 FWT(快速沃爾什變換)
    • 0x11 或( or \text{or} or)卷積
    • 0x12 與( and \text{and} and)卷積
    • 0x13 異或( xor \text{xor} xor)卷積
    • 0x14 模板
  • 0x20 FMT與FMI(快速莫比烏斯變換與快速莫比烏斯反演)
  • 0x30 競賽例題選講
    • A、(牛客練習賽41 F)簡單數學題
    • B、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts
    • C、(2019ACM - ICPC nanchang H)Another Sequence
    • D、(CROC 2016 - Final Round C)Binary Table
    • E、(HAOI2015)luogu P3175 按位或

前置知識:FFT

開始的開始,我們先來復習一下卷積的相關概念(注:0x00 卷積的部分內容(0x02、0x03、0x04)摘自 @wangrx,他寫的太好了 %%%,略作修改完善,侵刪)之后本文中所有的符號也都參照他的形式書寫,以及本文中所有的多項式的系數 n n n 均為 2 2 2 的整數冪的形式(學過 FFT 的都懂hhh不然就沒法分治了)

自認為本文是最為清晰完整的 FWT 講解博客,含有全套完整清晰的證明,相信小學生都能看懂 ~

前排規定本文所用符號:

多項式 / 序列卷積 ? \otimes ?

多項式 / 序列對應系數相乘 / 普通的乘法 × \times ×

多項式 / 序列第 k k k 項系數 ( f ) k (f)_k (f)k? ( f ? g ) k (f\otimes g)_k (f?g)k? ( A ) [ i ] (A)[i] (A)[i]

多項式 / 序列加法 ⊕ \oplus

多項式 / 序列減法 ? \ominus ?

多項式 / 序列 or \text {or} or 卷積( |,或) ? or \otimes_{\text{or}} ?or?

多項式 / 序列 and \text {and} and 卷積( &,或) ? and \otimes_{\text{and}} ?and?

多項式 / 序列 xor \text {xor} xor 卷積( ^,或) ? xor \otimes_{\text{xor}} ?xor?

0x00 卷積

0x01 多項式

我們知道對于一個普通的多項式可以表示為系數表示 f ( x ) = a 0 x 0 + a 1 x 1 + ? ? ? + a n ? 1 x n ? 1 f(x)=a_0x^0+a_1x^1+···+a_{n-1}x^{n-1} f(x)=a0?x0+a1?x1+???+an?1?xn?1

規定 f = a 0 x 0 + a 1 x 1 + ? ? ? + a n ? 1 x n ? 1 f=a_0x^0+a_1x^1+···+a_{n-1}x^{n-1} f=a0?x0+a1?x1+???+an?1?xn?1 g = b 0 x 0 + b 1 x 1 + ? ? ? + b n ? 1 x n ? 1 g=b_0x^0+b_1x^1+···+b_{n-1}x^{n-1} g=b0?x0+b1?x1+???+bn?1?xn?1

則可將多項式的系數表示簡化為: f = ( a 0 , a 1 , a 2 ? ? ? a n ? 1 ) f=(a_0,a_1,a_2···a_{n-1}) f=(a0?,a1?,a2????an?1?) g = ( b 0 , b 1 , b 2 ? ? ? b n ? 1 ) g=(b_0,b_1,b_2···b_{n-1}) g=(b0?,b1?,b2????bn?1?)


定義多項式加減法 ⊕ , ? \oplus,\ominus ,?
H = f ⊕ g = ( a 0 , a 1 , a 2 ? ? ? a n ? 1 ) ⊕ ( b 0 , b 1 , b 2 ? ? ? b n ? 1 ) = ( a 0 + b 0 , a 1 + b 1 , a 2 + b 2 ? ? ? a n ? 1 + b n ? 1 ) \begin{aligned} H&=f\oplus g\\& =(a_0,a_1,a_2???a_{n?1})\oplus (b_0,b_1,b_2???b_{n?1})\\&=(a_0+b_0,a_1+b_1,a_2+b_2???a_{n?1}+b_{n?1}) \end{aligned} H?=fg=(a0?,a1?,a2????an?1?)(b0?,b1?,b2????bn?1?)=(a0?+b0?,a1?+b1?,a2?+b2????an?1?+bn?1?)?

H = f ? g = ( a 0 , a 1 , a 2 ? ? ? a n ? 1 ) ⊕ ( b 0 , b 1 , b 2 ? ? ? b n ? 1 ) = ( a 0 ? b 0 , a 1 ? b 1 , a 2 ? b 2 ? ? ? a n ? 1 ? b n ? 1 ) \begin{aligned} H&=f\ominus g\\& =(a_0,a_1,a_2???a_{n?1})\oplus (b_0,b_1,b_2???b_{n?1})\\&=(a_0-b_0,a_1-b_1,a_2-b_2???a_{n?1}-b_{n?1}) \end{aligned} H?=f?g=(a0?,a1?,a2????an?1?)(b0?,b1?,b2????bn?1?)=(a0??b0?,a1??b1?,a2??b2????an?1??bn?1?)?

其中多項式加減的第 k k k 項系數:

( f ⊕ g ) k = a k f k + b k g k (f\oplus g)_k=a_kf_k+b_kg_k (fg)k?=ak?fk?+bk?gk?

( f ? g ) k = a k f k ? b k g k (f\ominus g)_k=a_kf_k-b_kg_k (f?g)k?=ak?fk??bk?gk?


定義多項式對應系數相乘一定注意這里不是卷積 ? \otimes ?
H = f × g = ( a 0 , a 1 , a 2 ? ? ? a n ? 1 ) × ( b 0 , b 1 , b 2 ? ? ? b n ? 1 ) = ( a 0 × b 0 , a 1 × b 1 , a 2 × b 2 ? ? ? a n ? 1 × b n ? 1 ) \begin{aligned} H&=f\times g\\& =(a_0,a_1,a_2???a_{n?1})\times (b_0,b_1,b_2???b_{n?1})\\&=(a_0\times b_0,a_1\times b_1,a_2\times b_2???a_{n?1}\times b_{n?1}) \end{aligned} H?=f×g=(a0?,a1?,a2????an?1?)×(b0?,b1?,b2????bn?1?)=(a0?×b0?,a1?×b1?,a2?×b2????an?1?×bn?1?)?

其中多項式對應系數相乘的第 k k k 項系數:

( f ? g ) k = a k f k × b k g k (f\otimes g)_k=a_kf_k\times b_kg_k (f?g)k?=ak?fk?×bk?gk?


0x02 卷積的定義

對于一個序列,將其中元素一一映射到一個多項式函式的系數上, 這個多項式函式便叫做該序列的生成函式

形式化地講,對于序列 f 0 , f 1 , ? ? , f n ? 1 f_0,f_1,\cdots,f_{n-1} f0?,f1?,?,fn?1? f ( x ) = ∑ k = 0 n ? 1 f k x k f(x)=\displaystyle\sum_{k=0}^{n-1}f_kx^k f(x)=k=0n?1?fk?xk 為其生成函式,

卷積即為生成函式的乘積在對應序列的變換上的的抽象,“卷”即為其作用效果,“積”即為其本質,

對于序列 f , g f,g f,g ,其卷積序列 f ? g f\otimes g f?g 滿足 ( f ? g ) k = ∑ i = 0 k f i × g k ? i = ∑ i , j i + j = k f i × g j (f\otimes g)_k=\displaystyle\sum\limits_{i=0}^kf_i\times g_{k-i}=\sum\limits_{i,j}^{i+j=k}f_i\times g_j (f?g)k?=i=0k?fi?×gk?i?=i,ji+j=k?fi?×gj?

對于多項式 f , g f,g f,g,其多項式的卷積為: f ? g = ∑ k = 0 n ( ∑ i , j i + j = k a i × b j ) x k f\otimes g=\sum\limits_{k=0}^{n}(\sum\limits_{i,j}^{i+j=k}a_i\times b_j)x^k f?g=k=0n?(i,ji+j=k?ai?×bj?)xk

而我們所熟知的 FFT 計算的是回圈卷積,也即 ( f ? g ) k = ∑ i + j ≡ k ( m o d n ) f i × g j (f\otimes g)_k=\displaystyle\sum_{i+j\equiv k\pmod n}f_i\times g_j (f?g)k?=i+jk(modn)?fi?×gj? n n n 為序列長度,

0x03 卷積的基本性質

這里的卷積均為序列的卷積,因此證明時我們使用數學歸納法,即證明第 k k k 項成立,則整個序列均成立,由于多項式實際上就是序列的生成函式,所以性質同樣成立,

  • f ? g = g ? f f\otimes g=g\otimes f f?g=g?f(交換律)

    我們使用定義 ( f ? g ) k = ∑ i + j = k f i × g j (f\otimes g)_k=\displaystyle\sum_{i+j=k}f_i\times g_j (f?g)k?=i+j=k?fi?×gj? ,以及乘法交換律 a × b = b × a a\times b=b\times a a×b=b×a 即可證明,因為 i + j = k i+j=k i+j=k i i i j j j 是一一對應的,

  • ( f ? g ) ? h = f ? ( g ? h ) (f\otimes g)\otimes h=f\otimes(g \otimes h) (f?g)?h=f?(g?h) (結合律)
    證明:
    [ f ? ( g ? h ) ] n = ∑ i = 0 n f n ? i × ( g ? h ) i = ∑ i = 0 n f n ? i ∑ j = 0 i g j h i ? j = ∑ i = 0 n ∑ j = 0 i f n ? i g j h i ? j = ∑ i + j + k = n f i g j h k \begin{aligned} {[f\otimes(g\otimes h)]_n} & =\displaystyle\sum_{i=0}^nf_{n-i}\times(g\otimes h)_i & \\& =\sum_{i=0}^nf_{n-i}\sum_{j=0}^ig_jh_{i-j}\\& =\sum_{i=0}^n\sum_{j=0}^if_{n-i}g_jh_{i-j}\\& =\sum_{i+j+k=n}f_ig_jh_k\end{aligned} [f?(g?h)]n??=i=0n?fn?i?×(g?h)i?=i=0n?fn?i?j=0i?gj?hi?j?=i=0n?j=0i?fn?i?gj?hi?j?=i+j+k=n?fi?gj?hk??

交換順序后反向推導即可得證,

  • ( f ⊕ g ) ? h = ( f ? h ) ⊕ ( g ? h ) (f\oplus g)\otimes h=(f\otimes h)\oplus(g\otimes h) (fg)?h=(f?h)(g?h) (分配律)
    其中 ( f ⊕ g ) k = a f k + b g k (f\oplus g)_k=af_k+bg_k (fg)k?=afk?+bgk? ,即序列 f , g f,g f,g 的加法, a , b a,b a,b 為常數,

證明:
[ ( f ⊕ g ) ? h ] k = ∑ i = 0 k ( f ⊕ g ) i h k ? i = ∑ i = 0 k ( a f i + b g i ) h k ? i = ∑ i = 0 k ( a f i h k ? i + b g i h k ? i ) = a ∑ i = 0 k f i h k ? i + b ∑ i = 0 k g i h k ? i = a ( f ? h ) k + b ( g ? h ) k = [ ( f ? h ) ⊕ ( g ? h ) ] k \begin{aligned} {[(f\oplus g)\otimes h]_k} &=\displaystyle\sum_{i=0}^k(f\oplus g)_ih_{k-i}\\ & =\sum_{i=0}^k (af_i+bg_i)h_{k-i} \\ &=\sum_{i=0}^k(af_ih_{k-i}+bg_ih_{k-i})\\ &=a\sum_{i=0}^kf_ih_{k-i}+b\sum_{i=0}^kg_ih_{k-i}\\&=a(f\otimes h)_k+b(g\otimes h)_k=[(f\otimes h)\oplus(g\otimes h)]_k \end{aligned} [(fg)?h]k??=i=0k?(fg)i?hk?i?=i=0k?(afi?+bgi?)hk?i?=i=0k?(afi?hk?i?+bgi?hk?i?)=ai=0k?fi?hk?i?+bi=0k?gi?hk?i?=a(f?h)k?+b(g?h)k?=[(f?h)(g?h)]k??

0x04 位運算卷積定義及其性質

一般的卷積滿足 i + j = k i+j=k i+j=k ,又稱為加法卷積,

類似的,對于序列 f = { f 0 , f 1 , ? ? , f 2 n ? 1 } , g = { g 0 , g 1 , ? ? , g 2 n ? 1 } f=\{f_0,f_1,\cdots,f_{2^n-1}\},g=\{g_0,g_1,\cdots,g_{2^n-1}\} f={f0?,f1?,?,f2n?1?},g={g0?,g1?,?,g2n?1?}
可以定義位運算卷積 ( f ? ⊙ g ) k = ∑ i ⊙ j = k f i × g j \displaystyle(f\otimes_\odot g)_k=\sum_{i\odot j=k}f_i\times g_j (f??g)k?=ij=k?fi?×gj? ,其中 ⊙ = and , or , xor \odot=\text{and},\text{or},\text{xor} =and,or,xor
還有 max ? \max max 卷積,這里不再拓展, 讀者自行查找相關資料,現在著重討論 ? xor \otimes_\text{xor} ?xor?

  • f ? xor g = g ? xor \displaystyle f\otimes_\text{xor} g=g\otimes_\text{xor} f?xor?g=g?xor? (交換律)
    由于 a xor ? b = b xor ? a\operatorname{xor}b=b\operatorname{xor} axorb=bxor ,根據定義顯然成立,
    and ? , or ? a n d , o r \operatorname{and},\operatorname{or}and,or and,orand,or 同樣滿足此性質,原因同上,
  • ( f ? xor g ) ? xor h = f ? xor ( g ? xor h ) (f\otimes_\text{xor} g)\otimes_\text{xor} h=f\otimes_\text{xor}(g \otimes_\text{xor} h) (f?xor?g)?xor?h=f?xor?(g?xor?h) (結合律)
    證明: 根據定義,有 ( f ? xor g ) k = ∑ i xor ? j = k f i × g j = ∑ i = 0 2 n ? 1 f i × g k xor ? i (f\otimes_\text{xor} g)_k=\displaystyle\sum_{i\operatorname{xor}j=k}f_i\times g_j=\sum\limits_{i=0}^{2^n-1}f_i\times g_{k\operatorname{xor}i} (f?xor?g)k?=ixorj=k?fi?×gj?=i=02n?1?fi?×gkxori? ,則

[ f ? xor ( g ? xor h ) ] m = ∑ i = 0 2 n ? 1 f m xor ? i × ( g ? xor h ) i = ∑ i = 0 2 n ? 1 f m xor ? i ∑ j = 0 2 n ? 1 g j h i xor ? j = ∑ i = 0 2 n ? 1 ∑ j = 0 2 n ? 1 f m xor ? i g j h i xor ? j = ∑ i xor ? j xor ? k = m f i g j h k \begin{aligned} {[f\otimes_\text{xor}(g\otimes_\text{xor}h)]_m} & =\sum_{i=0}^{2^n-1}f_{m\operatorname{xor}i}\times(g\otimes_\text{xor}h)_i \\&=\sum_{i=0}^{2^n-1}f_{m\operatorname{xor}i}\sum_{j=0}^{2^n-1}g_jh_{i\operatorname{xor}j}\\&=\sum_{i=0}^{2^n-1}\sum_{j=0}^{2^n-1}f_{m\operatorname{xor}i}g_jh_{i\operatorname{xor}j}\\& =\sum_{i\operatorname{xor}j\operatorname{xor}k=m}f_ig_jh_k\end{aligned} [f?xor?(g?xor?h)]m??=i=02n?1?fmxori?×(g?xor?h)i?=i=02n?1?fmxori?j=02n?1?gj?hixorj?=i=02n?1?j=02n?1?fmxori?gj?hixorj?=ixorjxork=m?fi?gj?hk??

交換順序后反向推導即可得證,
or ? , and ? \operatorname{or},\operatorname{and} or,and 沒有對應的逆運算,因此證明相對復雜,這里不給出證明,

  • ( f ⊕ g ) ? xor h = ( f ? xor h ) ⊕ ( g ? xor h ) (f\oplus g)\otimes_\text{xor} h=(f\otimes_\text{xor} h)\oplus(g\otimes_\text{xor} h) (fg)?xor?h=(f?xor?h)(g?xor?h) (分配律)
    證明同加法卷積, and ? , or ? \operatorname{and},\operatorname{or} and,or 同理,

0x10 FWT(快速沃爾什變換)

復習完上述基本概念以后,我們進入今天的正題,快速沃爾什變換(FWT),

我們知道 FFT 是用來在 O ( n l o g n ) \mathcal O(nlogn) O(nlogn) 的時間復雜度下利用分治求解普通序列 / 多項式的卷積:

對于序列 f , g f,g f,g ,其卷積序列 f ? g f\otimes g f?g 滿足對于 f ? g f\otimes g f?g 的第 k k k 項: ( f ? g ) k = ∑ i = 0 k f i × g k ? i = ∑ i , j i + j = k f i × g j (f\otimes g)_k=\displaystyle\sum\limits_{i=0}^kf_i\times g_{k-i}=\sum\limits_{i,j}^{i+j=k}f_i\times g_j (f?g)k?=i=0k?fi?×gk?i?=i,ji+j=k?fi?×gj?

對于多項式 f , g f,g f,g,其多項式的卷積為: f ? g = ∑ k = 0 n ( ∑ i , j i + j = k a i × b j ) x k \displaystyle f\otimes g=\sum\limits_{k=0}^{n}(\sum\limits_{i,j}^{i+j=k}a_i\times b_j)x^k f?g=k=0n?(i,ji+j=k?ai?×bj?)xk

上面定義了位運算卷積: ( f ? ⊙ g ) k = ∑ i ⊙ j = k f i × g j \displaystyle(f\otimes_\odot g)_k=\sum_{i\odot j=k}f_i\times g_j (f??g)k?=ij=k?fi?×gj? ,其中 ⊙ = and , or , xor \odot=\text{and},\text{or},\text{xor} =and,or,xor ,并講解了一系列相關性質,那么我們如何求得位運算卷積呢?我們模仿 FFT 給出一種類似的求解演算法:快速沃爾什變換(FWT),

嚴格來講,FWT 僅為 xor \text {xor} xor 卷積,FMT 為 and \text{and} and or \text{or} or 卷積,這里放到一塊統稱為 FWT,(QWQ)

我們將兩個 ( n ? 1 ) (n - 1) (n?1) 次多項式 A ( x ) = ∑ i = 0 n ? 1 a i x i \displaystyle A(x)~=~\sum\limits_{i = 0}^{n - 1} a_i x^i A(x) = i=0n?1?ai?xi B ( x ) = ∑ i = 0 n ? 1 b i x i \displaystyle B(x)~=~\sum\limits_{i = 0}^{n - 1} b_i x^i B(x) = i=0n?1?bi?xi 的系數數列 { a i } \{a_i\} {ai?},對其進行離散傅里葉變換(DFT)得到的兩個點值表示 { A d i } \{Ad_i\} {Adi?} { B d i } \{Bd_i\} {Bdi?},其中 A d k = ∑ i = 0 n ? 1 a i × ω n i k \displaystyle Ad_k~=~\sum\limits_{i = 0}^{n - 1} a_i \times \omega_n^{ik} Adk? = i=0n?1?ai?×ωnik?,我們使用 FFT 在 O ( n l o g n ) \mathcal O(nlogn) O(nlogn) 的時間復雜度下完成這一操作,

之后在 O ( n ) \mathcal O(n) O(n) 的時間復雜度下完成兩個點值表示的多項式的乘積 C i = A d i × B d i C_i=Ad_i\times Bd_i Ci?=Adi?×Bdi?

最后利用結論 a k = 1 n ∑ i = 0 n ? 1 d i ω n ? k i \displaystyle a_k~=~\frac{1}{n} \sum_{i = 0}^{n - 1} d_i \omega_n^{-ki} ak? = n1?i=0n?1?di?ωn?ki? ,通過逆離散傅里葉變換(IDFT)還原系數數列 { c i } \{c_i\} {ci?} 得到答案,同樣使用 FFT 在 O ( n l o g n ) \mathcal O(nlogn) O(nlogn) 的時間復雜度下完成這一操作,

我們借鑒多項式乘法即普通卷積的實作 FFT 得出類似的思路 FWT:

我們先求出多項式的另一種多項式表示 F W T ( A ) FWT(A) FWT(A) O ( n ) \mathcal O(n) O(n) 將對應的位置乘起來,最后復原即可,

即答案 F W T ( C ) = F W T ( A ) × F W T ( B ) \displaystyle FWT(C)=FWT(A)\times FWT(B) FWT(C)=FWT(A)×FWT(B)(其中 × \times ×多項式 / 序列 對應位置相乘

看上去思路沒有什么問題,我們考慮證明,

由于位運算卷積分為三種 ⊙ = and , or , xor \odot=\text{and},\text{or},\text{xor} =and,or,xor ,所以我們分開討論,

0x11 或( or \text{or} or)卷積

**或( or \text{or} or| ) 按位或運算子, |1110 **

或卷積: ( f ? or g ) k = ∑ i ∣ j = k f i × g j \displaystyle(f\otimes_{\text{or}} g)_k=\sum_{i| j=k}f_i\times g_j (f?or?g)k?=ij=k?fi?×gj?

對于序列 A , B , C A,B,C A,B,C A = { a 0 , a 1 ? ? , a n } A=\{a_0,a_1\cdots,a_{n}\} A={a0?,a1??,an?} B = { b 0 , b 1 , ? ? , b n } B=\{b_0,b_1,\cdots,b_n\} B={b0?,b1?,?,bn?} C = { c 0 , c 1 , ? c n } C=\{c_0,c_1,\cdots c_n\} C={c0?,c1?,?cn?} ,我們令 C C C 為或卷積的結果,

我們想要求的式子為 F W T ( C ) = F W T ( A ) × F W T ( B ) FWT(C)=FWT(A)\times FWT(B) FWT(C)=FWT(A)×FWT(B) ,即: c k = ∑ i ∣ j = k a i b j \displaystyle c_{k}=\sum_{i \mid j=k} a_{i} b_{j} ck?=ij=k?ai?bj?

顯然有 i ∣ k = k , j ∣ k = k → ( i ∣ j ) ∣ k = k i|k = k, j|k=k \to (i|j)|k=k ik=k,jk=k(ij)k=k

因此我們構造快速沃爾什變換 F W T FWT FWT F W T ( A ) [ k ] = ∑ i ∣ k = k a i \displaystyle FWT(A)[k]=\sum_{i|k=k}a_i FWT(A)[k]=ik=k?ai?
F W T ( A ) × F W T ( B ) = ( ∑ i ∣ k = k a i ) ( ∑ j ∣ k = k b j ) = ∑ i ∣ k = k , j ∣ k = k a i b j = ∑ ( i ∣ j ) ∣ k = k a i b j = F W T ( C ) \begin{aligned}FWT(A) \times FWT(B) &=\left(\sum_{i \mid k=k} a_{i}\right)\left(\sum_{j \mid k=k} b_{j}\right) \\&=\sum_{i|k=k,\ j| k=k} a_{i} b_{j} \\&=\sum_{(i \mid j) \mid k=k} a_{i} b_{j} \\&=FWT(C)\end{aligned} FWT(A)×FWT(B)?=???ik=k?ai???????jk=k?bj????=ik=k, jk=k?ai?bj?=(ij)k=k?ai?bj?=FWT(C)?


性質11.1: F W T ( A ± B ) = F W T ( A ) ± F W T ( B ) FWT(A\pm B)=FWT(A)\pm FWT(B) FWT(A±B)=FWT(A)±FWT(B)

根據 F W T FWT FWT 變換的定義我們可以將其看作是一個 A A A 序列的線性組合,故其加減法滿足分配律,

由此我們可以得到 FWT 的遞推式:

性質11.2:
F W T ( A ) = { ( F W T ( A 0 ) , F W T ( A 0 ) + F W T ( A 1 ) ) n > 1 A n = 0 FWT(A)=\begin{cases}(FWT(A_0),FWT(A_0)+FWT(A_1))& n>1\\\ A & n=0\end{cases} FWT(A)={(FWT(A0?),FWT(A0?)+FWT(A1?)) A?n>1n=0?
其中定義 A A A 2 k 2^k 2k 多項式, A 0 A_0 A0? 代表 A A A 的系數序列的前半部分即前 2 k ? 1 2^{k-1} 2k?1 次項, A 1 A_1 A1? 代表 A A A 的后半部分即后 2 k ? 1 2^{k-1} 2k?1 次項,也就是下標的最高位分別為 0 0 0 1 1 1 的兩部分,

式中的括號運算定義為: A = ( B , C ) A=(B,C) A=(B,C)

表示 B B B 這個多項式后面接上 C C C 等于 A A A,展開后為:
( A , B ) = ( ( a 0 , a 1 , a 2 ? a x ? 1 ) , ( b 0 , b 1 , b 2 ? b y ? 1 ) ) = ( a 0 , a 1 , a 2 ? a x ? 1 , b 0 , b 1 , b 2 ? b y ? 1 ) \begin{aligned}(A, B) &=\left(\left(a_{0}, a_{1}, a_{2} \cdots a_{x-1}\right),\left(b_{0}, b_{1}, b_{2} \cdots b_{y-1}\right)\right) \\&=\left(a_{0}, a_{1}, a_{2} \cdots a_{x-1}, b_{0}, b_{1}, b_{2} \cdots b_{y-1}\right)\end{aligned} (A,B)?=((a0?,a1?,a2??ax?1?),(b0?,b1?,b2??by?1?))=(a0?,a1?,a2??ax?1?,b0?,b1?,b2??by?1?)?
可以理解為系數直接連起來,

考慮證明:

首先 n = 0 n=0 n=0 時顯然成立,

我們知道 A 0 , A 1 A_0,A_1 A0?,A1? 實際上為下標的最高位分別為 0 0 0 1 1 1 的兩部分,且除了最高位不同以外,其余的所有位,對于每一個下標 A 1 A_1 A1? 都有一個 A 0 A_0 A0? 與之相對應(僅最高位一個是 1 1 1 ,一個是 0 0 0),

根據 FWT 的定義,合并之后左半部分下標的最高位仍然是 0 0 0,右半部分下標的最高位仍然是 1 1 1

首先對于左半部分:

由于 F W T ( A 1 ) FWT(A_1) FWT(A1?) 的最高位一定為 1 1 1,而此時 j ∣ i j|i ji 的最高位不可能為 0 0 01 | 0 = 1),所以右半部分在合并之后對于左半部分是沒有貢獻的,故 F W T ( A ) 0 = F W T ( A 0 ) FWT(A)_0=FWT(A_0) FWT(A)0?=FWT(A0?)

而對于右半部分,如果左半部分的數滿足 j ∣ i = i j|i=i ji=i,那么在 i i i 加上最高位 1 1 1 之后, j ∣ i = i j|i=i ji=i 仍然成立,而此時右半部分的原來的 F W T ( A 1 ) FWT(A_1) FWT(A1?) 本來就對右半部分的數有貢獻,故 F W T ( A ) 1 = F W T ( A 0 ) + F W T ( A 1 ) FWT(A)_1=FWT(A_0)+FWT(A_1) FWT(A)1?=FWT(A0?)+FWT(A1?)

故我們將這兩部分使用括號運算合并即可得到: F W T ( A ) = ( F W T ( A 0 ) , F W T ( A 0 ) + F W T ( A 1 ) ) FWT(A)=(FWT(A_0),FWT(A_0)+FWT(A_1)) FWT(A)=(FWT(A0?),FWT(A0?)+FWT(A1?))

性質11.2 得證,


性質11.3: F W T ( A ∣ B ) = F W T ( A ) × F W T ( B ) FWT(A|B)=FWT(A)\times FWT(B) FWT(AB)=FWT(A)×FWT(B)

(注,這里的 × \times × 指對應系數相乘,見前排符號規定)

我們可以利用上面的 性質11.1 以及 性質11.2,使用數學歸納法證明:

F W T ( A ∣ B ) = F W T ( ( A ∣ B ) 0 , ( A ∣ B ) 1 ) = F W T ( A 0 ∣ B 0 , A 0 ∣ B 1 + A 1 ∣ B 0 + A 1 ∣ B 1 ) = ( F W T ( A 0 ∣ B 0 ) , F W T ( A 0 ∣ B 0 + A 0 ∣ B 1 + A 1 ∣ B 0 + A 1 ∣ B 1 ) ) = ( F W T ( A 0 ) × F W T ( B 0 ) , F W T ( A 0 ) × F W T ( B 0 ) + F W T ( A 0 ) × F W T ( B 1 ) + F W T ( A 1 ) × F W T ( B 0 ) + F W T ( A 1 ) × F W T ( B 1 ) ) = ( F W T ( A 0 ) × F W T ( B 0 ) , ( F W T ( A 0 ) + F W T ( A 1 ) ) × ( F W T ( B 0 ) + F W T ( B 1 ) ) ) = ( F W T ( A 0 ) , F W T ( A 0 + A 1 ) ) × ( F W T ( B 0 ) , F W T ( B 0 + B 1 ) ) = F W T ( A ) × F W T ( B ) \begin{aligned} FWT(A|B)=&FWT((A|B)_0,(A|B)_1)\\ =&FWT(A_0|B_0,A_0|B_1+A_1|B_0+A_1|B_1)\\ =&(FWT(A_0|B_0),FWT(A_0|B_0+A_0|B_1+A_1|B_0+A_1|B_1))\\ =&(FWT(A_0)\times FWT(B_0)\\&,FWT(A_0)\times FWT(B_0)+FWT(A_0)\times FWT(B_1)+FWT(A_1)\times FWT(B_0)+FWT(A_1)\times FWT(B_1))\\ =&(FWT(A_0)\times FWT(B_0),(FWT(A_0)+FWT(A_1))\times (FWT(B_0)+FWT(B_1)))\\ =&(FWT(A_0),FWT(A_0+A_1))\times (FWT(B_0),FWT(B_0+B_1))\\ =&FWT(A)\times FWT(B) \end{aligned} FWT(AB)=======?FWT((AB)0?,(AB)1?)FWT(A0?B0?,A0?B1?+A1?B0?+A1?B1?)(FWT(A0?B0?),FWT(A0?B0?+A0?B1?+A1?B0?+A1?B1?))(FWT(A0?)×FWT(B0?),FWT(A0?)×FWT(B0?)+FWT(A0?)×FWT(B1?)+FWT(A1?)×FWT(B0?)+FWT(A1?)×FWT(B1?))(FWT(A0?)×FWT(B0?),(FWT(A0?)+FWT(A1?))×(FWT(B0?)+FWT(B1?)))(FWT(A0?),FWT(A0?+A1?))×(FWT(B0?),FWT(B0?+B1?))FWT(A)×FWT(B)?


當然我們也可以使用定義將其展開來證明,這樣看上去會會更加的清晰一些,

其中若 i ∣ k = k , j ∣ k = k → ( i ∣ j ) ∣ k = k i|k=k,j|k=k\to (i|j)|k=k ik=k,jk=k(ij)k=k

F W T ( A ) × F W T ( B ) = ( ∑ i ∣ 0 = 0 a i , ∑ i ∣ 1 = 1 a i , ∑ i ∣ 2 = 2 a i ? ∑ i ∣ ( n ? 1 ) = ( n ? 1 ) a i ) × ( ∑ i ∣ 0 = 0 b i , ∑ i ∣ 1 = 1 b i , ∑ i ∣ 2 = 2 b i ? ∑ i ∣ ( n ? 1 ) = ( n ? 1 ) b i ) = ( ( ∑ i ∣ 0 = 0 a i ) × ( ∑ j ∣ 0 = 0 b j ) , ( ∑ i ∣ 1 = 1 a i ) × ( ∑ j ∣ 1 = 1 b j ) , ( ∑ i ∣ 2 = 2 a i ) × ( ∑ j ∣ 2 = 2 b j ) ? ( ∑ i ∣ ( n ? 1 ) = ( n ? 1 ) a i ) × ( ∑ j ∣ ( n ? 1 ) = ( n ? 1 ) b j ) ) = ( ∑ i ∣ j ∣ 0 = 0 a i × b j , ∑ i ∣ j ∣ 1 = 1 a i × b j , ∑ i ∣ j ∣ 2 = 2 a i × b j ? ∑ i ∣ j ∣ ( n ? 1 ) = ( n ? 1 ) a i × b j ) = ( ∑ k ∣ 0 = 0 ∑ i ∣ j = k a i × b j , ∑ k ∣ 1 = 1 ∑ i ∣ j = k a i × b j , ∑ k ∣ 2 = 2 ∑ i ∣ j = k a i × b j ? ∑ k ∣ ( n ? 1 ) = ( n ? 1 ) ∑ i ∣ j = k a i × b j ) = F W T ( A ∣ B ) \begin{aligned}FWT(A) \times F W T(B) &=\left(\sum_{i \mid 0=0} a_{i}, \sum_{i \mid 1=1} a_{i}, \sum_{i \mid 2=2} a_{i} \cdots \sum_{i \mid(n-1)=(n-1)} a_{i}\right) \times \left(\sum_{i \mid 0=0} b_{i}, \sum_{i \mid 1=1} b_{i}, \sum_{i \mid 2=2} b_{i} \cdots \sum_{i \mid(n-1)=(n-1)} b_{i}\right) \\&=\left(\left(\sum_{i \mid 0=0} a_{i}\right) \times \left(\sum_{j \mid 0=0} b_{j}\right),\left(\sum_{i \mid 1=1} a_{i}\right) \times \left(\sum_{j \mid 1=1} b_{j}\right),\left(\sum_{i \mid 2=2} a_{i}\right) \times \left(\sum_{j \mid 2=2} b_{j}\right) \cdots\left(\sum_{i \mid(n-1)=(n-1)} a_{i}\right) \times \left(\sum_{j \mid(n-1)=(n-1)} b_{j}\right)\right) \\&=\left(\sum_{i|j| 0=0} a_{i} \times b_{j}, \sum_{i|j| 1=1} a_{i}\times b_{j}, \sum_{i|j| 2=2} a_{i} \times b_{j} \cdots \sum_{i|j|(n-1)=(n-1)} a_{i} \times b_{j}\right) \\&=\left(\sum_{k \mid 0=0} \sum_{i \mid j=k} a_{i} \times b_{j}, \sum_{k \mid 1=1} \sum_{i \mid j=k} a_{i} \times b_{j}, \sum_{k \mid 2=2} \sum_{i \mid j=k} a_{i} \times b_{j} \cdots \sum_{k \mid(n-1)=(n-1)} \sum_{i \mid j=k} a_{i} \times b_{j}\right) \\&=F W T(A \mid B)\end{aligned} FWT(A)×FWT(B)?=???i0=0?ai?,i1=1?ai?,i2=2?ai??i(n?1)=(n?1)?ai????×???i0=0?bi?,i1=1?bi?,i2=2?bi??i(n?1)=(n?1)?bi????=??????i0=0?ai????×???j0=0?bj????,???i1=1?ai????×???j1=1?bj????,???i2=2?ai????×???j2=2?bj????????i(n?1)=(n?1)?ai????×???j(n?1)=(n?1)?bj???????=???ij0=0?ai?×bj?,ij1=1?ai?×bj?,ij2=2?ai?×bj??ij(n?1)=(n?1)?ai?×bj????=???k0=0?ij=k?ai?×bj?,k1=1?ij=k?ai?×bj?,k2=2?ij=k?ai?×bj??k(n?1)=(n?1)?ij=k?ai?×bj????=FWT(AB)?


至此,我們得到了與 FFT 類似的 FWT 的所有定義與性質,

根據 FFT 的流程,我們需要定義 IFWT,即逆沃爾什變換,

我們定義 I F W T ( F W T ( A ) ) = A IFWT(FWT(A))=A IFWT(FWT(A))=A

則:
I F W T ( A ) = { ( I F W T ( A 0 ) , I F W T ( A 1 ) ? I F W T ( A 0 ) ) n > 1 A n = 0 IFWT(A)=\begin{cases}(IFWT(A_0),IFWT(A_1)-IFWT(A_0))&n>1\\\ A&n=0\end{cases} IFWT(A)={(IFWT(A0?),IFWT(A1?)?IFWT(A0?)) A?n>1n=0?
考慮證明:

根據 性質11.1
∵ F W T ( A ) 0 = F W T ( A 0 ) ∴ A 0 = IFWT ? ( F W T ( A 0 ) ) = IFWT ? ( F W T ( A ) 0 ) ∵ F W T ( A ) 1 = F W T ( A 0 ) + F W T ( A 1 ) ∴ A 1 = I F W T ( F W T ( A 1 ) ) = I F W T ( F W T ( A ) 1 ? F W T ( A ) 0 ) ∴ I F W T ( A ) = I F W T ( ( A 0 , A 1 ) ) = ( I F W T ( A 0 ) , I F W T ( A 1 ) ? I F W T ( A 0 ) ) \begin{aligned}&\\&\because F W T(A)_{0}=F W T\left(A_{0}\right)\\&\therefore A_{0}=\operatorname{IFWT}\left(F W T\left(A_{0}\right)\right)=\operatorname{IFWT}\left(F W T(A)_{0}\right)\\&\because F W T(A)_{1}=F W T\left(A_{0}\right)+F W T\left(A_{1}\right)\\&\therefore A_{1}=I FW T\left(F W T\left(A_{1}\right)\right)=I FW T\left(F W T(A)_{1}-F W T(A)_{0}\right)\\& \therefore IFWT(A)=IFWT((A_0, A_1))=(IFWT(A_0),IFWT(A_1)-IFWT(A_0))\end{aligned} ?FWT(A)0?=FWT(A0?)A0?=IFWT(FWT(A0?))=IFWT(FWT(A)0?)FWT(A)1?=FWT(A0?)+FWT(A1?)A1?=IFWT(FWT(A1?))=IFWT(FWT(A)1??FWT(A)0?)IFWT(A)=IFWT((A0?,A1?))=(IFWT(A0?),IFWT(A1?)?IFWT(A0?))?
其實看起來非常的形象,因為 IFWT 是 FWT 的逆運算,所以公式逆過來, + + + 變成 ? - ? 就行了,

顯然FWT與IFWT運算基本相同,實作的時候寫成一個函式即可:

inline void OR(int *f, int x = 1) {
	for (int o = 2, k = 1; o <= n; o <<= 1, k <<= 1)
		for (int i = 0; i < n; i += o)
			for (int j = 0; j < k; ++ j)
				f[i + j + k] += f[i + j] * x;
}

0x12 與( and \text{and} and)卷積

同理,我們可以得到與卷積的定義式:
F W T ( A ) [ k ] = ∑ i & k = k a i FWT(A)[k]=\sum_{i\&k=k}a_i FWT(A)[k]=i&k=k?ai?
以及 FWT 的遞推式:
F W T ( A ) = { ( F W T ( A 0 ) + F W T ( A 1 ) , F W T ( A 1 ) ) n > 1 A n = 0 FWT(A)=\begin{cases}(FWT(A_0)+FWT(A_1),FWT(A_1))&n>1\\\ A &n=0\end{cases} FWT(A)={(FWT(A0?)+FWT(A1?),FWT(A1?)) A?n>1n=0?

證明同或卷積,序列 A A A 的右半部分任意一個下標 & \& & 左半部分即首位為 0 0 0 的數,得到的結果一定在 A A A 的左半部分,故 A 1 A_1 A1? 對 左半部分有貢獻,且一定對自己所在的右半部分有貢獻,

性質12.1: F W T ( A & B ) = F W T ( A ) × F W T ( B ) FWT(A\&B)=FWT(A)\times FWT(B) FWT

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262476.html

標籤:其他

上一篇:P7385 「EZEC-6」跳一跳 題解

下一篇:Win鍵失效解決方案+鍵盤檢測器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more