生成 n 个变量的所有可能布尔函数的算法

2023-11-26

对于 n 个变量,存在 2^(2^n) 个不同的布尔函数。例如,如果n=2,则存在16个可能的布尔函数,它们可以写成乘积之和形式或和乘积形式。可能的函数数量随着 n 呈指数增长。

我正在寻找一种算法,可以为 n 个变量生成所有这些可能的布尔规则。我尝试在各个地方进行搜索,但到目前为止还没有找到合适的。大多数算法都与将布尔函数简化或减少为标准形式有关。

我知道即使 n=8 或 9 的规则数量也会变得太大,但是有人可以帮我解决相关算法(如果存在)吗?


一个布尔函数n变量有2^n可能的输入。可以通过打印范围内值的二进制表示来枚举这些0 <= x < 2^n.

对于每一个可能的输入,布尔函数可以输出0 or 1。枚举所有可能性(即每个可能的真值表)。列出范围内的二进制值0 <= x < 2^(2^n).

这是 Python 中的算法:

from __future__ import print_function
from itertools import product       # forms cartesian products
n = 3                               # number of variables

print('All possible truth tables for n =', n)
inputs = list(product([0, 1], repeat=n))
for output in product([0, 1], repeat=len(inputs)):
    print()
    print('Truth table')
    print('-----------')
    for row, result in zip(inputs, output):
        print(row, '-->', result)

输出如下所示:

All possible truth tables for n = 3

Truth table
-----------
(0, 0, 0) --> 0
(0, 0, 1) --> 0
(0, 1, 0) --> 0
(0, 1, 1) --> 0
(1, 0, 0) --> 0
(1, 0, 1) --> 0
(1, 1, 0) --> 0
(1, 1, 1) --> 0

Truth table
-----------
(0, 0, 0) --> 0
(0, 0, 1) --> 0
(0, 1, 0) --> 0
(0, 1, 1) --> 0
(1, 0, 0) --> 0
(1, 0, 1) --> 0
(1, 1, 0) --> 0
(1, 1, 1) --> 1

Truth table
-----------
(0, 0, 0) --> 0
(0, 0, 1) --> 0
(0, 1, 0) --> 0
(0, 1, 1) --> 0
(1, 0, 0) --> 0
(1, 0, 1) --> 0
(1, 1, 0) --> 1
(1, 1, 1) --> 0

Truth table
-----------
(0, 0, 0) --> 0
(0, 0, 1) --> 0
(0, 1, 0) --> 0
(0, 1, 1) --> 0
(1, 0, 0) --> 0
(1, 0, 1) --> 0
(1, 1, 0) --> 1
(1, 1, 1) --> 1

... and so on 

如果您想要代数形式而不是真值表的输出,算法是相同的:

from __future__ import print_function
from itertools import product       # forms cartesian products
n = 3                               # number of variables

variables = 'abcdefghijklmnopqrstuvwxyz'[:n]
pairs = [('~'+var, var) for var in variables]
print('All possible algebraic expressions for n =', n)

inputs = list(product(*pairs))
for i, outputs in enumerate(product([0, 1], repeat=len(inputs))):
    terms = [''.join(row) for row, output in zip(inputs, outputs) if output]
    if not terms:
        terms = ['False']
    print('Function %d:' % i, ' or '.join(terms))

输出如下所示:

All possible algebraic expressions for n = 3
Function 0: False
Function 1: abc
Function 2: ab~c
Function 3: ab~c or abc
Function 4: a~bc
Function 5: a~bc or abc
Function 6: a~bc or ab~c
Function 7: a~bc or ab~c or abc
Function 8: a~b~c
Function 9: a~b~c or abc
Function 10: a~b~c or ab~c
Function 11: a~b~c or ab~c or abc
Function 12: a~b~c or a~bc
Function 13: a~b~c or a~bc or abc
Function 14: a~b~c or a~bc or ab~c
Function 15: a~b~c or a~bc or ab~c or abc
Function 16: ~abc
Function 17: ~abc or abc
Function 18: ~abc or ab~c
Function 19: ~abc or ab~c or abc
Function 20: ~abc or a~bc
Function 21: ~abc or a~bc or abc
Function 22: ~abc or a~bc or ab~c
Function 23: ~abc or a~bc or ab~c or abc
Function 24: ~abc or a~b~c
Function 25: ~abc or a~b~c or abc
Function 26: ~abc or a~b~c or ab~c
Function 27: ~abc or a~b~c or ab~c or abc
Function 28: ~abc or a~b~c or a~bc
Function 29: ~abc or a~b~c or a~bc or abc
Function 30: ~abc or a~b~c or a~bc or ab~c
Function 31: ~abc or a~b~c or a~bc or ab~c or abc
Function 32: ~ab~c
Function 33: ~ab~c or abc

