正直なPHPおよびPython速度テスト

こんにちは

コードの品質と速度がプログラマーに依存していることは誰もが知っています。 優れたプログラマーは、PLの長所と短所を巧みに使用できます。

前回、 PHPはその強みを示しました-数字は数字です。 Pythonでは、数値はオブジェクトです。

そのため、客観的なテストを行うには、数学オブジェクトも考慮するためにPHPが必要です。



テスト方法

複素数は優れた数学オブジェクトです。PHPおよびPythonでは、複素数はオブジェクトで表されます。 基礎として、素数の素朴な検索と、 Thomas Vander Sticheleによって記述されコードでテストを行いました。整数の代わりに複素数の実数のみが使用されます。 主なことは、オブジェクトが2つの言語で使用されるという条件が満たされていることです。



テストの客観性を観察するために、コードを互いに最も類似するようにしようとしました。 したがって、私はPythonについて知っているさまざまなトリッキーな最適化を使用しませんでしたし、PHPについても知りません。 Pythonには複素数の組み込みクラスがありますが、テストの客観性のために、複素数のクラスはPHPバージョンと同様に最小限の機能で記述されています。



結果のコードは次のとおりです。



Php
#!/usr/bin/env php <?php class Complex { public $real = 0; private $imag = 0; public function __construct($real, $imag = null) { $this->real = (float)$real; } public function __toString() { return sprintf("(%d+%dj)", $this->real, $this->imag); } } $start = microtime(TRUE); $primeNumbers = array(); $output = ''; for ($i = 2; $i < 100000; $i++) { $divisible = false; $in = new Complex($i); foreach($primeNumbers as $number) { if ($in->real % $number->real == 0) { $divisible = true; break; } } if ($divisible == false){ $primeNumbers[] = $in; $output .= $in; } } echo "time: ", microtime(TRUE) - $start, "\n"; echo count($primeNumbers), " ", strlen($output), "\n"; ?>
      
      







Python
 #!/usr/bin/env python import time class Complex(object): def __init__(self, real, imag=None): self.real = real self.imag = 0 def __str__(self): return "({0}+{1}j)".format(self.real, self.imag) start = time.time() primeNumbers = [] output = "" for i in xrange(2, 100000): divisible = False inum = Complex(i) for number in primeNumbers: if inum.real % number.real == 0: divisible = True break if divisible == False: primeNumbers.append(inum) output += str(inum) print 'time: %f' % (time.time() - start) print len(primeNumbers), len(output)
      
      







テスト中

私のテスト環境では、Celeron 1.2GHzプロセッサー上のVMWare Player 3で実行されているUbuntu 10.04が判明しました。

おわりに

簡単な数学計算が必要な場合は、PHPを使用してください。

客観的なテストでは、Pythonは高速です。



Thomas Vander Sticheleは、 エラトステネスのふるいを使用すると、素数検索を何度も加速できることにも注目しました。



PS:コードが同等ではない場所を指定してくれれば、トリッキーな最適化なしで感謝します。



python-django-spbグループの皆さん、こんにちは。参加してください。



All Articles