有限序列線性複雜度和k-誤差線性複雜度的計算
在本節中,我們的目標是開發算法,計算有限序列的線性複雜度和k-誤差線性複雜度,將其視爲週期爲2次方的二進制序列的初始段(我們不需要知道是哪一次方)。
注意,任何週期爲2v的無窮序列s∈T,其中 最小,c(s)≤2v。因此,如果我們知道s的至少2c(s)項,我們實際上知道序列的整個週期,即我們知道整個序列。
我們將用 表示週期任意冪爲2的二進制序列集,T=⋃i=0∞P2i。
定理3.1 假設z=(z0,z1,⋯,zt−1)∈F2t 是一個長度爲t≥1的有限序列。
定義u=⌈log2t⌉ ,無限週期爲2u的序列s′如下:
- 如果c(z,T)≤2t , 則c(z,T)=c(s′) ;
- 如果c(z,T)>2t , 則 c(s′)>2t 。
前面的定理可用於計算有限序列的線性複雜度,如下所示。對於長度爲t的有限序列z,將其看作一個週期序列的初始段,在定理3.1中建立(線性時間)週期2⌈log2t⌉ 2的無窮序列s′。然後使用Games-Chan算法計算c(s′)。如果結果最多是2t,我們將其輸出爲c(z,T)。否則,我們輸出一條消息“z的複雜度大於項數的一半”。當我們真正想計算只知道第一個t項的無限序列s的複雜度時,這種情況可能很有用。
然而,我們可能需要計算c(z,T)的精確值,即使它比2t高。這一點,以及k-錯誤複雜度可以使用以下定理計算。其主要思想是,如果我們將有限序列擴展爲無限週期代價序列,例如序列中的新項都是具有零代價的,那麼對新項的任何更改都不計入k個錯誤,只計入原始有限序列中的更改。
定理3.2 假設z=(z0,z1,⋯,zt−1)∈F2t是一個有限序列,其中t≥1。定義u=⌈log2t⌉,定義週期爲2u的無限代價序列s′ ,如下所示:
si′=zi , cost[i]=1 ,i=0,1,⋯,t−1
∀si′ , cost[i]=0 , i=t,t+1,⋯,2u−1
ck(z,T)=ck,2u(s′,cost) , k=0,1,⋯,wt(z)
特別地,c0(z,T)=c0,2u(s′,cost)