Euler Project 14 - PHP中最长的Collat​​z序列

时间:2015-12-13 21:35:25

标签: php performance

这是我对 Euler Project Problem 14

的解决方案
<?php
$count = 0 ;
$max = 0;

for($n = 2 ; $n < 1000000 ; $n++){
        while ($n > 1)
        {
            if ($n % 2 == 0 )
            {
                $n = $n/2;

            }
            else
            {
                $n = 3*$n + 1 ;

            }               
            $count += 1;

           if($count > $max )
           {
                $max = $count;
                $final = $n;    
           }
        }
     }
     echo $final;
>?

运行花了这么长时间。我看了一些其他解决方案,它们在逻辑上与我的代码非常相似,但它们的运行速度比我的速度快得多。 我的问题是,是什么让我的代码效率低下?我在这里缺少什么?

谢谢^^

1 个答案:

答案 0 :(得分:0)

你的方法是直截了当的。

您可以使用动态编程来改进运行时(复杂性方法)。

我们假设您想要计算5.您将拥有: 5 - &gt; 16 - &gt; 8 - &gt; 4 - &gt; 2 - &gt; 1。 但是,如果你这样做,你也将计算8和16的值。 我们的想法是存储您已经计算过的值,以便在以后需要时保存工作。

处理算法的复杂性将是一些问题的关键,所以最好早点适应它。

它很慢的另一个原因是语言的选择。例如,尝试使用C,它会运行得更快。