代码之家  ›  专栏  ›  技术社区  ›  hhh

合取不等式的最小运算次数?

  •  0
  • hhh  · 技术社区  · 16 年前

    for ( int t=0, size=fo.getPrintViewsPerFile().size();
              t<size && t<countPerFile;
              t++)
    {
        // ...
    }
    

    ,更准确地说:

    t<s && t<c
    

    您需要比较两次,然后从中计算布尔值。有没有更简单的方法?如果没有,你怎么证明?我可以简化一下, proof tree.

    [已添加]

    我试图通过逻辑直接解决这个问题。很有意思的是,在选择极小值时,我们可以看到它的含义。链接:

    http://www.umsu.de/logik/trees/?f=

    3 回复  |  直到 16 年前
        1
  •  1
  •   polygenelubricants    16 年前

    你能做到的 t < Math.min(s, c)

    我确实认为 Math.min Math.max 不过,这使得代码更具可读性。不幸的是,它们只有2个参数的重载(例如 int , long , float 和 double

    您总是可以为这类事情编写实用程序方法(间隔检查是一种常见的习惯用法) (minV <= v) && (v <= maxV) 等等),但是 ,没有一个Java没有任何花哨的操作符来做这些事情。它们只有基本的数值比较运算符( JLS 15.20.1 )和基本布尔运算符( JLS 15.22.2 15.23 , 15.24 ).


    旁注

    Icon 做 允许以下类型的构造:

    Java                      Icon
    (x < v1) || (x < v2)      x < (v1 | v2)
    (a < b) && (b < c)        a < b < c
    
        2
  •  3
  •   interjay    16 年前

    如果 size 和 countPerFile 如果循环的持续时间不变,可以在循环之前预先计算出它们的最小值,然后进行测试 t<minimum

    int size=fo.getPrintViewsPerFile().size();
    int minLimit = Math.min(size, countPerFile);
    for (int t=0; t<minLimit; t++) {
        ....
    
        3
  •  1
  •   user207421    16 年前

    算了吧。如果你正在处理打印或文件,这种微优化几乎不会为你节省什么。

    推荐文章