


Verwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen
In diesem Problem werden wir aus den gegebenen N Punkten die K Punkte finden, die dem Ursprung in der 2D-Ebene am nächsten liegen.
Wir können die standardmäßige euklidische Distanzformel verwenden, um die Distanz zwischen dem Ursprung und jedem gegebenen Punkt zu berechnen. Danach können wir die distanzierten Punkte in einem Array speichern, das Array nach der Entfernung sortieren und die obersten K Punkte nehmen.
Wir können jedoch auch eine Prioritätswarteschlange verwenden, um 2D-Punkte basierend auf ihrer Entfernung vom Ursprung zu speichern. Anschließend können wir K-mal aus der Warteschlange aussteigen.
Problemstellung− Wir erhalten N Punkte auf einer zweidimensionalen Ebene. Wir müssen die K Punkte finden, die dem Ursprung der Ebene am nächsten liegen.
HINWEIS – Stellen Sie sich den euklidischen Abstand als den Abstand zwischen dem Ursprung und einem bestimmten Punkt auf der Ebene vor.
Beispiel
Eintreten
points = {{2, -2}, {-5, 1}, {2, 1}, {0, 3}, {6, 0}, {5, 5}, {4, 9}}, K = 4
Ausgabe
{2,1} {2,-2} {0,3} {-5,1}
Erklärung − Hier ist der euklidische Abstand jedes Punktes zum Ursprung.
(2, −2) −> sqrt(8)
(−5, 1) −> sqrt(26)
(2, 1) -> sqrt(5)
(0, 3) −> sqrt(9)
(6, 0) -> sqrt(36)
(5, 5) -> sqrt(50)
(4, 9) -> sqrt(97)
Die 4 nächstgelegenen Punkte sind also {2,1} {2,−2} {0,3} {−5,1}.
Eintreten
points = {{1, 2}, {2, 1}, {-2, 1}, {1, -2}} K = 2
Ausgabe
{1, 2}, {2, 1}
Erklärung − Der Abstand aller Punkte zum Ursprung ist gleich. Daher können wir zwei beliebige Punkte als Ausgabe drucken.
Eintreten
points = {{1, 3}, {6, 7}, {1, 1}, {1, 0}} K = 4
Ausgabe
{1, 0}, {1, 1}, {1, 3}, {6, 7}
Erläuterung− K ist gleich dem angegebenen Punkt. Daher müssen wir alle Punkte ausdrucken.
Methode 1
In dieser Methode sortieren wir das Array mit der Methode sort(). Zusätzlich verwenden wir eine Komparatorfunktion, um die Punkte nach ihrer Entfernung vom Ursprung zu sortieren. Danach drucken wir die ersten K Elemente des sortierten Arrays.
Algorithmus
Schritt 1 − Sortieren Sie die Liste mit der Methode sort() und übergeben Sie die Funktion distComparator() als dritten Parameter.
Schritt 2− Definieren Sie die Funktion distComparator(), um die Entfernung eines bestimmten Punktes zu vergleichen. Diese Funktion benötigt als Parameter ein Paar aus p und q.
Schritt 2.1 − Ermitteln Sie den Abstand vom Punkt p zum Ursprung und speichern Sie ihn in dist_p.
Schritt 2.2 − Speichern Sie den Abstand vom Punkt q zum Ursprung in der Variablen dist_q.
Schritt 2.3 − Wenn dist_p kleiner als dist_q ist, gebe true zurück. Andernfalls wird false zurückgegeben.
Schritt 3 – Durchlaufen Sie das Array und drucken Sie die ersten K Punkte des Arrays.
Beispiel
#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; }
Ausgabe
The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Zeitkomplexität – Die Zeitkomplexität beim Sortieren eines Arrays beträgt O(NlogN).
Raumkomplexität – O(N) zum Sortieren eines Arrays.
Methode 2
Bei dieser Methode verwenden wir die Prioritätswarteschlange, um Punkte einzufügen. Darüber hinaus verwenden wir eine Komparatorfunktion und eine Prioritätswarteschlange, um Punkte basierend auf ihrer kürzesten Entfernung vom Ursprung zu speichern.
Algorithmus
Schritt 1 − Definieren Sie die Liste „res_points“, um die K nächstgelegenen Punkte zu speichern.
Schritt 2 – Prioritätswarteschlange definieren. „Paar
Schritt 3− Definieren Sie die Funktion cmp(), um den euklidischen Abstand zweier Punkte zum Ursprung zu vergleichen.
Schritt 3.1 - Geben Sie einen booleschen Wert zurück, der darauf basiert, dass der Abstand von Punkt a zum Ursprung größer ist als der Abstand von Punkt b zum Ursprung.
Schritt 4- Fügen Sie jedes Element des Arrays in die Prioritätswarteschlange ein.
Schritt 5− Nehmen Sie die ersten K Elemente aus der Warteschlange und speichern Sie sie in der res_points-Liste.
Schritt 6− Geben Sie die res_points-Punkteliste zurück.
Beispiel
#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; }
Ausgabe
The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Zeitkomplexität – O(N*logN) Einfügen von N Elementen in die Prioritätswarteschlange. Dabei ist N die Gesamtpunktzahl.
Raumkomplexität – O(N) zum Speichern von Punkten in der Prioritätswarteschlange.
Prioritätswarteschlange verwendet Heap-Datenstruktur. Daher dauert das Einfügen und Löschen von Elementen nur O(logN) Zeit. Beide Methoden benötigen den gleichen Speicher und die gleiche Zeit. Die zweite Methode ist jedoch effizienter, da sie die Heap-Datenstruktur verwendet.
Das obige ist der detaillierte Inhalt vonVerwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Detaillierte Erläuterung der Redis-Implementierung der Prioritätswarteschlange. Die Prioritätswarteschlange ist eine allgemeine Datenstruktur, die Elemente nach bestimmten Regeln sortieren und diese Reihenfolge während der Warteschlangenoperationen beibehalten kann, sodass aus der Warteschlange entnommene Elemente immer dem voreingestellten Prioritätsverhalten folgen. Als In-Memory-Datenbank bietet Redis aufgrund seiner schnellen und effizienten Datenzugriffsfunktionen auch Vorteile bei der Implementierung von Prioritätswarteschlangen. In diesem Artikel werden die Methode und Anwendung von Redis zur Implementierung der Prioritätswarteschlange ausführlich vorgestellt. 1. Grundprinzipien der Redis-Implementierung Grundprinzipien der Redis-Implementierung der Prioritätswarteschlange

