📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019年1月10日)|问题11(1)

📅  最后修改于: 2023-12-03 15:28:46.360000             🧑  作者: Mango

Sudo GATE 2020 Mock II (2019年1月10日) 问题11

这道问题考查的是概率和逻辑运算的结合,需要设计一个统计方案来计算门的状态。

问题描述

有两个电路门 A 和 B,每个门都有两个输入 A1 和 A2,乘法输出乘积的一半,加法输出加和的一半。

门 A 的两个输入 A1 和 A2 都为正常工作的状态,门 B 的两个输入 B1 和 B2 都有 60% 的概率正常工作,40% 的概率无法工作。

问门 A 和门 B 乘起来的输出给出 an∗bn,那么这个乘积输出为正常工作状态的概率是?

解法

题目中需要先计算每个门的输出可能状态,再根据输出计算输出为正常工作的概率。因此,需要分别设计函数来计算两个门的输出状态,再设计另一函数计算输出为正常工作状态的概率。

首先,设计门 A 的输出状态函数:

def gate_A_output(a1, a2):
    return (a1 * a2) / 2 if a1 and a2 else 0

函数接受两个输入 a1 和 a2,如果两个输入都为真(即正常工作状态),则计算乘积并返回除以 2 的结果(求出乘法输出乘积的一半),否则返回 0。

接下来,设计门 B 的输出状态函数:

def gate_B_output(b1, b2):
    if not (b1 and b2):
        return 0
    elif b1 and b2:
        return (b1 + b2) / 2
    else:
        return b1 / 2 if b1 else b2 / 2

函数首先检查输入的有效性。如果有一个或两个输入在工作,则返回 0。如果两个输入都能正常工作,则计算加和并返回结果的一半。否则返回能正常工作的输入值除以 2 的结果。

最后,设计计算输出为正常工作状态概率的函数:

def normal_output_prob(a1, a2, b1, b2):
    normal_a = 1 if a1 and a2 else 0
    normal_b = 0.6 if b1 and b2 else 0.0
    if not b1 or not b2:
        normal_b = 0.4 if b1 or b2 else 0.0
    return normal_a * normal_b

函数首先检查门 A 的两个输入是否都能正常工作,如果是,则记录门 A 输出为正常状态的概率为 1,否则为 0。

对于门 B,计算两个输入都能正常工作的概率并记录在变量 normal_b 中。如果两个输入都无法正常工作,则 normal_b 值为 0。如果有一输入能正常工作,则 normal_b 值为 0.4。如果两个输入都能正常工作,则 normal_b 值为 0.6。

最后,将两个门的输出是否都为正常状态的概率相乘,得到输出为正常工作状态的概率。

完整代码如下:

def gate_A_output(a1, a2):
    return (a1 * a2) / 2 if a1 and a2 else 0

def gate_B_output(b1, b2):
    if not (b1 and b2):
        return 0
    elif b1 and b2:
        return (b1 + b2) / 2
    else:
        return b1 / 2 if b1 else b2 / 2
        
def normal_output_prob(a1, a2, b1, b2):
    normal_a = 1 if a1 and a2 else 0
    normal_b = 0.6 if b1 and b2 else 0.0
    if not b1 or not b2:
        normal_b = 0.4 if b1 or b2 else 0.0
    return normal_a * normal_b

# 测试
print(normal_output_prob(True, True, True, True)) # 0.6

要注意的是,在计算输出为正常工作状态的概率时,只考虑两个输入分别是正常工作状态还是无法工作状态。这个概率并不受到输入不同的影响,因为输出状态是由输入状态直接算出来的,如果一个输入无法工作,则输出必定为无法工作状态。因此,不需要统计所有输入状态可能的组合。