gpt4 book ai didi

c# - 如何将 Quine–McCluskey 算法与复合规范模式相结合

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:45 24 4
gpt4 key购买 nike

我想合并 Quine–McCluskey AlgorithmComposite Specification Pattern .

首先,让我们考虑一下基础知识,即 C# 中的规范模式:

public interface ISpecification
{
bool IsSatisfiedBy(object candidate);
ISpecification And(ISpecification other);
ISpecification Or(ISpecification other);
ISpecification Not();
}

public abstract class CompositeSpecification : ISpecification
{
public abstract bool IsSatisfiedBy(object candidate);

public ISpecification And(ISpecification other)
{
return new AndSpecification(this, other);
}

public ISpecification Or(ISpecification other)
{
return new OrSpecification(this, other);
}

public ISpecification Not()
{
return new NotSpecification(this);
}
}

public class AndSpecification : CompositeSpecification
{
private ISpecification One;
private ISpecification Other;

public AndSpecification(ISpecification x, ISpecification y)
{
One = x;
Other = y;
}

public override bool IsSatisfiedBy(object candidate)
{
return One.IsSatisfiedBy(candidate) && Other.IsSatisfiedBy(candidate);
}
}

public class OrSpecification : CompositeSpecification
{
private ISpecification One;
private ISpecification Other;

public OrSpecification(ISpecification x, ISpecification y)
{
One = x;
Other = y;
}

public override bool IsSatisfiedBy(object candidate)
{
return One.IsSatisfiedBy(candidate) || Other.IsSatisfiedBy(candidate);
}
}

public class NotSpecification : CompositeSpecification
{
private ISpecification Wrapped;

public NotSpecification(ISpecification x)
{
Wrapped = x;
}

public override bool IsSatisfiedBy(object candidate)
{
return !Wrapped.IsSatisfiedBy(candidate);
}
}

现在假设我有一个 MacroSpecification 和一些 MicroSpecifications:

public class MacroSpecification : CompositeSpecification
{
MicroSpecification1 Spec1 = new MicroSpecification1();
MicroSpecification2 Spec2 = new MicroSpecification2();
MicroSpecification3 Spec3 = new MicroSpecification3();
MicroSpecification4 Spec4 = new MicroSpecification4();
public override bool IsSatisfiedBy (object candidate)
{
if (candidate is int)
{
return Spec1.And(Spec2).And(Spec3).And(Spec4).IsSatisfiedBy(candidate);
}
}
}

public class MicroSpecification1 : CompositeSpecification
{
public override bool IsSatisfiedBy (object candidate)
{
if (candidate is int)
{
return (candidate > 100);
}
return false;
}
}

public class MicroSpecification2 : CompositeSpecification
{
public override bool IsSatisfiedBy (object candidate)
{
if (candidate is int)
{
return (candidate > 300);
}
return false;
}
}

public class MicroSpecification3 : CompositeSpecification
{
public override bool IsSatisfiedBy (object candidate)
{
if (candidate is int)
{
return (candidate < 1000000);
}
return false;
}
}

public class MicroSpecification4 : CompositeSpecification
{
public override bool IsSatisfiedBy (object candidate)
{
if (candidate is int)
{
return (candidate < 500000);
}
return false;
}
}

对于简化的等效 MacroSpecification IsSatisfiedBy 方法,我真的只需要 MicroSpecification4 和 MicroSpecification2。

所以我的问题是,有没有一种方法可以使用 Quine-McCluskey 将宏规范 IsSatisfiedBy 语句从四个规范简化为两个规范(或等效的东西)?

如果必须为复合规范模式(并且不失一般性)模式设计提供某种“智能”,那就太好了。

最佳答案

您不能使用 Quine-McCluskey 进行简化,因为您正在寻找的简化要求已知 MicroSpecification2 => MicroSpecification1MicroSpecification4 => MicroSpecification3 。 Q-M只适用于简化独立 bool 变量的方程。

您可以根据 candidate 的最后 20 位重写您的规范,然后使用 Q-M 来简化 22 个 bool 变量中产生的困惑方程: 的低 20 位>候选人;如果设置了 candidate 中的任何剩余位,则为 true 的单个 bool 值;如果 candidateint,则为 true 的单个 bool 值。由此产生的简化将适用于芯片设计,但可能不适用于任何其他目的。对不起。

关于c# - 如何将 Quine–McCluskey 算法与复合规范模式相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com