布尔函数简介

在密码学中,布尔函数是加密算法的核心部件之一。

布尔函数指从 F2n\mathbb{F}_2^nF2n​ 到 F2\mathbb{F}_2F2​ 的映射。

简单举例如下:

一个三元(n=3n=3n=3)布尔函数 FFF 是指从 F23\mathbb{F}_2^3F23​ 到 F2\mathbb{F}_2F2​ 的映射。
其中,
F23={000,001,010,011,100,101,110,111}F2={0,1}\mathbb{F}_2^3=\{000,001,010,011,100,101,110,111\} \\ \mathbb{F}_2=\{0,1\} F23​={000,001,010,011,100,101,110,111}F2​={0,1}
我们可以认为 xxx 是 F23\mathbb{F_2^3}F23​ 中的某个元素,而此时 F(x)F(x)F(x) 的值就是 000 或者 111。

布尔函数表示方法

真值表表示

若 FFF 符合
F(000)=1,F(001)=0F(010)=1,F(011)=0F(100)=0,F(101)=0F(110)=1,F(111)=0F(000) = 1,~ F(001) = 0\\ F(010) = 1,~ F(011) = 0\\ F(100) = 0,~ F(101) = 0\\ F(110) = 1,~ F(111) = 0\\ F(000)=1, F(001)=0F(010)=1, F(011)=0F(100)=0, F(101)=0F(110)=1, F(111)=0
则 f(x)f(x)f(x) 的真值表可以为 {1,0,1,0,0,0,1,0}\{1,0,1,0,0,0,1,0\}{1,0,1,0,0,0,1,0}

小项表示

布尔函数的小项表示由它的真值表唯一确定。
布尔函数是它取值为1的那些真值指派对应的小项函数之和。

三元布尔函数 FFF 如上所述,则小项表示为:
F(x)=x10x20x30+x10x21x30+x11x21x30F(x)=x_1^0x_2^0x_3^0+x_1^0x_2^1x_3^0+x_1^1x_2^1x_3^0 F(x)=x10​x20​x30​+x10​x21​x30​+x11​x21​x30​
其中 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 分别是 xxx 的三个分量,所以函数 F(x)F(x)F(x) 也可以写成 F(x1,x2,x3)F(x_1,x_2,x_3)F(x1​,x2​,x3​)
由真值表求小项表示可以仅留下真值为 111 的部分,标注上标即可(仅为求法,有具体含义)。

ANF(代数范式、代数正规型)

上述布尔函数 FFF 的多项式表示为:
F(x)=1+x1+x3+x1x2+x1x3+x1x2x3F(x)=1+x_1+x_3+x_1x_2+x_1x_3+x_1x_2x_3 F(x)=1+x1​+x3​+x1​x2​+x1​x3​+x1​x2​x3​
这也称为它的ANF。
由真值表求ANF可通过先求小项表示再展开(xi0=xi+1,xi1=xix_i^0=x_i+1,~x_i^1=x_ixi0​=xi​+1, xi1​=xi​)的途径:
这样,小项表示即可展开为多项式表示:
F(x)=(x1+1)(x2+1)(x3+1)+(x1+1)x2(x3+1)+x1x2(x3+1)→F(x)=1+x1+x3+x1x2+x1x3+x1x2x3F(x)=(x_1+1)(x_2+1)(x_3+1)+(x_1+1)x_2(x_3+1)+x_1x_2(x_3+1)\\ \to~F(x)=1+x_1+x_3+x_1x_2+x_1x_3+x_1x_2x_3 F(x)=(x1​+1)(x2​+1)(x3​+1)+(x1​+1)x2​(x3​+1)+x1​x2​(x3​+1)→ F(x)=1+x1​+x3​+x1​x2​+x1​x3​+x1​x2​x3​


布尔函数中的运算:1+1=0+0=0,0+1=1+0=1,0*0=0*1=1*0=0,1*1=1


