


Quels sont les scénarios d'utilisation du tas et de la file d'attente prioritaire en Python ?
Quels sont les scénarios d'utilisation du tas et de la file d'attente prioritaire en Python ?
Heap est une structure arborescente binaire spéciale qui est souvent utilisée pour maintenir efficacement une collection dynamique. Le module heapq en Python fournit une implémentation de tas et peut facilement effectuer des opérations sur le tas.
La file d'attente prioritaire est également une structure de données spéciale différente de la file d'attente ordinaire, chaque élément de celle-ci est associé à une priorité. L'élément ayant la priorité la plus élevée est supprimé en premier. Le module heapq en Python peut également implémenter la fonction de file d'attente prioritaire.
Ci-dessous, nous présentons quelques scénarios spécifiques d'utilisation du tas et de la file d'attente prioritaire, et donnons des exemples de code pertinents.
- Trouver le problème du Top K
Trouver les k premiers éléments les plus grands ou les plus petits d'une séquence est un problème courant, comme trouver les k premiers nombres les plus grands ou les k premiers nombres les plus petits. Ce problème peut être facilement résolu en utilisant un tas de taille k ou une file d'attente prioritaire.
import heapq def top_k_smallest(nums, k): heap = [] for num in nums: heapq.heappush(heap, num) if len(heap) > k: heapq.heappop(heap) return heap nums = [5, 3, 8, 2, 7, 1, 9] k = 3 result = top_k_smallest(nums, k) print(result) # 输出 [3, 2, 1]
- Fusionner des tableaux ordonnés
Fusionner plusieurs nombres ordonnés pour former un tableau ordonné est un problème courant. Il peut être implémenté en utilisant une file d'attente prioritaire. Chaque fois, le plus petit élément est extrait de chaque tableau et placé dans la file d'attente prioritaire, puis les éléments de la file d'attente sont retirés dans l'ordre.
import heapq def merge_sorted_arrays(arrays): result = [] pq = [] for array in arrays: if array: heapq.heappush(pq, (array[0], array)) while pq: smallest, array = heapq.heappop(pq) result.append(smallest) if array[1:]: heapq.heappush(pq, (array[1], array[1:])) return result arrays = [[1, 3, 5], [2, 4, 6], [0, 7, 8]] result = merge_sorted_arrays(arrays) print(result) # 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8]
- Trouver la médiane
Trouver la médiane d'une séquence est un problème classique. Ceci peut être réalisé en utilisant deux tas, un tas max pour la première moitié de la séquence et un tas min pour la seconde moitié de la séquence. En gardant les tailles des deux tas égales ou différentes d'un, la médiane peut être prise au sommet du tas.
import heapq def median(nums): min_heap = [] max_heap = [] for num in nums: if len(max_heap) == 0 or num <= -max_heap[0]: heapq.heappush(max_heap, -num) else: heapq.heappush(min_heap, num) if len(max_heap) > len(min_heap) + 1: heapq.heappush(min_heap, -heapq.heappop(max_heap)) elif len(min_heap) > len(max_heap): heapq.heappush(max_heap, -heapq.heappop(min_heap)) if len(max_heap) > len(min_heap): return -max_heap[0] elif len(min_heap) > len(max_heap): return min_heap[0] else: return (-max_heap[0] + min_heap[0]) / 2 nums = [4, 2, 5, 7, 1, 8, 3, 6] result = median(nums) print(result) # 输出 4.5
Ci-dessus sont quelques scénarios d'utilisation courants et des exemples de codes de tas et de file d'attente prioritaire en Python. Les tas et les files d'attente prioritaires sont des structures de données couramment utilisées, et maîtriser leur utilisation est très utile pour résoudre certains problèmes complexes.
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)

Redis et MongoDB sont tous deux des bases de données NoSQL open source populaires, mais leurs concepts de conception et leurs scénarios d'utilisation sont différents. Cet article se concentrera sur les différences et les scénarios d'utilisation de Redis et MongoDB. Introduction à Redis et MongoDB Redis est un système de stockage de données hautes performances qui est souvent utilisé comme middleware de cache et de messages. Redis utilise la mémoire comme support de stockage principal, mais il prend également en charge les données persistantes sur le disque. Redis est une base de données clé-valeur qui prend en charge diverses structures de données (telles que

Différences et scénarios d'utilisation entre Redis et Elasticsearch Avec le développement rapide et la quantification massive des informations Internet, un stockage et une récupération efficaces des données sont devenus de plus en plus importants. Pour cette raison, des bases de données de type NoSQL (NotOnlySQL) ont vu le jour, parmi lesquelles Redis et Elasticsearch sont les plus populaires. Cet article comparera Redis et Elasticsearch et explorera leurs scénarios d'utilisation. Redis et ElasticSearch

Différences : 1. L'espace du tas est généralement alloué et libéré par le programmeur tandis que l'espace de la pile est automatiquement alloué et libéré par le système d'exploitation ; 2. Le tas est stocké dans le cache de deuxième niveau et son cycle de vie est déterminé par l'algorithme de récupération de place de la machine virtuelle, tandis que la pile utilise le cache de premier niveau, qui se trouve généralement dans l'espace de stockage lorsqu'elle est appelée. , et est libéré immédiatement après la fin de l'appel. 3. Les structures de données sont différentes. Le tas peut être considéré comme un arbre, tandis que la pile est une structure de données premier entré, dernier sorti.

deque en Python est un deque de bas niveau hautement optimisé, utile pour implémenter des files d'attente et des piles Pythoniques élégantes et efficaces, qui sont les types de données basés sur des listes les plus courants en informatique. Dans cet article, Yun Duojun apprendra ce qui suit avec vous : Commencez à utiliser deque pour afficher et ajouter efficacement des éléments. Accédez à n'importe quel élément de deque. Utilisez deque pour créer une file d'attente efficace. une liste Python et des éléments contextuels. Les opérations sont généralement très efficaces. Si la complexité temporelle est exprimée en Big O, alors on peut dire qu'ils sont O(1). Et lorsque Python doit réallouer de la mémoire pour augmenter la liste sous-jacente afin d'accepter de nouveaux éléments, ces

Explication détaillée de l'implémentation Redis de la file d'attente prioritaire La file d'attente prioritaire est une structure de données commune qui peut trier les éléments selon certaines règles et maintenir cet ordre pendant les opérations de file d'attente, de sorte que les éléments retirés de la file d'attente suivent toujours le comportement prioritaire prédéfini. En tant que base de données en mémoire, Redis présente également des avantages dans la mise en œuvre de files d'attente prioritaires en raison de ses capacités d'accès aux données rapides et efficaces. Cet article présentera en détail la méthode et l'application de Redis pour implémenter la file d'attente prioritaire. 1. Principes de base de la mise en œuvre de Redis Principes de base de la mise en œuvre de Redis de la file d'attente prioritaire

La différence entre le tas et la pile : 1. La méthode d'allocation de mémoire est différente. Le tas est alloué et libéré manuellement par le programmeur, tandis que la pile est automatiquement allouée et libérée par le système d'exploitation. 2. La taille est différente. la pile est fixe, tandis que la pile est automatiquement allouée et libérée par le système d'exploitation. La taille de augmente de manière dynamique 3. Dans le tas, l'accès aux données se fait via des pointeurs, tandis que dans la pile, les données. l'accès se fait via les noms de variables ; 4. Cycle de vie des données , Dans le tas, le cycle de vie des données peut être très long, tandis que dans la pile, le cycle de vie des variables est déterminé par la portée dans laquelle elles se trouvent.

La différence entre le tas et la pile Java : 1. Allocation et gestion de la mémoire ; 2. Contenu du stockage 3. Exécution des threads et cycle de vie ; 4. Impact sur les performances. Introduction détaillée : 1. Allocation et gestion de la mémoire. Le tas Java est une zone de mémoire allouée dynamiquement, principalement utilisée pour stocker les instances d'objets. En Java, les objets sont alloués via la mémoire tas. Lorsqu'un objet est créé, la machine virtuelle Java alloue la mémoire correspondante. espace sur le système et effectuer automatiquement le garbage collection et la gestion de la mémoire. La taille du tas peut être ajustée dynamiquement au moment de l'exécution, configurée via les paramètres JVM, etc.

La structure de données du tas en PHP est une structure arborescente qui satisfait aux propriétés complètes de l'arbre binaire et du tas (la valeur du nœud parent est supérieure/inférieure à la valeur du nœud enfant) et est implémentée à l'aide d'un tableau. Le tas prend en charge deux opérations : le tri (extraction du plus grand élément de petit à grand) et la file d'attente prioritaire (extraction du plus grand élément en fonction de la priorité). Les propriétés du tas sont conservées respectivement via les méthodes heapifyUp et heapifyDown.
