31、利用类FFT置换矩阵和Gibbs矩阵构造二元Bent函数

利用类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函数,为相关领域的研究和应用提供有力支持。

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值