利用类FFT置换矩阵和Gibbs矩阵构造二元Bent函数
1. 利用类FFT置换矩阵构造二元Bent函数
在构造二元Bent函数时,类FFT置换矩阵发挥着重要作用。通过一些示例所展示的方法,我们可以直接制定一个算法,用于构造具有选定变量数量和指定非零值数量的Bent函数。
首先,需要为指定的变量数量 $n$ 确定一个类FFT置换矩阵库 $\mathcal{L}$。以下是具体的算法步骤:
-
算法8.1(FFT - 置换矩阵)
1. 给定一个具有选定非零值数量的任意Bent函数 $f$。
2. 对 $f$ 应用一个类FFT置换矩阵,并将结果写入一个列表。
3. 针对来自矩阵库 $\mathcal{L}$ 的不同置换矩阵重复步骤2。
4. 检查每个生成的Bent函数是否已经包含在列表中。如果是(Yes),则跳过该函数并返回步骤2。
这个算法具有一些基本特性。该方法基于谱不变操作推导而来,这确保了生成的函数是Bent函数,因此无需检查其Bent性,简化了构造过程。直接实现谱不变操作需要计算Walsh谱,对谱系数子集执行谱不变操作,最后计算逆Walsh变换来确定以这种方式构造的函数。而在这个算法中,置换是在原始域中进行的,因此不需要计算Walsh谱和逆变换。此外,由于置换矩阵是从快速计算算法中的因子矩阵推导而来,并具有规则的Kronecker积结构,所以该算法的实现速度很快。
例如,对于函数 $f_{1,4,2,3}(x_1, x_2, x_3, x_4) = x_4 \oplus x_3x_4 \oplus x_2 \oplus x_1x_3 \oplus x_1x_2$,可以通过谱不变操作 $x_2 \to x_2 \oplus x_3$ 接着 $x_1 \to x_1 \oplus x_4$ 得到。同时,书中还给出了计算 $Q_{2,4}$、$Q_{4,2}$、$Q_{1,4,2,3}$ 等的流程图,这些流程图展示了函数向量在经过置换矩阵作用后的变换情况。
下面是一个简单的mermaid流程图,展示算法8.1的流程:
graph TD;
A[给定任意Bent函数f] --> B[应用类FFT置换矩阵到f];
B --> C[将结果写入列表];
C --> D{是否还有不同置换矩阵};
D -- 是 --> B;
D -- 否 --> E{生成的函数是否在列表中};
E -- 是 --> B;
E -- 否 --> F[结束];
2. Gibbs矩阵和类FFT置换矩阵
Gibbs矩阵和类FFT置换矩阵都是 $(2^n \times 2^n)$ 置换矩阵的不同子集。它们的共同特点是都具有由 $(2 \times 2)$ 子矩阵组成的块结构,但这些子矩阵有所不同。在Gibbs矩阵中,子矩阵只有一个非零元素;而在类FFT置换矩阵中,有两个非零元素,并且包含 $(2 \times 2)$ 单位矩阵。
由于它们的块结构,Gibbs矩阵和类FFT置换矩阵都会对Bent函数的函数向量的子向量进行置换,同时也会对这些子向量中的元素进行置换,并且能够保持函数的Bent性。从谱不变操作的角度来看,这些矩阵执行不同的谱不变操作。Gibbs置换矩阵实际上执行两种谱不变操作:变量置换和变量取反;而类FFT置换矩阵不执行变量置换,根据其定义方式,可能执行变量取反或变量的谱平移。
因此,将这些矩阵应用于给定的Bent函数会产生其他Bent函数。不过,根据初始Bent函数中子向量的结构,应用Gibbs矩阵或类FFT置换矩阵可能会得到与初始函数相同的函数,或者不同的矩阵可能会产生相同的结果函数。也有可能特定的Gibbs矩阵和类FFT矩阵应用于同一个初始Bent函数会产生相同的函数。
以下是一个示例,给定一个Gibbs置换矩阵 $P_{Gibbs}$ 和一个类FFT置换矩阵 $P_{FFT}$ 用于四变量函数:
$P_{Gibbs} =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
\end{bmatrix}$
$P_{FFT} =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
\end{bmatrix}$
并且 $P_{FFT} = P_2 \cdot P_1$,其中:
$P_1 =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
\end{bmatrix}$
$P_2 =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
\end{bmatrix}$
矩阵 $P_1$ 和 $P_2$ 分别执行谱不变操作 $x_2 = x_2 \oplus x_3$ 和 $x_3 = x_3 \oplus x_2$。
将矩阵 $P_{Gibbs}$ 和 $P_{FFT}$ 应用于由函数表达式 $f = x_1x_2 \oplus x_3x_4 \oplus x_2x_4$ 和函数向量 $F = [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1]^T$ 指定的Bent函数,会产生相同的Bent函数 $f_1$,其函数向量为 $F_1 = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0]^T$,函数表达式为 $f_1 = x_1x_3 \oplus x_2x_4$。
下面通过表格对比Gibbs矩阵和类FFT置换矩阵的特点:
| 矩阵类型 | 子矩阵非零元素数量 | 谱不变操作 |
| ---- | ---- | ---- |
| Gibbs矩阵 | 1 | 变量置换、变量取反 |
| 类FFT置换矩阵 | 2 | 变量取反或谱平移 |
3. 矩阵应用示例及结果分析
为了更清晰地展示Gibbs矩阵和类FFT置换矩阵在构造Bent函数中的应用,我们继续分析将这两个矩阵应用于另一个Bent函数的情况。
将矩阵 $P_{Gibbs}$ 和 $P_{FFT}$ 应用于由函数表达式 $f_2 = x_1x_2 \oplus x_3x_4 \oplus x_4$ 和函数向量 $F_2 = [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1]^T$ 指定的Bent函数。
以下是具体的操作步骤:
1. 定义Gibbs矩阵 $P_{Gibbs}$、类FFT置换矩阵 $P_{FFT}$ 以及Bent函数 $f_2$ 的函数向量 $F_2$。
2. 分别计算 $P_{Gibbs} \cdot F_2$ 和 $P_{FFT} \cdot F_2$,得到新的函数向量。
3. 根据新的函数向量确定对应的函数表达式。
通过计算,我们可以得到应用矩阵后的结果。这再次验证了不同的矩阵应用于同一个Bent函数可能会产生不同的结果,也可能产生相同的结果,具体取决于矩阵的结构和初始Bent函数的子向量结构。
下面是一个mermaid流程图,展示了矩阵应用于Bent函数的通用流程:
graph TD;
A[定义Bent函数f和矩阵P] --> B[计算P * f的函数向量];
B --> C[根据新函数向量确定函数表达式];
C --> D{判断结果函数是否与初始函数相同};
D -- 是 --> E[结果函数与初始函数相同];
D -- 否 --> F[结果函数与初始函数不同];
4. 总结
综上所述,类FFT置换矩阵和Gibbs矩阵在构造二元Bent函数方面都具有独特的优势。类FFT置换矩阵通过其规则的Kronecker积结构,使得构造算法快速高效,并且无需计算Walsh谱和逆变换,简化了构造过程。而Gibbs矩阵和类FFT置换矩阵虽然都能保持函数的Bent性,但它们执行不同的谱不变操作,在应用于初始Bent函数时会产生不同的结果。
在实际应用中,我们可以根据具体需求选择合适的矩阵来构造Bent函数。例如,如果希望通过变量置换和取反来构造新的Bent函数,可以选择Gibbs矩阵;如果更倾向于利用变量的谱平移来构造函数,则可以考虑类FFT置换矩阵。
以下是一个简单的总结表格,对比了类FFT置换矩阵和Gibbs矩阵的优缺点:
| 矩阵类型 | 优点 | 缺点 |
| ---- | ---- | ---- |
| 类FFT置换矩阵 | 构造算法快速,无需计算Walsh谱和逆变换 | 不执行变量置换 |
| Gibbs矩阵 | 可执行变量置换和取反操作 | 构造过程可能相对复杂 |
通过合理运用这两种矩阵,我们可以更灵活地构造出满足不同需求的二元Bent函数,为相关领域的研究和应用提供有力支持。
超级会员免费看
8706

被折叠的 条评论
为什么被折叠?



