Heim > Backend-Entwicklung > C++ > Hauptteil

Algorithmenklassifizierung und Beispiele

王林
Freigeben: 2023-09-07 11:41:07
nach vorne
957 Leute haben es durchsucht

Algorithmenklassifizierung und Beispiele

Die Klassifizierung von Algorithmen hilft bei der Auswahl des am besten geeigneten Algorithmus für eine bestimmte Aufgabe, sodass Entwickler ihren Code optimieren und eine bessere Leistung erzielen können. In der Informatik ist ein Algorithmus ein klar definierter Satz von Anweisungen, der zur Lösung eines Problems oder zur Ausführung einer bestimmten Aufgabe verwendet wird. Die Effizienz und Effektivität dieser Algorithmen sind entscheidend für die Gesamtleistung des Programms.

In diesem Artikel werden wir zwei gängige Methoden zur Klassifizierung von Algorithmen diskutieren, nämlich basierend auf der zeitlichen Komplexität und basierend auf Entwurfstechniken.

Grammatik

Die Syntax der Hauptfunktion wird im Code beider Methoden verwendet -

int main() {
   // Your code here
}
Nach dem Login kopieren

Algorithmus

  • Identifizieren Sie das zu lösende Problem.

  • Wählen Sie geeignete Methoden zur Klassifizierung von Algorithmen.

  • Schreiben Sie Code in C++ mit der Methode Ihrer Wahl.

  • Kompilieren Sie den Code und führen Sie ihn aus.

  • Ausgabe analysieren.

Was ist die Zeitkomplexität?

Zeitkomplexität ist ein Maß dafür, wie lange die Ausführung eines Algorithmus als Funktion der Größe der Eingabe dauert. Es ist eine Möglichkeit, die Effizienz eines Algorithmus und seine Skalierbarkeit mit zunehmender Größe der Eingabe zu beschreiben.

Zeitkomplexität wird normalerweise in der großen O-Notation ausgedrückt, die eine Obergrenze für die Laufzeit des Algorithmus angibt. Beispielsweise bedeutet ein Algorithmus mit einer Zeitkomplexität von O(1), dass die Laufzeit unabhängig von der Eingabegröße konstant bleibt, während ein Algorithmus mit einer Zeitkomplexität von O(n^2) bedeutet, dass die Laufzeit quadratisch mit der Eingabegröße wächst Eingabegröße. Das Verständnis der zeitlichen Komplexität eines Algorithmus ist wichtig, wenn Sie den richtigen Algorithmus zur Lösung eines Problems auswählen und verschiedene Algorithmen vergleichen möchten.

Methode 1: Algorithmen basierend auf der Zeitkomplexität klassifizieren

Dieser Ansatz umfasst die Klassifizierung von Algorithmen basierend auf ihrer zeitlichen Komplexität.

Dies erfordert zunächst die Interpretation der Dauerkomplexität des Algorithmus und die anschließende Klassifizierung in eine von fünf Kategorien basierend auf der Komplexität der verstrichenen Zeit: O(1) konstante Zeitkomplexität, O(log n) logarithmische Zeitkomplexitätseigenschaft, O(n) lineare Zeitkomplexität, O(n^2) quadratische Zeitkomplexität oder O(2^n) exponentielle Zeitkomplexität. Diese Klassifizierung zeigt die Wirksamkeit des Algorithmus und die Größe der Eingabedaten sowie die erwartete Fertigstellungszeit können bei der Auswahl eines Algorithmus berücksichtigt werden.

Die chinesische Übersetzung von

Beispiel-1

lautet:

Beispiel-1

Der folgende Code zeigt eine Demonstration des linearen Suchalgorithmus, der eine lineare Zeitkomplexität von O(n) aufweist. Dieser Algorithmus führt eine systematische Prüfung der Elemente in einem Array durch, um festzustellen, ob sie mit einem angegebenen Suchelement übereinstimmen. Sobald die Funktion gefunden wurde, gibt sie den Index des Elements zurück. Andernfalls wird -1 zurückgegeben, was darauf hinweist, dass sich das Element nicht im Array befindet. Die Hauptfunktion beginnt mit der Initialisierung des Arrays und der Suche nach Elementen, ruft die linearSearch-Funktion auf und rendert schließlich die Ergebnisse.

<int>#include <iostream>
#include <vector>
#include <algorithm>
// Linear search function with linear time complexity O(n)
int linearSearch(const std::vector<int>& arr, int x) {
    for (size_t i = 0; i < arr.size(); i++) {
        if (arr[i] == x) {
            return static_cast<int>(i);
        }
    }
    return -1;
}
int main() {
    std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int search_element = 5;
    int result = linearSearch(arr, search_element);
    if (result != -1) {
        std::cout << "Element found at index: " << result << std::endl;
    } else {
        std::cout << "Element not found in the array." << std::endl;
    }
    return 0;
}
</int>
Nach dem Login kopieren

Ausgabe

Element found at index: 4
Nach dem Login kopieren
Nach dem Login kopieren

Methode 2: Klassifizieren Sie Algorithmen basierend auf Designtechniken.

  • Kenntnisse zum Entwurf von Analysealgorithmen.

  • Klassifizieren Sie Algorithmen in eine der folgenden Kategorien: −

    • Brute-Force-Algorithmus

    • Divide-and-Conquer-Algorithmus

    • Gieriger Algorithmus

    • Dynamischer Programmieralgorithmus

    • Backtracking-Algorithmus

Die chinesische Übersetzung von

Beispiel-2

lautet:

Beispiel-2

Das folgende Programm zeigt die Implementierung des binären Suchalgorithmus, der die Divide-and-Conquer-Strategie nutzt und eine logarithmische Zeitkomplexität O(log n) aufweist. Der Algorithmus teilt das Array wiederholt in zwei Teile und überprüft das mittlere Element. Ist dieses Zwischenelement gleich dem gesuchten Suchelement, wird der Index sofort zurückgegeben. Wenn das mittlere Element das Suchelement überschreitet, wird die Suche in der linken Hälfte des Arrays fortgesetzt. Wenn das mittlere Element kleiner ist, wird die Suche in der rechten Hälfte des Arrays fortgesetzt. Die Hauptfunktion initialisiert das Array und sucht nach Elementen, ordnet das Array durch Sortieren an, ruft die Funktion „binarySearch“ auf und präsentiert schließlich die Ergebnisse.

#include <iostream>
#include <vector>
#include <algorithm>

// Binary search function using divide and conquer technique with logarithmic time complexity O(log n)
int binarySearch(const std::vector<int>& arr, int left, int right, int x) {
   if (right >= left) {
      int mid = left + (right - left) / 2;

      if (arr[mid] == x) {
         return mid;
      }

      if (arr[mid] > x) {
         return binarySearch(arr, left, mid - 1, x);
      }

      return binarySearch(arr, mid + 1, right, x);
   }
   return -1;
}

int main() {
   std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
   int search_element = 5;

   // The binary search algorithm assumes that the array is sorted.
   std::sort(arr.begin(), arr.end());

   int result = binarySearch(arr, 0, static_cast<int>(arr.size()) - 1, search_element);

   if (result != -1) {
      std::cout << "Element found at index: " << result <<std::endl;
   } else {
      std::cout << "Element not found in the array." << std::endl;
   }
   return 0;
}
Nach dem Login kopieren

Ausgabe

Element found at index: 4
Nach dem Login kopieren
Nach dem Login kopieren

Fazit

In diesem Artikel werden also zwei Methoden zur Klassifizierung von Algorithmen diskutiert – basierend auf ihrer zeitlichen Komplexität und basierend auf ihren Entwurfsmethoden. Als Beispiele haben wir einen linearen Suchalgorithmus und einen binären Suchalgorithmus eingeführt, die beide in C++ implementiert sind. Der lineare Suchalgorithmus verwendet eine Brute-Force-Methode und hat eine lineare Zeitkomplexität von O(n), während der binäre Suchalgorithmus die Divide-and-Conquer-Methode verwendet und eine logarithmische Zeitkomplexität von O(log n) aufweist. Ein gründliches Verständnis der verschiedenen Klassifizierungen von Algorithmen hilft bei der Auswahl des besten Algorithmus für eine bestimmte Aufgabe und der Verbesserung des Codes zur Verbesserung der Leistung.

Das obige ist der detaillierte Inhalt vonAlgorithmenklassifizierung und Beispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage