Maison développement back-end tutoriel php Quels sont les principes et scénarios d'application de l'algorithme du tas minimum en PHP ?

Quels sont les principes et scénarios d'application de l'algorithme du tas minimum en PHP ?

Sep 19, 2023 pm 12:53 PM
应用场景 原理 algorithme de tas min

Quels sont les principes et scénarios dapplication de lalgorithme du tas minimum en PHP ?

Quels sont les principes et scénarios d'application de l'algorithme du tas minimum en PHP ?

Min Heap est une structure arborescente binaire spéciale dans laquelle la valeur de chaque nœud est inférieure ou égale à la valeur de ses nœuds enfants. Son principe principal est de maintenir un ordre spécifique afin que le nœud racine du tas soit toujours le plus petit. Les tableaux peuvent être utilisés en PHP pour implémenter min-heap.

Le principe du min-heap est de conserver ses caractéristiques à travers deux opérations de base : l'insertion et la suppression. L'opération d'insertion ajoute un nouvel élément au tas et l'ajuste en conséquence en fonction de la taille de sa valeur, garantissant ainsi que les caractéristiques du tas ne sont pas détruites. L'opération de suppression supprime le plus petit élément du tas et redimensionne le tas afin qu'il réponde toujours aux caractéristiques d'un tas min.

Ce qui suit est un exemple de code qui montre comment utiliser PHP pour implémenter l'algorithme du tas minimum :

class MinHeap {
    protected $heap;
    protected $size;
    
    public function __construct() {
        $this->heap = [];
        $this->size = 0;
    }
    
    public function insert($value) {
        $this->heap[$this->size] = $value;
        $this->size++;
        
        $this->heapifyUp($this->size - 1);
    }
    
    public function removeMin() {
        if ($this->isEmpty()) {
            return null;
        }
        
        $min = $this->heap[0];
        
        // 将最后一个元素移到根节点位置
        $this->heap[0] = $this->heap[$this->size - 1];
        
        $this->size--;
        
        // 调整堆,保持最小堆的特性
        $this->heapifyDown(0);
        
        return $min;
    }
    
    public function isEmpty() {
        return $this->size === 0;
    }
    
    protected function getParentIndex($index) {
        return ($index - 1) / 2;
    }
    
    protected function getLeftChildIndex($index) {
        return 2 * $index + 1;
    }
    
    protected function getRightChildIndex($index) {
        return 2 * $index + 2;
    }
    
    protected function heapifyUp($index) {
        $parentIndex = $this->getParentIndex($index);
        
        while ($index > 0 && $this->heap[$parentIndex] > $this->heap[$index]) {
            // 交换节点位置
            list($this->heap[$parentIndex], $this->heap[$index]) = [$this->heap[$index], $this->heap[$parentIndex]];
            
            $index = $parentIndex;
            $parentIndex = $this->getParentIndex($index);
        }
    }
    
    protected function heapifyDown($index) {
        $leftChildIndex = $this->getLeftChildIndex($index);
        $rightChildIndex = $this->getRightChildIndex($index);
        
        $minIndex = $index;
        
        if ($leftChildIndex < $this->size && $this->heap[$leftChildIndex] < $this->heap[$minIndex]) {
            $minIndex = $leftChildIndex;
        }
        
        if ($rightChildIndex < $this->size && $this->heap[$rightChildIndex] < $this->heap[$minIndex]) {
            $minIndex = $rightChildIndex;
        }
        
        if ($minIndex !== $index) {
            // 交换节点位置
            list($this->heap[$minIndex], $this->heap[$index]) = [$this->heap[$index], $this->heap[$minIndex]];
            
            $this->heapifyDown($minIndex);
        }
    }
}

// 使用最小堆进行排序
function heapSort($arr) {
    $heap = new MinHeap();
    foreach ($arr as $value) {
        $heap->insert($value);
    }
    
    $sorted = [];
    while (!$heap->isEmpty()) {
        $sorted[] = $heap->removeMin();
    }
    
    return $sorted;
}

// 测试用例
$arr = [5, 2, 9, 1, 7];
$sorted = heapSort($arr);
echo implode(', ', $sorted); // 输出:1, 2, 5, 7, 9
Copier après la connexion

L'algorithme du tas minimum a de nombreux scénarios d'application, dont le plus courant est la file d'attente prioritaire. Une file d'attente prioritaire est une file d'attente spéciale qui peut déterminer l'ordre dans lequel les éléments sont retirés de la file d'attente en fonction de leur priorité. Le tas minimum peut facilement implémenter des files d'attente prioritaires, et la complexité temporelle des opérations d'insertion et de suppression est O(log n), ce qui est très efficace.

En plus de la file d'attente prioritaire, min-heap peut également être appliqué aux scénarios suivants :

  1. Recherche du plus petit ou du plus grand élément dans un ensemble
  2. Algorithme d'arbre couvrant minimum (tel que l'algorithme de Prim) ; tri (comme l'exemple de code ci-dessus) ;
  3. Huffman Coding, etc.
  4. En résumé, l'algorithme du tas minimum en PHP est une structure de données couramment utilisée qui peut jouer un rôle énorme dans la résolution de nombreux problèmes. Qu'il s'agisse d'effectuer des opérations de file d'attente prioritaires, de rechercher des éléments minimum/maximum ou d'être utilisés dans d'autres algorithmes, les min-heaps peuvent fournir des solutions efficaces. En comprenant les principes et l'implémentation du code du min-heap, cet algorithme peut être mieux appliqué et optimisé.

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Analyse de la fonction et du principe de nohup Analyse de la fonction et du principe de nohup Mar 25, 2024 pm 03:24 PM

Analyse du rôle et du principe de nohup Dans les systèmes d'exploitation Unix et de type Unix, nohup est une commande couramment utilisée pour exécuter des commandes en arrière-plan. Même si l'utilisateur quitte la session en cours ou ferme la fenêtre du terminal, la commande peut. continuent toujours à être exécutés. Dans cet article, nous analyserons en détail la fonction et le principe de la commande nohup. 1. Le rôle de nohup : Exécuter des commandes en arrière-plan : Grâce à la commande nohup, nous pouvons laisser les commandes de longue durée continuer à s'exécuter en arrière-plan sans être affectées par la sortie de l'utilisateur de la session du terminal. Cela doit être exécuté

Discussion approfondie sur les principes et les pratiques du cadre Struts Discussion approfondie sur les principes et les pratiques du cadre Struts Feb 18, 2024 pm 06:10 PM

Analyse des principes et exploration pratique du framework Struts. En tant que framework MVC couramment utilisé dans le développement JavaWeb, le framework Struts a de bons modèles de conception et une bonne évolutivité et est largement utilisé dans le développement d'applications au niveau de l'entreprise. Cet article analysera les principes du framework Struts et l'explorera avec des exemples de code réels pour aider les lecteurs à mieux comprendre et appliquer le framework. 1. Analyse des principes du framework Struts 1. Architecture MVC Le framework Struts est basé sur MVC (Model-View-Con

Explication détaillée des scénarios d'utilisation et des fonctions du mot clé volatile en Java Explication détaillée des scénarios d'utilisation et des fonctions du mot clé volatile en Java Jan 30, 2024 am 10:01 AM

Explication détaillée du rôle et des scénarios d'application du mot-clé volatile en Java 1. Le rôle du mot-clé volatile En Java, le mot-clé volatile est utilisé pour identifier une variable visible entre plusieurs threads, c'est-à-dire pour assurer la visibilité. Plus précisément, lorsqu'une variable est déclarée volatile, toute modification apportée à la variable est immédiatement connue des autres threads. 2. Scénarios d'application de l'indicateur d'état de mot clé volatile Le mot clé volatile convient à certains scénarios d'indicateur d'état, tels qu'un

La différence entre Oracle et SQL et analyse des scénarios d'application La différence entre Oracle et SQL et analyse des scénarios d'application Mar 08, 2024 pm 09:39 PM

La différence entre Oracle et SQL et analyse de scénarios d'application Dans le domaine des bases de données, Oracle et SQL sont deux termes fréquemment mentionnés. Oracle est un système de gestion de bases de données relationnelles (SGBDR) et SQL (StructuredQueryLanguage) est un langage standardisé pour la gestion de bases de données relationnelles. Bien qu’ils soient quelque peu liés, il existe également des différences significatives. Tout d'abord, par définition, Oracle est un système de gestion de base de données spécifique, composé de

Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Compréhension approfondie du principe d'implémentation de l'insertion par lots dans MyBatis Feb 21, 2024 pm 04:42 PM

MyBatis est un framework de couche de persistance Java populaire qui est largement utilisé dans divers projets Java. Parmi elles, l'insertion par lots est une opération courante qui peut améliorer efficacement les performances des opérations de base de données. Cet article explorera en profondeur le principe de mise en œuvre de l'insertion par lots dans MyBatis et l'analysera en détail avec des exemples de code spécifiques. Insertion par lots dans MyBatis Dans MyBatis, les opérations d'insertion par lots sont généralement implémentées à l'aide de SQL dynamique. En construisant un S contenant plusieurs valeurs insérées

Quels sont les scénarios d'application du modèle d'usine dans le framework Java ? Quels sont les scénarios d'application du modèle d'usine dans le framework Java ? Jun 01, 2024 pm 04:06 PM

Le modèle d'usine est utilisé pour découpler le processus de création d'objets et les encapsuler dans des classes d'usine pour les dissocier des classes concrètes. Dans le framework Java, le modèle d'usine est utilisé pour : Créer des objets complexes (tels que des beans dans Spring) Assurer l'isolation des objets, améliorer la testabilité et la maintenabilité Prendre en charge les extensions, augmenter la prise en charge de nouveaux types d'objets en ajoutant de nouvelles classes d'usine

Une analyse approfondie des fonctions et des principes de fonctionnement de la commande Linux chage Une analyse approfondie des fonctions et des principes de fonctionnement de la commande Linux chage Feb 24, 2024 pm 03:48 PM

La commande chage dans le système Linux est une commande utilisée pour modifier la date d'expiration du mot de passe d'un compte utilisateur. Elle peut également être utilisée pour modifier la date d'utilisation la plus longue et la plus courte du compte. Cette commande joue un rôle très important dans la gestion de la sécurité des comptes utilisateur. Elle peut contrôler efficacement la période d'utilisation des mots de passe utilisateur et améliorer la sécurité du système. Comment utiliser la commande chage : La syntaxe de base de la commande chage est : chage [option] nom d'utilisateur Par exemple, pour modifier la date d'expiration du mot de passe de l'utilisateur "testuser", vous pouvez utiliser la commande suivante.

Explication détaillée du principe du plug-in de pagination MyBatis Explication détaillée du principe du plug-in de pagination MyBatis Feb 22, 2024 pm 03:42 PM

MyBatis est un excellent framework de couche de persistance. Il prend en charge les opérations de base de données basées sur XML et les annotations. Il est simple et facile à utiliser. Il fournit également un mécanisme de plug-in riche. Parmi eux, le plug-in de pagination est l'un des plug-ins les plus fréquemment utilisés. Cet article approfondira les principes du plug-in de pagination MyBatis et l'illustrera avec des exemples de code spécifiques. 1. Principe du plug-in de pagination MyBatis lui-même ne fournit pas de fonction de pagination native, mais vous pouvez utiliser des plug-ins pour implémenter des requêtes de pagination. Le principe du plug-in de pagination est principalement d'intercepter MyBatis

See all articles