Heap und Prioritätswarteschlange sind häufig verwendete Datenstrukturen in C++, und beide haben einen wichtigen Anwendungswert. In diesem Artikel werden der Heap und die Prioritätswarteschlange vorgestellt und analysiert, um den Lesern zu helfen, sie besser zu verstehen und zu verwenden. 1. Heap ist eine spezielle Baumdatenstruktur, mit der Prioritätswarteschlangen implementiert werden können. Im Heap erfüllt jeder Knoten die folgenden Eigenschaften: Sein Wert ist nicht kleiner (oder nicht größer) als der Wert seines übergeordneten Knotens. Seine linken und rechten Teilbäume sind ebenfalls ein Heap. Wir nennen einen Heap, der nicht kleiner als sein übergeordneter Knoten ist, einen „Min-Heap“ und einen Heap, der nicht größer als sein übergeordneter Knoten ist, einen „Max-Heap“.

Was sind die Verwendungsszenarien von Heap und Prioritätswarteschlange in Python? Der Heap ist eine spezielle binäre Baumstruktur, die häufig zur effizienten Verwaltung einer dynamischen Sammlung verwendet wird. Das Heapq-Modul in Python bietet eine Heap-Implementierung und kann problemlos Heap-Operationen ausführen. Eine Prioritätswarteschlange ist auch eine spezielle Datenstruktur. Im Gegensatz zu einer gewöhnlichen Warteschlange ist jedem Element eine Priorität zugeordnet. Das Element mit der höchsten Priorität wird zuerst entfernt. Das Heapq-Modul in Python kann auch die Prioritätswarteschlangenfunktion implementieren. Im Folgenden stellen wir einige vor

