编写此程序的更好方法,以便它消耗最少的时间来执行

Posted

技术标签:

【中文标题】编写此程序的更好方法,以便它消耗最少的时间来执行【英文标题】:better way to write this program so that it consumes minimum time to execute 【发布时间】:2017-04-09 07:31:42 【问题描述】:

我希望以更少的执行时间获得相同的结果。有没有更好的方法来编写代码,以便我可以用最少的执行时间获得相同的结果。

<?php
     $input1 = 5;
     $input2 = 1;
     $input3 = [9, 5, 10];

    $numberOfWalls = count($input3);
    $numberOfJumps = 0;

    for($i=0; $i<$numberOfWalls; $i++)
        if($input1 >= $input3[$i])
            $numberOfJumps += 1;
        else 
            $tot = 0;
            while(1)
                if($tot + $input1 < $input3[$i])
                    $tot = $tot + ($input1 - $input2);
                    $numberOfJumps += 1;
                else
                    $tot = $tot + $input1;
                    $numberOfJumps += 1;
                    break;
                
            
        
    
    echo $numberOfJumps;

【问题讨论】:

如果我们要重写你的代码,我们至少要知道它的目的是什么。输入和输出应该是什么,它做什么,以及为什么。很高兴知道为什么现在需要很长时间,以及您正在寻求什么样的时间减少。大多数时候,最好的建议是:购买速度更快的计算机。 这个程序是在一次编码竞赛中给出的。在这个 $input3 中是一个包含墙壁高度的数组。 Input1 是猴子可以跳的高度, input2 是他无法穿过墙时滑倒的高度。我写了这个程序,我的得分是 100/100,但执行时间是 0.94 秒,最好的结果是 0.14 秒。我很好奇如何以最短的执行时间编写这个程序。 显然最好的方法不是循环,而是用数学方法解决这个小难题。一次跳跃是$input1 - $input2 高,因此您可以计算需要多少次跳跃才能穿过墙壁。 PS:我不会给你100/100的分数。你我找到解决方案的方式同样重要。 【参考方案1】:

这个怎么样:

// input
$forwards  = 5;
$backwards = 1;
$walls     = [9, 5, 10];
// computation
$oneJump   = $forwards-$backwards;
$jumps     = 0;
foreach ($walls as $wall) $jumps += ceil(($wall-$backwards)/$oneJump);
// output
echo "Jumps needed = $jumps";

【讨论】:

以上是关于编写此程序的更好方法,以便它消耗最少的时间来执行的主要内容,如果未能解决你的问题,请参考以下文章

我的编译器应该针对哪些后端语言?

有没有比计时更好的方法来对 C 程序进行基准测试?

启动Java应用程序一次并休眠还是重复启动和杀死更好?

出于好奇 - 是不是有更好的执行方法来替换此字符串?

在 VIEW 中编写此特定 SELECT 查询的更好方法

怎么查看GC 及jvm配置