Maison  >  Article  >  développement back-end  >  PHP développe le plus efficacement un entier positif mille fois

PHP développe le plus efficacement un entier positif mille fois

藏色散人
藏色散人avant
2021-04-19 16:52:032098parcourir

La formulation du plan

Comment développer un entier 1 000 fois le plus efficacement possible ?

Lorsque cette question est posée à l'esprit des gens, ceux d'entre nous qui ont suivi une excellente scolarité obligatoire de neuf ans peuvent donner une réponse coquine mais magistrale après une petite réflexion : ajoutez simplement trois zéros ~

.

Mais lorsque ce problème est confié aux programmeurs pour qu'ils le résolvent avec du code, le problème doit être considéré du point de vue de la programmation. Le premier plan auquel j'ai pensé comme

était phper

  • Plan 1 : Collez la chaîne "000" à la fin du numéro

  • Plan 2 : Multipliez simplement le nombre d'origine par 1000

Quand j'ai posé ce problème à mon ami, il m'a dit :

L'option 1 ne fonctionnera certainement pas ! Tu devrais adopter l'option 2, mais si tu es assez voleur, tu devrais adopter

!正整数 X 1024 - 正整数 X 24

Parce que l'ordinateur est binaire, quand tu lui dis de multiplier par 1000, il fera

, Gardez accumulant jusqu'à ce que vous atteigniez 1000 fois l'entier positif. L'opération 正整数 X 512 + 正整数 X 256 + 正整数 X 128 + 正整数 X 128 + 正整数 X 64 + 正整数 X 32 + 正整数 X 8 s'approche du résultat plus rapidement que cette chaîne de signes plus. 2的10次方

[Apprentissage recommandé :

Tutoriel vidéo PHP]

La pratique apporte de vraies connaissances

Les paroles du patron m'ont rapidement ému . Afin de mettre en pratique les véritables connaissances du grand frère et de prouver que l'explication du grand frère est comme une illumination pour moi, j'ai rapidement écrit une méthode courte, utilisant trois méthodes différentes pour développer un entier positif aléatoire de 1 000 fois. Exécutez 10 millions de fois. respectivement pour vérifier l'efficacité de chaque méthode (en utilisant le framework : 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);

Après avoir exécuté ce code plusieurs fois, un résultat relativement stable est obtenu :

PHP développe le plus efficacement un entier positif mille fois

En voyant ce résultat, de grandes questions ont de nouveau occupé mon petit esprit.

est en fait plus lent que 乘以 1024 再减去 乘以 24. Lorsque j'ai pris ce résultat pour trouver le patron pour résoudre mes doutes, j'ai obtenu cette réponse de sa part : 直接乘以 1000

N'est-ce pas suffisant que je travaille habituellement ? Est-il encore temps de réaliser une telle expérience ?

Réflexions sur les résultats du test

Je l'ai secrètement méprisé et j'ai dégradé son statut dans mon cœur de

à 大佬. J'ai continué à réfléchir à cette question. 我的某个不愿透露姓名的普通朋友

Pour concaténer la chaîne « 000 » après un entier positif, convertissez cet entier positif en chaîne, puis concaténez la chaîne « 000 », puis reconvertissez-la en un entier positif. La complexité du calcul dépasse de loin le calcul direct d'entiers positifs, et elle est évidemment inférieure à ce dernier en termes de temps. Cela s'est vérifié et cela ne fait aucun doute.

Mais un de mes camarades anonymes de Doudou a expliqué le

modèle de calcul de la même façon. Ce que j'apprends, c'est 二进制, ce qui signifie qu'un groupe de joueurs ayant une compréhension approfondie du code a réalisé de nombreuses optimisations d'algorithmes pour 解释型语言 php dans des endroits que je ne peux pas voir. Et Doudou étudie php. Est-ce la différence dans ce langage interprété qui conduit aux résultats différents de cette opération ? 编译型语言 C++                                                                                                                               

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer