Inhaltsverzeichnis
Beispiel
Methode 2
Algorithmus
Ausgabe
Heim Backend-Entwicklung C++ Verwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen

Verwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen

Sep 14, 2023 pm 09:01 PM
优先队列 原点 Komm näher

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
Nach dem Login kopieren

Ausgabe

{2,1} {2,-2} {0,3} {-5,1}
Nach dem Login kopieren

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
Nach dem Login kopieren

Ausgabe

{1, 2}, {2, 1}
Nach dem Login kopieren

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
Nach dem Login kopieren

Ausgabe

{1, 0}, {1, 1}, {1, 3}, {6, 7}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe

The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Nach dem Login kopieren
Nach dem Login kopieren

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“ bedeutet hier die Verwendung einer Prioritätswarteschlange zum Speichern von Ganzzahlpaaren. „vector>“ bedeutet die Verwendung von Vektoren zum Speichern von Paaren. Zusätzlich haben wir die Funktion „cmp“ mit einer Prioritätswarteschlange verwendet.

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;
}
Nach dem Login kopieren

Ausgabe

The 4 closest points from origin are - {2,1} {2,-2} {0,3} {-5,1}
Nach dem Login kopieren
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Erläuterung der Implementierung der Prioritätswarteschlange in Redis Detaillierte Erläuterung der Implementierung der Prioritätswarteschlange in Redis Jun 20, 2023 am 08:31 AM

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 in C++ Heap und Prioritätswarteschlange in C++ Aug 22, 2023 pm 04:16 PM

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? Was sind die Verwendungsszenarien von Heap und Prioritätswarteschlange in Python? Oct 28, 2023 am 08:56 AM

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

Verwendung der Memcache-Caching-Technologie in PHP zur Verbesserung der Effizienz von Prioritätswarteschlangen Verwendung der Memcache-Caching-Technologie in PHP zur Verbesserung der Effizienz von Prioritätswarteschlangen May 17, 2023 pm 03:31 PM

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?

Verwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen Verwenden Sie die Prioritätswarteschlange, um die K Punkte zu finden, die dem Ursprung am nächsten liegen Sep 14, 2023 pm 09:01 PM

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},{

PHP-Datenstruktur: Anwendung der Prioritätswarteschlange, Steuerung der Erfassung geordneter Elemente PHP-Datenstruktur: Anwendung der Prioritätswarteschlange, Steuerung der Erfassung geordneter Elemente Jun 01, 2024 pm 05:55 PM

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? Wie werden Heap und Prioritätswarteschlange in Python implementiert? Oct 18, 2023 am 10:22 AM

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

Überprüft, ob es möglich ist, vom Ursprung aus jeden Punkt auf dem Umfang eines gegebenen Kreises zu erreichen Überprüft, ob es möglich ist, vom Ursprung aus jeden Punkt auf dem Umfang eines gegebenen Kreises zu erreichen Aug 29, 2023 pm 09:13 PM

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 ,(

See all articles