


Utilisez la file d'attente prioritaire pour trouver les K points les plus proches de l'origine
Dans ce problème, nous trouverons les K points les plus proches de l'origine dans le plan 2D à partir des N points donnés.
Nous pouvons utiliser la formule de distance euclidienne standard pour calculer la distance entre l'origine et chaque point donné. Après cela, nous pouvons stocker les points avec distance dans un tableau, trier le tableau en fonction de la distance et prendre les K premiers points.
Cependant, nous pouvons également utiliser une file d'attente prioritaire pour stocker les points 2D en fonction de leur distance par rapport à l'origine. Ensuite, nous pouvons retirer K fois de la file d’attente.
Énoncé du problème− On nous donne N points sur un plan bidimensionnel. Nous devons trouver les points K les plus proches de l’origine du plan.
REMARQUE- Considérez la distance euclidienne comme la distance entre l'origine et un point donné sur le plan.
Exemple
Entrez
points = {{2, -2}, {-5, 1}, {2, 1}, {0, 3}, {6, 0}, {5, 5}, {4, 9}}, K = 4
Sortie
{2,1} {2,-2} {0,3} {-5,1}
Explication − Voici la distance euclidienne de chaque point à l'origine.
(2, −2) −> sqrt(8)
(−5, 1) −> sqrt(26)
(2, 1) -> sqrt(5)
(0, 3) −> sqrt(9)
(6, 0) -> carré(36)
(5, 5) -> carré(50)
(4, 9) -> sqrt(97)
Ainsi, les 4 points les plus proches sont {2,1} {2,−2} {0,3} {−5,1}.
Entrez
points = {{1, 2}, {2, 1}, {-2, 1}, {1, -2}} K = 2
Sortie
{1, 2}, {2, 1}
Explication − La distance de tous les points à l'origine est la même. Par conséquent, nous pouvons imprimer 2 points en sortie.
Entrez
points = {{1, 3}, {6, 7}, {1, 1}, {1, 0}} K = 4
Sortie
{1, 0}, {1, 1}, {1, 3}, {6, 7}
Explication− K est égal au point donné. Par conséquent, nous devons imprimer tous les points.
Méthode 1
Dans cette méthode, nous trierons le tableau à l'aide de la méthode sort(). De plus, nous utiliserons une fonction de comparaison pour trier les points en fonction de leur distance par rapport à l'origine. Après cela, nous imprimons les K premiers éléments du tableau trié.
Algorithme
Étape 1 − Utilisez la méthode sort() pour trier la liste et transmettez la fonction distComparator() comme troisième paramètre.
Étape 2− Définissez la fonction distComparator() pour comparer la distance d'un point donné. Cette fonction prend comme paramètres une paire de p et q.
Étape 2.1 − Obtenez la distance du point p à l'origine et stockez-la dans dist_p.
Étape 2.2 − Stockez la distance du point q à l'origine dans la variable dist_q.
Étape 2.3 − Si dist_p est inférieur à dist_q, retournez vrai. Sinon, renvoie faux.
Étape 3- Parcourez le tableau et imprimez les K premiers points du tableau.
Exemple
#include <bits/stdc++.h> using namespace std; bool distComparator(const pair<int, int> &p, const pair<int, int> &q) { int dist_p = p.first * p.first + p.second * p.second; int dist_q = q.first * q.first + q.second * q.second; return dist_p < dist_q; } vector<pair<int, int>> findKPoints(vector<pair<int, int>> points, int n, int k) { vector<pair<int, int>> res_points; sort(points.begin(), points.end(), distComparator); // Get the first K points for (int p = 0; p < k; p++) { res_points.push_back({points[p].first, points[p].second}); } return res_points; } int main() { int k = 4, n = 7; vector<pair<int, int>> points{{2, -2}, {-5, 1}, {2, 1}, {0, 3}, {6, 0}, {5, 5}, {4, 9}}; vector<pair<int, int>> res = findKPoints(points, n, k); cout << "The " << k << " closest points from origin are - "; for (int p = 0; p < k; p++) { cout << "{" << res[p].first << "," << res[p].second << "} "; } return 0; }
Sortie
The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Complexité temporelle - La complexité temporelle du tri d'un tableau est O(NlogN).
Complexité spatiale - O(N) pour trier un tableau.
Méthode 2
Dans cette méthode, nous utiliserons la file d'attente prioritaire pour insérer des points. De plus, nous utiliserons une fonction de comparaison et une file d'attente prioritaire pour stocker les points en fonction de leur distance la plus courte depuis l'origine.
Algorithme
Étape 1 − Définissez la liste 'res_points' pour stocker les K points les plus proches.
Étape 2- Définir la file d'attente prioritaire. Ici, « paire
Étape 3− Définissez la fonction cmp() pour comparer la distance euclidienne de deux points à l'origine.
Étape 3.1 - Renvoie une valeur booléenne basée sur la distance du point a à l'origine étant supérieure à la distance du point b à l'origine.
Étape 4- Insérez chaque élément du tableau dans la file d'attente prioritaire.
Étape 5− Extrayez les K premiers éléments de la file d'attente et stockez-les dans la liste res_points.
Étape 6− Renvoie la liste de points res_points.
Exemple
#include <bits/stdc++.h> using namespace std; vector<pair<int, int>> findKPoints(vector<pair<int, int>> points, int n, int k) { vector<pair<int, int>> res_points; // Custom comparator to compare points based on their distance from the origin auto cmp = [](const pair<int, int>& a, const pair<int, int>& b) { return (a.first * a.first + a.second * a.second) > (b.first * b.first + b.second * b.second); }; // Use the custom comparator in the priority_queue priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> p_que(cmp); for (int p = 0; p < n; p++) { // Inserting points in a queue p_que.push(points[p]); } // Get first K points while (k--) { auto temp = p_que.top(); res_points.push_back(temp); p_que.pop(); } return res_points; } int main() { int k = 4, n = 7; vector<pair<int, int>> points{{2, -2}, {-5, 1}, {2, 1}, {0, 3}, {6, 0}, {5, 5}, {4, 9}}; vector<pair<int, int>> res = findKPoints(points, n, k); cout << "The " << k << " closest points from origin are - "; for (int p = 0; p < k; p++) { cout << "{" << res[p].first << "," << res[p].second << "} "; } return 0; }
Sortie
The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Complexité temporelle - O(N*logN) Insertion de N éléments dans la file d'attente prioritaire. Ici, N est le nombre total de points.
Complexité spatiale - O(N) pour stocker les points dans la file d'attente prioritaire.
La file d'attente prioritaire utilise une structure de données de tas. Par conséquent, l’insertion et la suppression d’éléments ne prennent que du temps O(logN). Les deux méthodes nécessitent la même mémoire et le même temps. Cependant, la deuxième méthode est plus efficace car elle utilise la structure de données tas.
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)

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

