ホームページ >バックエンド開発 >PHPチュートリアル >PHP は正の整数を最も効率的に 1,000 回展開します
最高の効率で正の整数を 1,000 倍拡張するにはどうすればよいでしょうか?
この質問が人々の心に投げかけられたとき、9 年間の優れた義務教育を受けた私たちなら、少し考えた後、いたずらでありながらも達人のような答えを与えることができます。「ゼロを 3 つ追加するだけです。」 ~
しかし、この問題がコードで解決するためにプログラマに引き渡される場合、問題はプログラミングの観点から考慮されなければなりません。 phper
として、私が最初に考えた解決策は
解決策 1: 数字の末尾に文字列「000」を貼り付ける
オプション 2: 元の数値に 1000 を掛けるだけです。
この問題を友人に投げると、彼は次のように言いました:
オプション 1 絶対に違います!オプション 2 を使用する必要がありますが、鶏泥棒であれば、正の整数 X 1024 - 正の整数を使用する必要があります。1000 を取る場合、彼は
正の整数 X 512 正の整数 X 256 正の整数 X 128 を実行します。正の整数 X 128 の正の整数 X 64 の正の整数、最大 1000 回。演算
は、プラス記号の文字列よりも高速です。 [推奨学習:
PHP ビデオ チュートリアル
]
// 图表内容 $headers = ['次数', '方案1:拼接法', '方案2:乘1000', '方案3:乘以 1024']; $data = [ [0=>'第一次'], [0=>'第二次'], [0=>'第三次'] ]; // 每个方法执行三次 for ($count = 0; $count < 3; $count ++) { // 生成变量名 : plan1start1 $start = Carbon::now()->getPreciseTimestamp(); for ($i = 0; $i < 10000000; $i ++) { $integer = rand(1, 999); $result = (int)($integer . '000'); } $end = Carbon::now()->getPreciseTimestamp(); $data[$count][] = ($end - $start)/1000000 . '秒'; } for ($count = 0; $count < 3; $count ++) { $start = Carbon::now()->getPreciseTimestamp(); for ($i = 0; $i < 10000000; $i ++) { $integer = rand(1, 999); $result = $integer * 1000; } $end = Carbon::now()->getPreciseTimestamp(); $data[$count][] = ($end - $start)/1000000 . '秒'; } for ($count = 0; $count < 3; $count ++) { $start = Carbon::now()->getPreciseTimestamp(); for ($i = 0; $i < 10000000; $i ++) { $integer = rand(1, 999); $result = $integer * 1024 - $integer * 24; } $end = Carbon::now()->getPreciseTimestamp(); $data[$count][] = ($end - $start)/1000000 . '秒'; } $this->table($headers, $data);このコードを複数回実行すると、比較的安定した結果が得られます:
1024 を乗算してから減算して 24 を乗算するのは、
直接 1000 を乗算するよりも遅くなります。この結果を受けて、疑問を解決してくれる上司を探したところ、彼から次のような答えが得られました。 私は普段十分に仕事をしていないんですよね。そのような実験をする時間はまだありますか?
テスト結果の感想
正の整数の後に文字列「000」を連結するには、この正の整数を文字列に変換し、次に文字列「000」を連結して、正の整数に戻します。計算の複雑さは正の整数の直接計算をはるかに上回り、時間の点では明らかに後者に劣りますが、これは検証済みであり、疑いの余地はありません。
しかし、名前は明かしたくなかった私の Doudou クラスメートの 1 人が、
binary
インタープリター言語 php
を学んでいます。つまり、コードを深く理解しているプレイヤーのグループが、私には見えないところでphp で多くのアルゴリズムの最適化を行っているということです。そして、Doudou は
コンパイル言語 C を学習しています。この解釈される言語の違いが、この操作の異なる結果につながるのでしょうか?
以上がPHP は正の整数を最も効率的に 1,000 回展開しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。