logo

Definition, Typen, Komplexität und Beispiele von Algorithmen

Ein Algorithmus ist eine wohldefinierte sequentielle Rechentechnik, die einen Wert oder eine Sammlung von Werten als Eingabe akzeptiert und die zur Lösung eines Problems erforderlichen Ausgaben erzeugt.

Oder wir können sagen, dass ein Algorithmus genau dann als genau gilt, wenn er für jede Eingabeinstanz die richtige Ausgabe liefert.



NOTWENDIGKEIT DER ALGORITHMEN:

Algorithmen werden eingesetzt, um Probleme systematisch und effizient zu lösen oder Aufgaben zu automatisieren. Dabei handelt es sich um eine Reihe von Anweisungen oder Regeln, die den Computer oder die Software bei der Ausführung einer bestimmten Aufgabe oder der Lösung eines Problems unterstützen.

Algorithmus für die binäre Suche

Es gibt mehrere Gründe, warum wir Algorithmen verwenden:



    Effizienz: Algorithmen können Aufgaben schnell und genau ausführen, was sie zu einem unverzichtbaren Werkzeug für Aufgaben macht, die viele Berechnungen oder Datenverarbeitung erfordern. Konsistenz: Algorithmen sind wiederholbar und liefern bei jeder Ausführung konsistente Ergebnisse. Dies ist wichtig, wenn es um große Datenmengen oder komplexe Prozesse geht. Skalierbarkeit: Algorithmen können skaliert werden, um große Datensätze oder komplexe Probleme zu verarbeiten, was sie für Anwendungen nützlich macht, die die Verarbeitung großer Datenmengen erfordern. Automatisierung: Algorithmen können sich wiederholende Aufgaben automatisieren, wodurch der Bedarf an menschlichem Eingreifen verringert wird und Zeit für andere Aufgaben frei wird. Standardisierung: Algorithmen können standardisiert und von verschiedenen Teams oder Organisationen gemeinsam genutzt werden, was die Zusammenarbeit und den Wissensaustausch erleichtert.

Insgesamt sind Algorithmen ein wesentliches Werkzeug zur Lösung von Problemen in einer Vielzahl von Bereichen, darunter Informatik, Ingenieurwesen, Datenanalyse, Finanzen und viele andere.

Beispiel:

Stellen Sie sich eine Kiste vor, in der niemand sehen kann, was darin passiert, wir sagen eine Black Box.

Wir geben Eingaben in die Box ein und sie liefert uns die Ausgabe, die wir benötigen, aber das Verfahren, das wir möglicherweise hinter der Umwandlung der Eingabe in die gewünschte Ausgabe kennen müssen, ist ein ALGORITHMUS.



Ein Algorithmus ist unabhängig von der verwendeten Sprache. Es teilt dem Programmierer die Logik mit, die zur Lösung des Problems verwendet wird. Es handelt sich also um ein logisches Schritt-für-Schritt-Verfahren, das Programmierern als Blaupause dient.

Beispiele aus der Praxis, die den Einsatz von Algorithmen definieren:

  • Betrachten Sie eine Uhr. Wir wissen, dass die Uhr tickt, aber wie stellt der Hersteller diese Schrauben und Muttern so ein, dass sie sich alle 60 Sekunden weiterbewegt, der Min-Zeiger sollte sich bewegen und alle 60 Minuten sollte sich der Stundenzeiger bewegen? Um dieses Problem zu lösen, muss ein Algorithmus dahinter stehen.
  • Haben Sie jemanden gesehen, der Ihr Lieblingsessen für Sie gekocht hat? Ist das Rezept dafür nötig? Ja, das ist notwendig, da es sich bei einem Rezept um einen sequenziellen Vorgang handelt, der eine rohe Kartoffel in eine kühle Kartoffel verwandelt. Das ist es, was ein Algorithmus ausmacht: einer Prozedur folgen, um die gewünschte Ausgabe zu erhalten. Muss die Reihenfolge eingehalten werden? Ja, die Reihenfolge ist das Wichtigste, was wir einhalten müssen, um das zu bekommen, was wir wollen.

Arten von Algorithmen:

  • Sortieralgorithmen: Blasensortierung, Einfügungssortierung und vieles mehr. Diese Algorithmen werden verwendet, um die Daten in einem bestimmten Format zu sortieren.
  • Suchalgorithmen: Lineare Suche, binäre Suche usw. Diese Algorithmen werden verwendet, um einen Wert oder Datensatz zu finden, den der Benutzer benötigt.
  • Graphalgorithmen : Es wird verwendet, um Lösungen für Probleme wie die Suche nach dem kürzesten Weg zwischen Städten und für reale Probleme wie Probleme mit Handlungsreisenden zu finden.

Sortieralgorithmen sind Algorithmen, die eine Sammlung von Elementen nehmen und diese in einer bestimmten Reihenfolge (z. B. aufsteigend oder absteigend) neu anordnen. Es gibt viele verschiedene Sortieralgorithmen, jeder mit seinen eigenen Stärken und Schwächen. Zu den am häufigsten verwendeten Sortieralgorithmen gehören:

Blasensortierung: Ein einfacher Sortieralgorithmus, der die Liste wiederholt durchläuft, benachbarte Elemente vergleicht und sie vertauscht, wenn sie in der falschen Reihenfolge sind.

Sortieren durch Einfügen: Ein einfacher Sortieralgorithmus, der das endgültige sortierte Array Element für Element aufbaut, indem er jedes neue Element mit den bereits sortierten Elementen vergleicht und es an der richtigen Position einfügt.

Auswahlsortierung: Ein einfacher Sortieralgorithmus, der wiederholt das kleinste Element aus dem unsortierten Teil des Arrays auswählt und es an das Ende des sortierten Teils verschiebt.

Zusammenführen, sortieren: Ein Divide-and-Conquer-Sortieralgorithmus, der die unsortierte Liste in n Unterlisten aufteilt, jede Unterliste sortiert und sie dann wieder zu einer einzigen sortierten Liste zusammenführt.

Schnelle Sorte: Ein Divide-and-Conquer-Sortieralgorithmus, der so funktioniert, dass er ein Pivot-Element aus dem Array auswählt und die anderen Elemente in zwei Unterarrays aufteilt, je nachdem, ob sie kleiner oder größer als der Pivot sind. Die Unterarrays werden dann rekursiv sortiert.

Jeder dieser Algorithmen weist unterschiedliche zeitliche und räumliche Komplexitäten auf, sodass einige für bestimmte Anwendungsfälle besser geeignet sind als andere.

Suchalgorithmen sind Algorithmen, die nach einem bestimmten Element oder Wert in einer Datenstruktur (z. B. einem Array oder einer verknüpften Liste) suchen. Zu den am häufigsten verwendeten Suchalgorithmen gehören:

Lineare Suche: Ein einfacher Suchalgorithmus, der jedes Element einer Liste durchläuft, bis eine Übereinstimmung gefunden wird.

Binäre Suche: Ein Suchalgorithmus, der eine sortierte Liste wiederholt in zwei Hälften teilt, bis das gewünschte Element gefunden wird oder festgestellt werden kann, dass das Element nicht vorhanden ist.

Sprungsuche: Ein Suchalgorithmus, der so funktioniert, dass er in der Liste in festen Schritten vorwärts springt, bis ein geeigneter Kandidat gefunden wird, und dann eine lineare Suche in den umgebenden Elementen durchführt.

Interpolationssuche : Ein Suchalgorithmus, der mithilfe von Informationen über den Wertebereich in der Liste die Position des gewünschten Elements schätzt und dann überprüft, ob es tatsächlich vorhanden ist.

Hash-Tabellensuche: Ein Suchalgorithmus, der eine Hash-Funktion verwendet, um Elemente Indizes in einem Array zuzuordnen, und dann zeitkonstante Suchvorgänge im Array durchführt, um das gewünschte Element zu finden.

Shilpa Shetty Alter

Jeder dieser Algorithmen weist unterschiedliche zeitliche und räumliche Komplexitäten auf, sodass einige für bestimmte Anwendungsfälle besser geeignet sind als andere. Die Wahl des zu verwendenden Algorithmus hängt von den spezifischen Anforderungen des Problems ab, beispielsweise der Größe der Datenstruktur, der Werteverteilung und der gewünschten Zeitkomplexität.