包括递归方式求ANF及其他相关代码:https://gitee.com/ssdreamc/about_boolean_functions

从布尔函数的真值表求其代数正规型(ANF)相关推荐

  1. 离散实验 真值表求主析取范式、主合取范式的计算机语言实现

    离散数学 实验一 标题:真值表求主析取范式.主合取范式的计算机语言实现 其他课程的一些其他实验源码也可在本人github主页找到哦 链接如下:https://github.com/Schiz0mani ...

  2. c语言整型最大数,C语言:求一个短整型正整数中的最大数字

    C语言:求一个短整型正整数中的最大数字 关注:84  答案:5  手机版 解决时间 2021-01-16 02:17 提问者舊倳偂歡 2021-01-15 14:26 例如整数12354中的最大数字是 ...

  3. c语言构造合式公式真值表,求C++构造任意合式公式的真值表?

    构造任意合式公式的真值表 A)功能 给出任意变元的合式公式,要求构造该合式公式的真值表. B)基本思想 我们仍然用数值变量来表示命题变元.合式公式的表示及求真值的方法采用1.2   中所采用的方法,并 ...

  4. 由真值表求逻辑表达式的方法

    第一种方法:以真值表内输出端"1"为准 第一步:从真值表内找输出端为"1"的各行,把每行的输入变量写成乘积形式;遇到"0"的输入变量上加非号 ...

  5. 利用真值表求命题公式A=(p→(q→r))↔︎(r→(q→p))的主析取范式和主合取范式.(10分)

  6. 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码

    1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...

  7. 【微电网优化】基于matlab粒子群算法求解热电联供型微电网经济运行优化问题【含Matlab源码 1696期】

    一.多目标粒子群算法求解电联供型微电网经济运行优化简介 0 引言 热电联供 (combined heat and power, CHP) 系统建立在能源梯级利用的概念基础上, 统一解决了电能和热能的供 ...

  8. 【离散数学】Java语言实现利用真值表法求主析取范式和主合取范式

    C++版本的看这个链接: [离散数学]C++语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/ ...

  9. 【离散数学】C++语言实现利用真值表法求主析取范式和主合取范式

    Java版本的如下链接所示: Java语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/art ...

最新文章

  1. 5G通信3大场景 来源:elecfans
  2. 向app store提交应用时,必须点“ready to upload binary”!
  3. Odoo访问权限(一)
  4. oracle 39170,39170-1134
  5. Python 对文件进行编码转换
  6. CentOS 7上升级openssh7.5
  7. oracle更改字段大小语句,sql语句修改字段长度(实例)
  8. 在iOS微信里如何自动播放
  9. java吊打面试官系列,java高级程序员面试笔试宝典蔡羽
  10. 国家集训队论文分类整理(转)
  11. Timus Online Judge 2045 Richness of words
  12. t.cn新浪短链接 生成
  13. 【成功实现】python对tif图片的读取与保存
  14. 人工智能已经成为全球新一轮科技革命和产业变革的核心驱动力
  15. 车载通信——CAN收发器选型(低功耗)
  16. Pytorch增加矩阵维度
  17. 基于ASP.NET网站流量统计系统的设计与实现
  18. 请列举Nginx的一些特性
  19. 古风排版+大笨钟+宇宙无敌加法器+情人节
  20. 总结:js世界中的特殊符号

热门文章

  1. 后疫情时代,“马太效应”将影响更多人
  2. 使用word插入无法编辑的对象
  3. SQL server 建表时的一些知识 常用的Sql函数
  4. utran体系结构包括_接入网体系结构
  5. K均值聚类算法(Kmeans)讲解及源码实现
  6. 8001正红背绿冠号收集和探讨
  7. 度小满笔试两道编程题2020/09/20
  8. html输入框不显示cookie_【HTML教程】网页制作常见问题解答二
  9. 卫星导航定位技术二:由星历参数求解卫星时空位置
  10. ArTIST:Probabilistic Tracklet Scoring and Inpainting for Multiple Object Tracking