


Comment trouver la médiane d'un très grand tableau en php
En PHP, nous devons parfois traiter un très grand tableau, comme trouver la médiane. Mais pour les très grandes baies, l’utilisation des méthodes de tri traditionnelles prendra beaucoup de temps et de mémoire. Alors, existe-t-il un moyen plus efficace de trouver la médiane d’un très grand tableau ? Cet article présentera une méthode de solution efficace basée sur l'algorithme de sélection rapide.
- Introduction à l'algorithme de sélection rapide
L'algorithme de sélection rapide est un algorithme amélioré basé sur l'algorithme de tri rapide. Son idée principale est de trouver le kième plus petit élément dans un tableau non ordonné par division rapide. Sa complexité temporelle est O(n), ce qui est plus efficace que la complexité temporelle de l'algorithme de tri conventionnel O(n log n).
Les étapes de base de l'algorithme de sélection rapide sont les suivantes :
- Sélectionnez un élément pivot (généralement le premier élément du tableau)
- Divisez les éléments du tableau en deux parties plus petites que le pivot et plus grandes que ; le pivot ;
- Si si le nombre d'éléments inférieurs au pivot est inférieur à k, continuez à rechercher le k-ème élément parmi les éléments plus grands que le pivot
- Si le nombre d'éléments inférieurs au pivot est supérieur ou égal à ; k, continuez à rechercher le k-ème élément parmi les éléments plus petits que l'élément pivot ;
- Répétez les étapes ci-dessus jusqu'à ce que le k-ème élément soit trouvé.
- Trouver la médiane d'un très grand tableau
Nous voyons maintenant comment utiliser l'algorithme de sélection rapide pour trouver la médiane d'un très grand tableau. Supposons que nous ayons un très grand tableau $nums$ et que nous devions trouver sa médiane. Nous effectuons d'abord une division rapide sur $nums$, divisant les éléments en deux parties plus petites que le pivot et plus grandes que le pivot. Si le pivot est exactement au milieu du tableau, alors c'est la médiane. Sinon, en fonction de la localisation du pivot, on peut juger que la recherche doit se poursuivre du côté où se trouve le pivot.
Voici les étapes détaillées de l'algorithme :
- Tout d'abord, nous devons déterminer la position du milieu médian. Si le nombre d'éléments $n$ dans le tableau est un nombre impair, la médiane est $nums[(n-1)/2]$ si le nombre d'éléments $n$ est un nombre pair, la médiane est $( ; nombres[n /2-1]+numéros[n/2])/2$.
- Divisez rapidement le tableau $nums$ et enregistrez la position du pivot $pos$.
- En fonction de la relation de position entre pos et mid, déterminez si la médiane est du côté gauche ou droit du pivot. Si $pos< mid$, alors la médiane est entre les positions $[pos+1,n-1]$ si $pos>=mid$, alors la médiane est entre les positions $[0,pos-1]$ ;
- Répétez les étapes 2 et 3 jusqu'à ce que vous trouviez la médiane.
Ce qui suit est l'implémentation du code PHP correspondant :
function quickSelect($nums, $k) { $n = count($nums); $left = 0; $right = $n - 1; $mid = ($n - 1) / 2; while (true) { $pos = partition($nums, $left, $right); if ($pos == $mid) { if ($n % 2 == 0) { // 偶数个元素 return ($nums[$pos] + $nums[$pos + 1]) / 2; } else { // 奇数个元素 return $nums[$pos]; } } elseif ($pos < $mid) { $left = $pos + 1; } else { $right = $pos - 1; } } } function partition(&$nums, $left, $right) { $pivot = $nums[$left]; $i = $left; $j = $right; while ($i < $j) { while ($i < $j && $nums[$j] >= $pivot) { $j--; } while ($i < $j && $nums[$i] <= $pivot) { $i++; } if ($i < $j) { $temp = $nums[$i]; $nums[$i] = $nums[$j]; $nums[$j] = $temp; } } // 将pivot元素放到正确的位置 $nums[$left] = $nums[$i]; $nums[$i] = $pivot; return $i; } // 测试示例 $nums = array(1, 2, 3, 4, 5, 6, 7, 8, 9); echo quickSelect($nums, 5); // 输出5(因为5在数组中的中间位置)
- Résumé
Pour les très grands tableaux, l'utilisation de méthodes de tri traditionnelles apportera une complexité temporelle et spatiale très élevée. En utilisant l'algorithme de sélection rapide pour trouver le kième plus petit élément, nous pouvons terminer l'opération dans un délai de complexité temporelle O(n), obtenant ainsi une solution efficace à la médiane d'un très grand tableau. Il convient de noter qu'en utilisation réelle, nous devons également effectuer une optimisation appropriée en fonction de différents besoins, comme l'élagage, etc.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La compilation JIT de PHP 8 améliore les performances en compilant le code fréquemment exécuté en code machine, bénéficiant aux applications avec des calculs lourds et en réduisant les temps d'exécution.

L'article traite de la sécurisation des téléchargements de fichiers PHP pour éviter les vulnérabilités comme l'injection de code. Il se concentre sur la validation du type de fichier, le stockage sécurisé et la gestion des erreurs pour améliorer la sécurité de l'application.

L'article traite des 10 meilleures vulnérabilités de l'OWASP dans les stratégies PHP et d'atténuation. Les problèmes clés incluent l'injection, l'authentification brisée et les XS, avec des outils recommandés pour surveiller et sécuriser les applications PHP.

L'article examine la mise en œuvre d'authentification et d'autorisation robustes dans PHP pour empêcher un accès non autorisé, détaillant les meilleures pratiques et recommandant des outils d'amélioration de la sécurité.

L'article traite du cryptage symétrique et asymétrique en PHP, en comparant leur aptitude, leurs performances et leurs différences de sécurité. Le chiffrement symétrique est plus rapide et adapté aux données en vrac, tandis que l'asymétrique est utilisé pour l'échange de clés sécurisé.

L'article discute de la récupération des données des bases de données à l'aide de PHP, couvrant les étapes, les mesures de sécurité, les techniques d'optimisation et les erreurs communes avec des solutions. COMMANDE CHAPITRE: 159

L'article traite des stratégies de mise en œuvre de la limitation du taux d'API en PHP, y compris des algorithmes comme un godet de jeton et un seau qui fuit, et en utilisant des bibliothèques comme Symfony / Rate-Limiter. Il couvre également la surveillance, l'ajustement dynamiquement des limites de taux et la main

L'article traite des stratégies pour prévenir les attaques du CSRF dans PHP, notamment en utilisant des jetons CSRF, des cookies de même site et une bonne gestion de session.