... and so on 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成 n 个变量的所有可能布尔函数的算法 的相关文章

  • 更合适地说插入未排序动态数组的摊销 O(1) 与 O(n) ?

    这属于 stackoverflow com help on topic 中的 软件算法 在本例中 是一种将项目添加到动态未排序数组的软件算法 This is chart we made in class about the runtimes
  • Google 文档如何处理编辑冲突?

    我一直在尝试编写自己的 Javascript 编辑器 其功能类似于 Google Docs 允许多人同时使用 我不明白一件事 假设用户 A 和用户 B 直接相互连接 网络延迟为 10 毫秒 我假设编辑器使用 diff 系统 据我了解 Doc
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia
  • 面试题:三个数组,O(N*N)

    假设我们有three长度数组N其中包含任意数量的类型long 然后我们得到一个数字M 相同类型 我们的任务是选择三个数字A B and C每个数组中的一个 换句话说A should从第一个数组中选取 B从第二个开始和C从第三个 所以总和A
  • 用于查找最近邻居的空间划分算法如何工作?

    为了找到最近的邻居 空间分区 http en wikipedia org wiki Nearest neighbor search Space partitioning是算法之一 它是如何工作的 假设我有一组 2D 点 x 和 y 坐标 并
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • Java 中旅行商问题的暴力算法

    我正在学校的数学课上做一个项目 我选择做旅行商问题 这是我一直想进行更多研究的问题 但是 我的暴力求解算法遇到了问题 请前往底部更新查看最新版本代码 如果您知道旅行推销员问题是什么 请跳过本段 尽可能概括地说 TSP 是这样的 您是一名推销
  • Java 中查看 ArrayList 是否包含对象的最有效方法

    我有一个 Java 对象的 ArrayList 这些对象有四个字段 我用其中两个字段来将对象视为与另一个对象相等 我正在寻找最有效的方法 给定这两个字段 以查看数组是否包含该对象 问题在于这些类是基于 XSD 对象生成的 因此我无法修改类本
  • 添加边后更新最大流量

    考虑我们有一个网络流量 并使用 Edmond Karp 算法 我们已经拥有网络上的最大流量 现在 如果我们向网络添加任意边 具有一定容量 更新最大流量的最佳方法是什么 我正在考虑更新关于新边缘的残差网络 并再次寻找增强路径 直到找到新的最大
  • 有向未加权图中的最长非循环路径

    什么算法可用于找到未加权有向无环图中的最长路径 动态规划 http en wikipedia org wiki Dynamic programming 它也被引用于最长路径问题 http en wikipedia org wiki Long