Graphalgorithmen sind eine Reihe von Algorithmen, die zum Verarbeiten, Analysieren und Verstehen von Graphdatenstrukturen verwendet werden. Diagramme sind mathematische Strukturen, die zur Modellierung von Beziehungen zwischen Objekten verwendet werden, wobei die Objekte als Eckpunkte (oder Knoten) und die Beziehungen zwischen ihnen als Kanten dargestellt werden. Graphalgorithmen werden in einer Vielzahl von Anwendungen eingesetzt, beispielsweise in der Netzwerkanalyse, der Analyse sozialer Netzwerke, Empfehlungssystemen und in vielen anderen Bereichen, in denen es wichtig ist, die Beziehungen zwischen Objekten zu verstehen. Zu den gängigen Diagrammalgorithmen gehören:

Algorithmen für den kürzesten Weg (z. B. Dijkstra's, Bellman-Ford, A*)
Minimale Spanning Tree-Algorithmen (z. B. Kruskal, Prim)
Maximum-Flow-Algorithmen (z. B. Ford-Fulkerson, Edmonds-Karp)
Netzwerkfluss-Algorithmen (z. B. Bipartite Matching)
Konnektivitätsalgorithmen (z. B. Tiefensuche, Breitensuche)

Warum nutzen wir Algorithmen?

Stellen Sie sich zwei Kinder vor, Aman und Rohan, die den Zauberwürfel lösen. Aman weiß, wie man es in einer bestimmten Anzahl von Schritten löst. Andererseits weiß Rohan, dass er es tun wird, ist sich aber der Vorgehensweise nicht bewusst. Aman löst den Würfel innerhalb von 2 Minuten, während Rohan immer noch nicht weiterkommt und es am Ende des Tages irgendwie geschafft hat, ihn zu lösen (vielleicht hat er geschummelt, da das Verfahren notwendig ist).

Daher ist die zum Lösen mit einer Prozedur/einem Algorithmus benötigte Zeit viel effektiver als die ohne Prozedur. Daher ist die Notwendigkeit eines Algorithmus ein Muss.

Wenn es darum geht, eine Lösung für ein IT-Problem zu entwerfen, sind Computer schnell, aber nicht unendlich schnell. Der Speicher ist zwar günstig, aber nicht kostenlos. Rechenzeit ist also eine begrenzte Ressource, ebenso wie der Speicherplatz. Wir sollten diese Ressourcen also mit Bedacht nutzen und zeitlich und räumlich effiziente Algorithmen werden Ihnen dabei helfen.

Erstellen eines Algorithmus:

Da der Algorithmus sprachunabhängig ist, schreiben wir die Schritte, um die Logik hinter der Lösung zu demonstrieren, die zur Lösung eines Problems verwendet werden soll. Beachten Sie jedoch die folgenden Punkte, bevor Sie einen Algorithmus schreiben:

  • Der Algorithmus sollte klar und eindeutig sein.
  • Ein Algorithmus sollte 0 oder mehr wohldefinierte Eingaben enthalten.
  • Ein Algorithmus muss eine oder mehrere wohldefinierte Ausgaben erzeugen, die der gewünschten Ausgabe entsprechen. Nach einer bestimmten Anzahl von Schritten müssen Algorithmen zum Stillstand kommen.
  • Algorithmen muss nach einer endlichen Anzahl von Schritten anhalten oder enden.
  • In einem Algorithmus sollten Schritt-für-Schritt-Anweisungen bereitgestellt werden, die unabhängig von Computercode sein sollten.

Beispiel: Algorithmus zum Multiplizieren von zwei Zahlen und Drucken des Ergebnisses:

Schritt 1: Start
Schritt 2: Holen Sie sich das Wissen über Eingaben. Hier benötigen wir 3 Variablen; a und b sind die Benutzereingaben und c enthält das Ergebnis.
Schritt 3: Deklarieren Sie a-, b- und c-Variablen.
Schritt 4: Nehmen Sie Eingaben für die Variablen a und b vom Benutzer entgegen.
Schritt 5: Kennen Sie das Problem und finden Sie die Lösung mithilfe von Operatoren, Datenstrukturen und Logik

Wir müssen die Variablen a und b multiplizieren, also verwenden wir den Operator * und weisen das Ergebnis c zu.
Das ist c <- a * b

Schritt 6: Überprüfen Sie, wie die Ausgabe ausgegeben wird. Hier müssen wir die Ausgabe drucken. Schreiben Sie also print c
Schritt 7: Ende

Beispiel 1: Schreiben Sie einen Algorithmus, um das Maximum aller im Array vorhandenen Elemente zu ermitteln.
Folgen Sie dem Algorithmus-Ansatz wie folgt:

Schritt 1: Starten Sie das Programm
Schritt 2: Deklarieren Sie eine Variable max mit dem Wert des ersten Elements des Arrays.
Schritt 3: Vergleichen Sie max mit anderen Elementen mithilfe einer Schleife.
Schritt 4: Wenn max Schritt 5: Wenn kein Element übrig ist, kehren Sie zurück oder geben Sie max aus, andernfalls fahren Sie mit Schritt 3 fort.
Schritt 6: Ende der Lösung

Beispiel 2: Schreiben Sie einen Algorithmus, um den Durchschnitt von drei Probanden zu ermitteln.
Folgen Sie dem Algorithmus-Ansatz wie folgt:

Schritt 1: Starten Sie das Programm
Schritt 2: Sagen wir, 3 Betreff deklarieren und lesen S1, S2, S3
Schritt 3: Berechnen Sie die Summe aller drei Betreffwerte und speichern Sie das Ergebnis in der Variablen „Summe“. (Summe = S1+S2+S3)
Schritt 4: Teilen Sie die Summe durch 3 und weisen Sie sie der Variablen „Durchschnitt“ zu. (Durchschnitt = Summe/3)
Schritt 5: Drucken Sie den Wert von aus Durchschnitt aus 3 Fächern
Schritt 6: Ende der Lösung

Informieren Sie sich über die Komplexität von Algorithmen:

Komplexität bezieht sich in Algorithmen auf die Menge an Ressourcen (z. B. Zeit oder Speicher), die zur Lösung eines Problems oder zur Ausführung einer Aufgabe erforderlich sind. Das gebräuchlichste Maß für Komplexität ist die Zeitkomplexität, die sich auf die Zeit bezieht, die ein Algorithmus benötigt, um ein Ergebnis als Funktion der Größe der Eingabe zu liefern. Die Speicherkomplexität bezieht sich auf die Menge an Speicher, die von einem Algorithmus verwendet wird. Algorithmenentwickler streben danach, Algorithmen mit möglichst geringem Zeit- und Speicheraufwand zu entwickeln, da sie dadurch effizienter und skalierbarer sind.

Die Komplexität eines Algorithmus ist eine Funktion, die die Effizienz des Algorithmus im Hinblick auf die Datenmenge beschreibt, die der Algorithmus verarbeiten muss.

np std

Normalerweise gibt es natürliche Einheiten für den Bereich und den Bereich dieser Funktion.

Ein Algorithmus wird mithilfe von Zeitkomplexität und Raumkomplexität analysiert. Das Schreiben eines effizienten Algorithmus trägt dazu bei, die Verarbeitungszeit der Logik so gering wie möglich zu halten. Für Algorithmus A wird er anhand von zwei Parametern für eine Eingabe der Größe n beurteilt:

  • Zeitkomplexität: Zeit, die der Algorithmus benötigt, um das Problem zu lösen. Sie wird durch Berechnung der Iteration von Schleifen, der Anzahl der Vergleiche usw. gemessen.
  • Zeitkomplexität ist eine Funktion, die die Zeit beschreibt, die ein Algorithmus im Hinblick auf die Menge der Eingaben in den Algorithmus benötigt.
  • Zeit kann die Anzahl der durchgeführten Speicherzugriffe, die Anzahl der Vergleiche zwischen ganzen Zahlen, die Anzahl der Ausführungen einer inneren Schleife oder eine andere natürliche Einheit bedeuten, die sich auf die Echtzeitmenge bezieht, die der Algorithmus benötigt.
  • Raumkomplexität: Der vom Algorithmus zur Lösung des Problems benötigte Platz. Es umfasst den von den erforderlichen Eingabevariablen verwendeten Speicherplatz und den zusätzlichen Speicherplatz (mit Ausnahme des von den Eingaben belegten Speicherplatzes), der vom Algorithmus verwendet wird. Wenn wir beispielsweise eine Hash-Tabelle (eine Art Datenstruktur) verwenden, benötigen wir ein Array, um Werte zu speichern
  • Dies ist ein zusätzlicher belegter Platz und wird daher zur Platzkomplexität des Algorithmus gezählt. Dieser zusätzliche Raum wird als Hilfsraum bezeichnet.
  • Die Raumkomplexität ist eine Funktion, die die Menge an Speicher (Platz) beschreibt, die ein Algorithmus im Hinblick auf die Menge der Eingaben in den Algorithmus benötigt.
  • Die räumliche Komplexität wird manchmal ignoriert, weil der benötigte Platz minimal und/oder offensichtlich ist, aber manchmal wird sie auch zu einem Zeitproblem.

.Die zeitliche Komplexität der Operationen:

  • Die Wahl der Datenstruktur sollte auf der zeitlichen Komplexität der auszuführenden Operationen basieren.
  • Die Zeitkomplexität wird dadurch definiert, wie oft es dauert, einen bestimmten Algorithmus basierend auf der Länge der Eingabe auszuführen.
  • Die Zeitkomplexität eines Algorithmus ist die Zeit, die für die Ausführung jeder Anweisung benötigt wird. Sie hängt stark von der Größe der verarbeiteten Daten ab.
  • Wenn Sie beispielsweise häufig Suchvorgänge durchführen müssen, sollten Sie einen binären Suchbaum verwenden.

.Die räumliche Komplexität der Operationen:

  • Die Wahl der Datenstruktur sollte auf der räumlichen Komplexität der auszuführenden Operationen basieren.
  • Die Menge an Speicher, die ein Programm für seine Ausführung benötigt, wird durch seine Platzkomplexität dargestellt.
  • Da ein Programm während der Ausführung Speicher benötigt, um Eingabedaten und Zeitwerte zu speichern, handelt es sich bei der Platzkomplexität um Hilfs- und Eingaberaum.
  • Wenn Sie beispielsweise viele Daten speichern müssen, sollten Sie ein Array verwenden.

Fälle in Komplexität:

Es gibt zwei häufig untersuchte Fälle von Komplexität in Algorithmen:

1.Best-Case-Komplexität: Das Best-Case-Szenario für einen Algorithmus ist das Szenario, in dem der Algorithmus die minimale Menge an Arbeit ausführt (z. B. nimmt die kürzeste Zeit in Anspruch, verbraucht am wenigsten Speicher usw.).

2. Worst-Case-Komplexität: Das Worst-Case-Szenario für einen Algorithmus ist das Szenario, in dem der Algorithmus die maximale Arbeitsmenge ausführt (z. B. am längsten dauert, am meisten Speicher verbraucht usw.).

Bei der Analyse der Komplexität eines Algorithmus ist es häufig aussagekräftiger, das Worst-Case-Szenario zu untersuchen, da dieses eine garantierte Obergrenze für die Leistung des Algorithmus vorgibt. Manchmal wird eine Best-Case-Szenarioanalyse durchgeführt, die jedoch im Allgemeinen weniger wichtig ist, da sie eine Untergrenze liefert, die oft trivial zu erreichen ist.

Vorteile von Algorithmen

  • Einfach zu verstehen: Da es sich um eine schrittweise Darstellung einer Lösung für ein gegebenes Problem handelt, ist es leicht zu verstehen.
  • Sprachunabhängig: Es ist von keiner Programmiersprache abhängig und kann daher von jedem leicht verstanden werden.
  • Debug / Fehlersuche: Jeder Schritt erfolgt unabhängig bzw. in einem Ablauf, sodass der Fehler leicht erkannt und behoben werden kann.
  • Unterprobleme: Es ist in einem Fluss geschrieben, sodass der Programmierer die Aufgaben nun aufteilen kann, was das Codieren erleichtert.

Nachteile von Algorithmen

  • Die Erstellung effizienter Algorithmen ist zeitaufwändig und erfordert gute logische Fähigkeiten.
  • Es ist unangenehm, Verzweigungen und Schleifen in Algorithmen anzuzeigen.