You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现布尔函数虚构变量(fictitious variable)识别算法

布尔函数虚构变量识别Python实现

虚构变量指的是不会影响布尔函数输出结果的变量,按照你给出的真值表对比规则,以下是可直接运行的实现:

纯Python实现(无第三方依赖)

完全匹配你给出的分段对比规则,同时保留了你原有代码的输入和真值表打印逻辑:

import itertools

def get_fictitious_vars(func: str, var_count: int) -> list:
    # 前置校验:1的个数为奇数时不可能存在虚构变量
    if sum(int(c) for c in func) % 2 != 0:
        return []
    fict_vars = []
    for i in range(var_count):
        # 每个对比分段的大小
        chunk_size = 2 ** (var_count - i - 1)
        is_fict = True
        # 遍历所有需要对比的块
        for block_idx in range(2 ** i):
            start = block_idx * 2 * chunk_size
            part0 = func[start : start + chunk_size]
            part1 = func[start + chunk_size : start + 2 * chunk_size]
            if part0 != part1:
                is_fict = False
                break
        if is_fict:
            fict_vars.append(f"x{i+1}")
    return fict_vars

if __name__ == "__main__":
    print("输入变量个数:")
    args = int(input())
    # 校验函数字符串长度
    while True:
        print("输入布尔函数串:")
        func = input().strip()
        if 2 ** args == len(func):
            break
        print(f"长度错误,需要长度为{2**args}的字符串")
    
    # 打印真值表
    print("\n真值表:")
    a = 0
    for i in itertools.product('01', repeat=args):
        print(f"{' '.join(i)}  |  {func[a]}")
        print('-----------')
        a += 1
    
    # 检测虚构变量
    res = get_fictitious_vars(func, args)
    if not res:
        print("不存在虚构变量")
    else:
        print(f"虚构变量为:{', '.join(res)}")

更简洁的实现方案

使用numpy可以大幅简化逻辑,直接通过维度对比判断是否为虚构变量,代码更易维护:

import itertools
import numpy as np

def get_fictitious_vars_numpy(func: str, var_count: int) -> list:
    arr = np.array(list(func), dtype=int)
    # 把一维函数串重塑为和变量维度对应的多维数组
    arr = arr.reshape([2]*var_count)
    fict_vars = []
    for idx in range(var_count):
        # 直接对比当前变量取0和1时的所有输出是否一致
        if np.array_equal(arr.take(0, axis=idx), arr.take(1, axis=idx)):
            fict_vars.append(f"x{idx+1}")
    return fict_vars

# 输入和打印逻辑和上面完全一致,只需要把检测函数换成上面的即可

测试用例验证

  1. 变量数2,函数串0110(异或函数):返回无虚构变量,符合预期
  2. 变量数3,函数串00001111(仅和x1相关):返回虚构变量x2、x3,符合预期
  3. 变量数3,函数串00110011(仅和x2相关):返回虚构变量x1、x3,符合预期

内容的提问来源于stack exchange,提问作者Назар Трухан

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:24:01