ホームページ >バックエンド開発 >PHPチュートリアル >PHP は正の整数を最も効率的に 1,000 回展開します

PHP は正の整数を最も効率的に 1,000 回展開します

藏色散人
藏色散人転載
2021-04-19 16:52:032138ブラウズ

計画策定

最高の効率で正の整数を 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 回。演算

2 の 10 乗

は、プラス記号の文字列よりも高速です。 [推奨学習: PHP ビデオ チュートリアル ]

練習は真の知識をもたらします

私は、次の言葉にすぐに感動しました。上司がわかってくれた。兄貴の本当の知識を実践し、兄貴の説明が私にとって啓発のようなものであることを証明するために、ランダムな正の整数を 1000 倍に拡張する 3 つの異なる方法を使用して短いメソッドをすぐに書きました。それぞれのメソッドの効率を確認するために (フレームワーク: laravel を使用)
// 图表内容

$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 . &#39;000&#39;);

    }

    $end = Carbon::now()->getPreciseTimestamp();

    $data[$count][] = ($end - $start)/1000000 . &#39;秒&#39;;

}

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 . &#39;秒&#39;;

}

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 . &#39;秒&#39;;

}

$this->table($headers, $data);
このコードを複数回実行すると、比較的安定した結果が得られます:

この結果を見て、大きな疑問が私の小さな心を再び占めました。

1024 を乗算してから減算して 24PHP は正の整数を最も効率的に 1,000 回展開します を乗算するのは、

直接 1000

を乗算するよりも遅くなります。この結果を受けて、疑問を解決してくれる上司を探したところ、彼から次のような答えが得られました。 私は普段十分に仕事をしていないんですよね。そのような実験をする時間はまだありますか?

テスト結果の感想

私は密かに彼を軽蔑しており、ちなみに心の中で彼の地位を兄貴 ##から格下げしていました。 #匿名希望の私の共通の友人です

。私はこの問題について考え続けました。

正の整数の後に文字列「000」を連結するには、この正の整数を文字列に変換し、次に文字列「000」を連結して、正の整数に戻します。計算の複雑さは正の整数の直接計算をはるかに上回り、時間の点では明らかに後者に劣りますが、これは検証済みであり、疑いの余地はありません。 しかし、名前は明かしたくなかった私の Doudou クラスメートの 1 人が、binary

計算モデルについて同じように説明してくれました。私は

インタープリター言語 php

を学んでいます。つまり、コードを深く理解しているプレイヤーのグループが、私には見えないところで

php で多くのアルゴリズムの最適化を行っているということです。そして、Doudou は コンパイル言語 C を学習しています。この解釈される言語の違いが、この操作の異なる結果につながるのでしょうか?

以上がPHP は正の整数を最も効率的に 1,000 回展開しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。