Le tas et la file d'attente prioritaire sont des structures de données couramment utilisées en C++, et elles ont toutes deux une valeur applicative importante. Cet article présentera et analysera respectivement le tas et la file d'attente prioritaire pour aider les lecteurs à mieux les comprendre et les utiliser. 1. Heap est une structure de données arborescente spéciale qui peut être utilisée pour implémenter des files d'attente prioritaires. Dans le tas, chaque nœud satisfait aux propriétés suivantes : sa valeur n'est pas inférieure (ou pas supérieure) à la valeur de son nœud parent. Ses sous-arbres gauche et droit constituent également un tas. Nous appelons un tas qui n'est pas plus petit que son nœud parent un « tas min » et un tas qui n'est pas plus grand que son nœud parent un « tas max ».

Quels sont les scénarios d'utilisation du tas et de la file d'attente prioritaire en Python ? Le tas 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. Une file d'attente prioritaire est également une structure de données spéciale Contrairement à une 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-uns

Avec le développement continu de la société, les exigences des gens en matière de technologie informatique sont de plus en plus élevées. Dans les ordinateurs, les files d’attente constituent une structure de données très importante qui peut nous aider à résoudre efficacement de nombreux problèmes. Cependant, dans les processus d'application réels, l'efficacité de la file d'attente est souvent limitée par certains facteurs, tels que le retard du réseau, la vitesse des requêtes de la base de données, etc. Nous allons donc présenter aujourd'hui un moyen de résoudre ce problème : utiliser la technologie de mise en cache Memcache en PHP pour améliorer l'efficacité de la file d'attente prioritaire. 1. Qu'est-ce qu'une file d'attente prioritaire ?

Dans ce problème, nous trouverons les K points dans le plan 2D les plus proches de l’origine à partir des N points donnés. Nous pouvons utiliser la formule de distance euclidienne standard pour calculer la distance entre l’origine et chaque point donné. Après cela, nous pouvons stocker les points avec distance dans un tableau, trier le tableau en fonction de la distance et prendre les K premiers points. Cependant, nous pouvons également utiliser une file d'attente prioritaire pour stocker des points 2D en fonction de leur distance par rapport à l'origine. Ensuite, nous pouvons retirer K fois de la file d’attente. Énoncé du problème - On nous donne N points sur un plan bidimensionnel. Nous devons trouver les points K les plus proches de l’origine du plan. Remarque - Considérez la distance euclidienne comme la distance entre l'origine et un point donné sur le plan. Exemple de points d'entrée ={{2,-2},{-5,1},{2,1},{

Les files d'attente prioritaires permettent de stocker et d'accéder aux éléments par priorité, en définissant des priorités basées sur des critères comparables tels que la valeur, l'horodatage ou la logique personnalisée. Les méthodes d'implémentation en PHP incluent la classe SplPriorityQueue et le tas Min/Max. Le cas pratique montre comment utiliser la classe SplPriorityQueue pour créer une file d'attente prioritaire et obtenir des éléments par priorité.

Comment le tas et la file d'attente prioritaire sont-ils implémentés en Python ? Les tas et les files d'attente prioritaires sont des structures de données couramment utilisées en informatique. En Python, nous pouvons utiliser le module heapq pour implémenter des tas et des files d'attente prioritaires. Un tas est un type particulier d'arbre binaire complet. Dans le tas, la valeur de chaque nœud parent est inférieure (ou supérieure) à la valeur de son nœud enfant. Un tel tas est appelé petit tas racine (ou grand tas racine). . En Python, un tas peut être représenté par une liste. Le module heapq de Python fournit quelques méthodes pour manipuler le tas. d'abord

La circonférence d'un cercle peut être définie comme la limite extérieure du cercle. C'est la circonférence du cercle. Chaque point autour d'un cercle suit certaines propriétés comme suit - Le point (x, y) se trouve à l'intérieur du cercle tel que $\mathrm{x^2+y^2R^2}$ où R=rayon du cercle. Énoncé du problème Étant donné une chaîne S représentant une séquence de mouvements (L, R, U, D) et un entier R représentant le rayon d'un cercle. Vérifiez si un point sur la circonférence d'un cercle de rayon R avec l'origine peut être atteint en sélectionnant n'importe quelle sous-séquence de mouvements à partir de S. Le fonctionnement de chaque mouvement est le suivant, L = Diminuer la coordonnée x R = Incrémenter la coordonnée x U = Incrémenter la coordonnée y D = Diminuer la coordonnée y Exemple 1 Entrée S = "RURDLR" R = 2 Sortie Oui Description Sélectionner la sous-séquence "RR "-initiale ,(
