【问题标题】:Can this set of conditionals be simplified further?这组条件可以进一步简化吗?
【发布时间】:2013-03-18 17:46:38
【问题描述】:

我从这组条件开始:

if (old.tg.all && old.hg.all) {
    // reject
} 

if (new.tg.all && new.hg.all) {
    // reject
}

if (old.hg.all && new.tg.all) {
    // reject
}

if (old.tg.all && new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

我设法将其减少到:

if (old.tg.all || new.tg.all) && (old.hg.all || new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

能否进一步减少逻辑运算和/或布尔条件的重复次数?

【问题讨论】:

  • 我认为这可能更适合 math.stackexchange.com。
  • 我建议尝试 Wolfram Alpha 看看它是否可以为你做这样的事情。
  • 您想最小化什么:是逻辑连接器的数量吗?逻辑运算的数量?表达式的长度?
  • 如果我发布了一组原始的 C 条件语句并询问是否有办法简化此代码,它会成为主题吗?
  • 查看编辑,问题现在更清楚地与编程相关

标签: c math logic


【解决方案1】:

关于逻辑表达式简化的原始问题

首先,“表达式简化”并不是一个定义明确的操作。

其次,a(或多或少)简化逻辑表达式的标准理解是Disjunctive normal form(或者,它的兄弟Conjunctive normal form)。两者都可能比您的原始表达式和简化的表达式更简单。

至少,它们最小化了表达式的深度

关于 C 代码的完全重写的问题

主要问题不是简单,而是清晰意图以及由此产生的可维护性。您不应该担心您编写的字符数或代码行数,而应该担心理解和修改代码逻辑的难度。只要代码清晰,一点冗余和/或额外(廉价)检查都不会造成伤害。

【讨论】:

  • 一些很好的观点,但我的问题是“可以进一步简化吗?”
  • @Awalias:定义“简化”。我想告诉你的是你问错了问题。您的问题被否决和关闭是有原因的。
  • 好的,我已经改写了这个问题,我认为我的意图可以从示例“简化”中看出。希望我的问题现在很清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多