随机推荐

  • 如何使用jquery按名称获取元素?

    如何使用 jquery 按名称获取 html 元素而不使用 id 或 class 有什么办法可以做到这一点吗 应该知道 给出的唯一正确答案是在属性值周围包含引号的答案 即 name value 强制要求在值周围包含引号 请参阅 http a
  • 将 PHP JSON 传递给 Javascript:echo json_encode 与 echo json 声明

    我正在尝试创建一个通用常量文件以在 php 和 javascript 之间共享 使用 JSON 来存储常量 但我想知道为什么使用 JSON 将 PHP 从 PHP 传递到 javascriptjson encode 过度回显 json 声明
  • Java 拉伸图标以适合按钮

    我正在尝试调整图标大小 使其覆盖整个按钮并位于按钮的中心 当我尝试时 它会拉长我的按钮并弄乱其他所有内容 我该怎么做 目前 我的代码是 在我的类构造函数中 javax swing JButton Console new javax swin
  • 根据列名称创建 DataFrame 的子集

    我有一个名为的 pandas DataFrametimedata具有不同的列名称 其中一些包含振动一词 一些包含偏心率 是否可以创建仅包含 振动 一词的列的数据框 我尝试过使用 vib for i in timedata if Vibrat
  • 在具有多个用户的 Visual Studio 中使用 MSDeploy/Web 部署作为发布方法

    是否可以从多个开发人员 PC 使用 Web 部署 当我们尝试这样做时 当其他人想要进行部署时 我们似乎需要重新发布所有内容 我们是否做错了什么 有没有办法解决这个问题 或者在我们的场景中推荐的方法是什么 我知道从中央位置部署是一个更好的解决
  • 如何使用 Azure.Storage.Blobs BlobClient 检索 Blob 目录路径中的 Blob?

    我没有在网上看到任何关于如何获取位于某个目录中的所有 blob 的示例BlobContainerClient 以前 我使用的是Microsoft Azure Storage包 但这些已被弃用 我扫描目录中所有 blob 的旧代码是 publ
  • 使用模型后如何清除GPU内存?

    我正在尝试在使用完模型后释放 GPU 内存 我检查了nvidia smi在创建和训练模型之前 402MiB 7973MiB 创建并训练模型后 我再次检查了 GPU 内存状态nvidia smi 7801MiB 7973MiB 现在我尝试使用
  • Google Storage 不是构造函数错误

    我正在构建一个应用程序 我的目标是每次有人将图像上传到 firebase 存储时 云函数都会调整该图像的大小 import as Storage from google cloud storage const gcs new Storage
  • 如何为整个项目启用 C# 8.0 的 Nullable Reference Types 功能

    根据C 8 公告视频可以为整个项目启用 可为空引用类型 功能 但如何为项目启用它呢 我在 Visual Studio 2019 Preview 1 的 项目属性 窗口中没有找到任何新的合适选项 是否可以启用 旧版 csproj项目如果C 语
  • JAX-WS IBM 客户端使用带有 Active Directory 身份验证 (NTLM) 的 .Net WS

    我想使用 IBM WebSphere 的 Net WS 我使用 JAX WS IBM 实现创建了一个 WS 客户端 它使用 IIS 上的 Net WS 客户端位于 SUSE 上 并且通过 NTLM 使用 Windows Server 200
  • 系统返回码()

    include
  • 系统/标准库头文件中存在哪些包含防护(如果有)?

    我想知道文件中是否存在 包含什么内容windows h math h iostream stdio etc 因为我在不同的文件中多次包含这些标头 这些文件是否已经内置了防护措施或者是否定义了定义 我只是想知道这种事情的标准是什么 C 标准要
  • powershell中破折号的问题

    我想在 xml 节点名称中使用破折号 但是当我尝试获取该节点时 它会显示一些有关意外标记的信息
  • 如何将 raw_input 重定向到 stderr 而不是 stdout?

    我想重定向stdout到一个文件 但这会影响raw input 我需要重定向输出raw input to stderr代替stdout 我怎样才能做到这一点 唯一的问题是raw input是它将提示打印到标准输出 与其尝试拦截它 为什么不自
  • 我应该使用 JSLint 还是 JSHint JavaScript 验证? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我目前正在根据 JSLint 验证我的 JavaScript 并取得进展 它帮助我编写更好的 JavaScript 特别是在使用 Jquery 库方面 我现在遇到了JSHint 一个叉子J
  • 自定义函数 SQLite 与 Mono

    有没有办法使用 Mono 添加 SQLite 自定义函数 Mono Data Sqlite 我尝试添加距离函数来返回两个地理位置之间的距离 SqliteFunctionAttribute Name distance Arguments 4
  • 詹金斯管道何时关闭拉取请求的条件

    我需要一些帮助来检测多分支管道中的 PR 事件 我在谷歌上搜索了很多 但我找不到任何东西 我一直在尝试触发一个已结束的公关活动的构建 这与触发合并到的分支不同 我有这些条件 运行良好 when branch master or when c
  • 同源策略如何应用于IP地址

    我公司内网上有一台运行 JBoss 的服务器 我想从我的机器 也在 Intranet 上 向此服务器发送 API 调用 并使用 JQuery 获取生成的 XML 响应 我阅读了有关的条目维基百科但我很困惑这如何适用于我的情况 因为我们的机器
  • ARKit – 变换矩阵中的不同列代表什么?

    An ARAnchor的 4x4 矩阵有 4 列 矩阵的第四列包含 3 个平移值x y and z坐标 我想知道其他 3 列代表什么 4x4 SIMD 矩阵 RealityKit ARKit SceneKit 和 ARCore 以及已弃用的
  • 生成 n 个变量的所有可能布尔函数的算法

    对于 n 个变量 存在 2 2 n 个不同的布尔函数 例如 如果n 2 则存在16个可能的布尔函数 它们可以写成乘积之和形式或和乘积形式 可能的函数数量随着 n 呈指数增长 我正在寻找一种算法 可以为 n 个变量生成所有这些可能的布尔规则