代码之家  ›  专栏  ›  技术社区  ›  Haim Evgi

循环码优化

  •  3
  • Haim Evgi  · 技术社区  · 14 年前

    如何优化以下代码,

    我需要像这样运行3组循环:

    for($i=1;$i<=$count-1;$i++){    
      for($j=$i+1;$j<=$count;$j++){
      // do some query use $i and $j
    
      }
    }
    for($i=1;$i<=$count-2;$i++){
       for($j=$i+1;$j<=$count-1;$j++){   
         for($k=$j+1;$k<=$count;$k++){
           // do some query use $i and $j and $k
         }
      }
    }
    for($i=1;$i<=$count-3;$i++){
       for($j=$i+1;$j<=$count-2;$j++){   
          for($k=$j+1;$k<=$count-1;$k++){
         for($l=$k+1;$l<=$count;$l++){ 
           // do some query use $i and $j and $k and $l
           }
         }
      }
    }
    

    有没有办法简化代码,或者把循环连接在一起?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Mark Baker    14 年前

    微观优化: 使用

    ++$i
    

    而不是

    $i++
    

    等价于$j++、$k++和$l++

    但是您在这些循环中做什么:完全有可能您的do some查询(数据库?)被更改为完全删除循环。。。这比任何微观优化都要有效得多

        2
  •  2
  •   strager    14 年前

    应该这样做(未经测试):

    for($i = 1; $i <= $count - 3; $i++) {
        for($j = $i + 1; $j <= $count; $j++) {
            // i,j query
    
            if($j > $count - 2) {
                continue;
            }
    
            for($k = $j + 1; $k <= $count; $k++) {
                // i,j,k query
    
                if($k > $count - 1) {
                    continue;
                }
    
                for($l = $k + 1; $l <= $count; $l++) {
                    // i,j,k,l query
                }
            }
        }
    }
    

    请注意,查询不再按其原始顺序进行。

    如前所述,如果不知道正在运行的查询,就无法进一步优化它。

        3
  •  1
  •   Ignacio Vazquez-Abrams    14 年前

    i === 1 j === 2