Mit der kontinuierlichen Entwicklung der Gesellschaft werden die Anforderungen der Menschen an Computertechnologie immer höher. In Computern sind Warteschlangen eine sehr wichtige Datenstruktur, die uns helfen kann, viele Probleme effizient zu lösen. In tatsächlichen Anwendungsprozessen wird die Effizienz der Warteschlange jedoch häufig durch einige Faktoren wie Netzwerkverzögerung, Datenbankabfragegeschwindigkeit usw. eingeschränkt. Deshalb stellen wir heute eine Möglichkeit vor, dieses Problem zu lösen: die Verwendung der Memcache-Caching-Technologie in PHP, um die Effizienz der Prioritätswarteschlange zu verbessern. 1. Was ist eine Prioritätswarteschlange?

In diesem Problem werden wir die K Punkte in der 2D-Ebene finden, die von den gegebenen N Punkten aus am nächsten zum Ursprung liegen. Wir können die standardmäßige euklidische Distanzformel verwenden, um die Distanz vom Ursprung zu jedem gegebenen Punkt zu berechnen. Danach können wir die Punkte mit Abstand in einem Array speichern, das Array nach Abstand sortieren und die obersten K Punkte nehmen. Wir können jedoch auch eine Prioritätswarteschlange verwenden, um 2D-Punkte basierend auf ihrer Entfernung vom Ursprung zu speichern. Anschließend können wir K-mal aus der Warteschlange aussteigen. Problemstellung: Wir erhalten N Punkte auf einer zweidimensionalen Ebene. Wir müssen die K Punkte finden, die dem Ursprung der Ebene am nächsten liegen. Hinweis: Stellen Sie sich den euklidischen Abstand als den Abstand zwischen dem Ursprung und einem bestimmten Punkt auf der Ebene vor. Beispieleingabepunkte={{2,-2},{-5,1},{2,1},{

Prioritätswarteschlangen ermöglichen das Speichern und Zugreifen auf Elemente nach Priorität, wobei Prioritäten auf der Grundlage vergleichbarer Kriterien wie Wert, Zeitstempel oder benutzerdefinierter Logik festgelegt werden. Zu den Implementierungsmethoden in PHP gehören die SplPriorityQueue-Klasse und der Min/Max-Heap. Der praktische Fall zeigt, wie Sie mit der SplPriorityQueue-Klasse eine Prioritätswarteschlange erstellen und Elemente nach Priorität abrufen.

Wie werden Heap und Prioritätswarteschlange in Python implementiert? Heaps und Prioritätswarteschlangen sind in der Informatik häufig verwendete Datenstrukturen. In Python können wir das Heapq-Modul verwenden, um Heaps und Prioritätswarteschlangen zu implementieren. Ein Heap ist eine spezielle Art eines vollständigen Binärbaums. Im Heap ist der Wert jedes übergeordneten Knotens kleiner (oder größer) als der Wert seines untergeordneten Knotens. Ein solcher Heap wird als kleiner Root-Heap (oder großer Root-Heap) bezeichnet. . In Python kann ein Heap durch eine Liste dargestellt werden. Das Heapq-Modul von Python bietet einige Methoden zum Bearbeiten des Heaps. Erste

Der Umfang eines Kreises kann als äußere Begrenzung des Kreises definiert werden. Es ist der Umfang des Kreises. Jeder Punkt um einen Kreis folgt bestimmten Eigenschaften wie folgt: Der Punkt (x,y) liegt innerhalb des Kreises, sodass $\mathrm{x^2+y^2R^2}$ gilt, wobei R=Radius des Kreises. Problemstellung Gegeben sei eine Zeichenfolge S, die eine Folge von Bewegungen (L, R, U, D) darstellt, und eine ganze Zahl R, die den Radius eines Kreises darstellt. Prüfen Sie, ob ein beliebiger Punkt auf dem Umfang eines Kreises mit dem Radius R mit dem Ursprung erreicht werden kann, indem Sie eine Teilfolge von Bewegungen ausgehend von S auswählen. Die Funktionsweise jeder Bewegung ist wie folgt: L = X-Koordinate verringern R = X-Koordinate erhöhen U = Y-Koordinate erhöhen D = Y-Koordinate verringern Beispiel 1 Eingabe S = „RURDLR“ R = 2 Ausgabe Ja Beschreibung Wählen Sie die Untersequenz „RR“-initial aus ,(
