logo

Algorithmus in C-Sprache

Ein Algorithmus ist eine Abfolge von Anweisungen, die in einer vorgegebenen Reihenfolge ausgeführt werden, um ein Problem zu lösen oder eine Arbeit abzuschließen. Eine Funktion ist ein Codeblock, der von anderen Teilen des Programms aus aufgerufen und ausgeführt werden kann.

Eine Reihe von Anweisungen zur Lösung eines Problems oder zur Durchführung einer bestimmten Aktivität. In der Informatik werden Algorithmen für eine Vielzahl von Operationen verwendet, von grundlegender Mathematik bis hin zu komplexer Datenverarbeitung.

Einer der in C häufig verwendeten Algorithmen ist der Sortieralgorithmus. Ein Sortieralgorithmus ordnet eine Sammlung von Elementen in einer bestimmten Reihenfolge, beispielsweise numerisch oder alphabetisch.

Es gibt viele Sortieralgorithmen, jeder mit Vor- und Nachteilen. Die gebräuchlichsten Sortieralgorithmen in C sind Quicksort, Merge und Sort.

Eines der Hauptmerkmale von C ist die Zeigerunterstützung. Dies ermöglicht eine effiziente Manipulation von Datenstrukturen wie Arrays, Warteschlangen usw. Dadurch eignet es sich für die Implementierung von Algorithmen, die eine komplexe Datenmanipulation erfordern, wie etwa Sortieren und algorithmische Suche.

Eines der bekanntesten Beispiele für in C implementierte Softwarebibliotheken ist die Standard Template Library (STL). Diese Bibliothek bietet eine Vielzahl von Algorithmen für Aufgaben wie das Sortieren, Suchen und Bearbeiten von Datenstrukturen.

Merkmale des Algorithmus

Es definiert mehrere wichtige Merkmale des Algorithmus, darunter:

    Eingaben: Algorithmen müssen Eingaben erhalten, die als Werte oder Daten dargestellt werden können.Ausgabe: Der Algorithmus sollte eine Ausgabe erzeugen. Es kann die Folge eines Problems oder einer Lösung sein, die darauf abzielt, es zu lösen.Klarheit: Algorithmen müssen präzise definiert sein und eindeutige Anweisungen verwenden, denen ein Computer oder ein anderes System eindeutig folgen kann.Endlichkeit: Der Algorithmus erfordert eine begrenzte Anzahl von Schritten. Das bedeutet, dass es nach der Ausführung einer bestimmten Anzahl von Befehlen beendet werden sollte.Gültigkeit: Der Algorithmus muss gültig sein. Mit anderen Worten: Es sollte in der Lage sein, in angemessener Zeit eine Lösung für das Problem zu finden, das der Algorithmus lösen soll.Wirksamkeit:Ein Algorithmus muss effektiv sein, das heißt, er muss in der Lage sein, in angemessener Zeit eine Lösung für das Problem zu finden, das er lösen soll.Allgemeinheit:Ein Algorithmus muss allgemein sein, das heißt, er kann auf eine Vielzahl von Problemen angewendet werden, anstatt spezifisch für ein einzelnes Problem zu sein.

Algorithmusanalyse

Unter algorithmischer Analyse versteht man den Prozess der Bewertung der Algorithmusleistung im Hinblick auf Effizienz, Komplexität und andere Kriterien. Typischerweise wird dies durchgeführt, um viele Algorithmen zu bewerten und die optimale Lösung für ein bestimmtes Problem oder eine Software auszuwählen.

Bei der Analyse von Algorithmen wird üblicherweise deren zeitliche und räumliche Komplexität gemessen.

Wie die Raumkomplexität, die die Menge an benötigtem Arbeitsspeicher oder Festplattenspeicher beschreibt, beschreibt die Zeitkomplexität, wie lange ein Algorithmus für die Ausführung einer Aufgabe benötigt.

Es gibt verschiedene Möglichkeiten, die zeitliche Komplexität von Algorithmen zu analysieren, beispielsweise die Big-O- und Omega-Notation. Das Omega-Symbol stellt eine Obergrenze für die Zeitkomplexität des Algorithmus dar, während das Omega-Symbol eine Untergrenze darstellt.

Neben der Messung der zeitlichen und räumlichen Komplexität umfasst die Algorithmenanalyse auch andere Kriterien wie Stabilität, Parallelität und Skalierbarkeit.

    Stabilität:- Dies bezieht sich auf die Fähigkeit des Algorithmus, die relative Reihenfolge der Elemente im Datensatz beizubehalten.Parallelisierung:- Damit ist die Fähigkeit gemeint, Vorgänge auf mehreren Prozessoren parallel auszuführen.Skalierbarkeit:- Andererseits bezieht es sich auf die Fähigkeit eines Algorithmus, große Datenmengen und andere Eingaben zu verarbeiten.

Sie umfassen zwei Arten von Analysen.

sie sind:-

  1. Vorherige Analyse.
  2. Posterior-Analyse.

Vorherige Analyse

Prior ist eine Methode der Algorithmusanalyse, die sich auf die Schätzung der Leistung eines Algorithmus basierend auf seinen mathematischen Eigenschaften konzentriert, ohne den Algorithmus tatsächlich auszuführen.

Mit diesem Ansatz können Sie die zeitliche und räumliche Komplexität von Algorithmen und anderen Metriken analysieren, ohne die Algorithmen implementieren und ausführen zu müssen.

Posterior-Analyse

Die Posterior-Analyse hingegen ist eine Methode der Algorithmusanalyse, die den Algorithmus tatsächlich ausführt und seine Leistung misst.

Dieser Ansatz liefert genauere und detailliertere Informationen über die Leistung des Algorithmus, erfordert jedoch die Implementierung und Ausführung des Algorithmus.

Komplexität des Algorithmus

Die algorithmische Komplexität ist ein Maß zur Messung der Effizienz und Leistung des Algorithmus. Algorithmen werden in der Regel im Hinblick auf den Zeit- und Raumbedarf bewertet, der zur Lösung eines Problems oder zum Erreichen eines bestimmten Ziels erforderlich ist.

Bei der Komplexität des Algorithmus spielen zwei Faktoren eine Rolle.

sie sind:-

  1. Zeitfaktor.
  2. Raumfaktor.

Zeitfaktor

  • Die Zeitmenge, die ein Algorithmus benötigt, um eine Aufgabe zu erledigen, wird als Zeitkomplexität bezeichnet. Sie wird normalerweise an der Anzahl der Operationen oder Schritte gemessen, die ein Algorithmus ausführen muss, um ein Problem zu lösen.
  • Die zeitliche Komplexität eines Algorithmus ist wichtig, da sie bestimmt, wie lange die Ausführung dauert, und einen erheblichen Einfluss auf die Programm- und Systemleistung haben kann.
  • Die Zeitkomplexität eines Algorithmus kann mithilfe der Big-O-Notation ausgedrückt werden, einer Möglichkeit, eine Obergrenze für die Zeitkomplexität eines Algorithmus auszudrücken.
  • Ein Algorithmus mit der Zeitkomplexität O(n) bedeutet, dass die zum Ausführen des Algorithmus erforderliche Zeit direkt proportional zur Größe der Eingabedaten (n) ist.
  • Andere häufige Zeitkomplexitäten sind die quadratische Komplexität O(n^2) und die logarithmische Komplexität O(log n).

Raumanalyse

  • Andererseits bezieht sich die Platzkomplexität auf die Menge an Speicher oder Speicherplatz, die zur Ausführung des Algorithmus erforderlich ist.
  • Dies ist wichtig, da es die Anzahl der Ressourcen bestimmt, die zum Ausführen von Algorithmen erforderlich sind, die sich auf die Gesamtleistung Ihrer Anwendung oder Ihres Systems auswirken können.
  • Wenn die Raumkomplexität des Algorithmus O(n) ist, verwendet er eine Speichermenge, die linear mit der Größe der Eingabe wächst.
  • Wenn der Algorithmus eine O(1)-Raumkomplexität aufweist, verwendet er unabhängig von der Größe der Eingabe eine feste Menge an Speicher.

Wie schreibe ich einen Algorithmus?

1. Definieren Sie zunächst das Problem, das der Algorithmus lösen soll.

Angenommen, wir möchten einen Algorithmus schreiben, um den Maximalwert aus einer Liste von Zahlen zu ermitteln.

2. Teilen Sie das Problem in kleinere, überschaubare Schritte auf.

  • Initialisieren Sie die Variable „max“ auf den ersten Wert in der Liste.
  • Vergleichen Sie jeden weiteren Wert in der Liste mit „max“.
  • Wenn der Wert größer als „max“ ist, setzen Sie „max“ auf diesen Wert.
  • Machen Sie so weiter, bis alle Werte in der Liste verglichen wurden.
  • Gibt den endgültigen „Max“-Wert zurück.

3. Schreiben Sie Ihren Algorithmus in Pseudocode oder einer Programmiersprache.

In Pseudocode geschriebener Algorithmus:

 MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end 

4. Testen Sie Ihren Algorithmus, um sicherzustellen, dass er korrekt und effizient ist.

Sie können den Algorithmus testen, indem Sie verschiedene Zahlenlisten eingeben und überprüfen, ob er den maximalen korrekten Wert zurückgibt. Sie können auch die zeitliche Komplexität Ihres Algorithmus analysieren, um zu bestimmen, wie gut er für größere Eingaben skaliert.

Beispiel:-

Eingabe: [1, 5, 2, 7, 3]

Ausgabe: 7.

Erläuterung: 7 ist der Maximalwert in der Liste.

5. Optimieren Sie den Algorithmus.

Suchen Sie nach Möglichkeiten, Algorithmen zu optimieren, um sie schneller und effizienter zu machen. Dies kann die Änderung des Pseudocodes oder die Implementierung effizienterer Datenstrukturen oder Algorithmen umfassen.

Grundlegendes Schreiben von Algorithmen

Beispiel: – Die Summe zweier Ganzzahlen.

Schritt 1 - Loslegen

Schritt 2 - Deklarieren Sie drei ganze Zahlen a, b, c

Schritt 3 - Definieren Sie die Werte von a und b

Schritt 4 - Addieren Sie die Werte von a und b

Schritt 5 - Speichern Sie die Ausgabe von Schritt 4 in c

Schritt 6 - Drucken c

Schritt 7 - Stoppen

Art der in der C-Sprache verwendeten Algorithmen.

1. Sortieralgorithmen

C bietet einen umfangreichen Satz an Datentypen und Operatoren, mit denen verschiedene Sortieralgorithmen wie Blasensortierung, Einfügungssortierung und Schnellsortierung implementiert werden können.

Diese Algorithmen sind in vielen Anwendungen nützlich, da sie zum Sortieren von Daten unterschiedlicher Größe und Art verwendet werden können.

Es gibt verschiedene Sortieralgorithmen.

sie sind:-

(i) Blasensortierung: Ein unkomplizierter Sortieralgorithmus, der benachbarte Komponenten wiederholt vergleicht und sie ausschaltet, wenn sie nicht in Ordnung sind.

Der Algorithmus für die Blasensortierung lautet:

  1. Beginnen Sie mit einer unsortierten Liste von Elementen.
  2. Vergleichen Sie die ersten beiden Elemente in der Liste. Wenn das erste Element größer als das zweite Element ist, tauschen Sie sie aus.
  3. Fahren Sie mit dem nächsten Elementpaar fort und wiederholen Sie Schritt 2, bis das Ende der Liste erreicht ist.
  4. Wiederholen Sie für jedes Element in der Liste die Schritte 2 und 3 noch einmal. das nennt man Pässe.
  5. Wiederholen Sie die Schritte 2–4 für die gesamte Liste. Wenn Sie die Durchgänge wiederholen, „sprudeln“ die Elemente an ihre richtige Position in der sortierten Liste.
  6. Sobald ein Durchgang abgeschlossen ist und kein Austausch mehr erfolgt, wird die Liste sortiert und der Algorithmus kann angehalten werden.
  7. Die endgültige sortierte Liste wird zurückgegeben.

(ii) Einfügungssortierung : Eine Sortiermethode, die eine sortierte Liste nach einzelnen Elementen erstellt, indem jedes Element an der entsprechenden Stelle platziert wird.

Der Algorithmus für die Einfügungssortierung lautet:

  1. Initialisieren Sie eine leere sortierte Liste und eine unsortierte Liste der zu sortierenden Elemente.
  2. Das erste Mitglied aus der unsortierten Liste sollte genommen und an der entsprechenden Position in der sortierten Liste platziert werden.
  3. Wiederholen Sie Schritt 2 für jedes weitere Element in der unsortierten Liste.
  4. Vergleichen Sie das aktuelle Element mit den Elementen in der sortierten Liste, beginnend mit dem Element unmittelbar links.
  5. Vertauschen Sie die beiden Elemente, wenn das aktuelle Element kleiner ist als das Element links davon.
  6. Wenn das aktuelle Element größer ist als das Element links davon, fügen Sie es an der richtigen Position in der sortierten Liste ein.
  7. Wiederholen Sie die Schritte 4 bis 6 für jedes weitere Element in der unsortierten Liste.
  8. Sobald alle Elemente verarbeitet wurden, enthält die sortierte Liste alle Elemente in der richtigen Reihenfolge.
  9. Der Sortiervorgang ist abgeschlossen.

(iii) Auswahlsortierung : Eine Sortiermethode, bei der die sortierte Auflistung stets mit dem kleinsten Detail aus der ungeordneten Auflistung beginnt.

Der Algorithmus für die Auswahlsortierung lautet:

  1. Beginnen Sie damit, das primäre Element der Liste als min-Element festzulegen.
  2. Wiederholen Sie den Vorgang mit den übrigen Elementen in der Liste und vergleichen Sie jedes einzelne mit dem aktuellen Minimum.
  3. Legen Sie ein neues Minimum fest, wenn festgestellt wird, dass ein Element kleiner als das vorhandene ist.
  4. Ändern Sie das aktuelle Minimum auf das erste Element der Liste, wenn diese ihren Abschluss erreicht.
  5. Wiederholen Sie für den verbleibenden unsortierten Teil der Liste die Schritte 2 bis 4, beginnen Sie jedoch mit dem zweiten Element in der Liste (da das erste Element bereits sortiert ist).
  6. Sortieren Sie die Liste auf diese Weise weiter, bis alles sortiert ist.

(iv) Schnelle Sortierung : Ein Divide-and-Conquer-Sortieralgorithmus, der ein Pivotelement auswählt und die Liste in Unterlisten aufteilt, je nachdem, ob die Elemente kleiner oder größer als das Pivotelement sind. Danach werden die Unterlisten wiederholt sortiert, bis die vollständige Liste sortiert ist.

Der Algorithmus für die schnelle Sortierung lautet:

  1. Wählen Sie ein Pivot-Element aus der Liste. Dies ist normalerweise das erste Element, es kann aber auch ein zufälliges Element oder der Median der Liste sein.
  2. Teilen Sie die Liste in zwei Unterlisten auf: eine mit Elementen, die kleiner als der Pivot sind, und eine mit Elementen, die größer als der Pivot sind.
  3. Sortieren Sie die Unterliste, die Elemente enthält, die kleiner als der Pivot sind, mit demselben Verfahren rekursiv.
  4. Verwenden Sie dasselbe Verfahren, um die Unterliste der Einträge, die größer als der Pivot sind, rekursiv zu sortieren.
  5. Verketten Sie die sortierten Unterlisten mit dem Pivot-Element dazwischen, um eine vollständig sortierte Liste zu bilden.
  6. Gibt die vollständig sortierte Liste zurück.

(v) Lot geht : Der Divide-and-Conquer-Sortieralgorithmus teilt die Liste in zwei Hälften, sortiert jede Hälfte und führt dann die beiden Hälften in sortierter Reihenfolge zusammen.

Merge-Sort-Algorithmus:

  1. Erstellen Sie aus der Liste zwei Unterlisten: eine mit Elementen unterhalb des Pivots und eine mit Elementen über dem Pivot.
  2. Erstellt eine neue sortierte Unterliste durch iteratives Zusammenführen von Unterlisten, bis nur noch eine Unterliste vorhanden ist. Dies wird Ihre sortierte Liste sein.
  3. Schritte zum Zusammenführen zweier Unterverzeichnisse:-
  4. Erstellen Sie eine leere Liste für die sortierten Elemente.
  5. Vergleicht das erste Element jeder Unterliste.
  6. Fügt das kleinere Element zur neuen Liste hinzu und entfernt es aus der übergeordneten Unterliste.
  7. Wiederholen Sie die Schritte 2 und 3, bis eine Liste vollständig leer ist.
  8. Fügt die verbleibenden Elemente aus anderen Unterlisten zu einer neuen Liste hinzu.
  9. Ersetzt die zusammengeführte Unterliste durch die neue sortierte Liste.
  10. Wiederholen Sie diesen Vorgang, bis alle Unterlisten zu einer sortierten Liste zusammengefasst sind.

(vi) Heap-Sortierung : Ein Sortieralgorithmus, der Elemente mithilfe einer Datenstruktur namens Heap sortiert.

Dies ist der Klassifizierungsalgorithmus:

Vererbung in C++
    Erstellen Sie maximalen Heap: Beginnen Sie mit dem ersten Nicht-Blattknoten, vergleichen Sie jeden Knoten mit seinen untergeordneten Knoten und ersetzen Sie die Knoten durch die größten seiner untergeordneten Knoten, um die Max-Heap-Eigenschaft zu erfüllen.Wurzel mit letztem Element tauschen: Tauschen Sie die Wurzel (größtes Element) mit dem letzten Element im Stapel aus.
  1. Stapeln Sie die restlichen Elemente. Ausgehend von der Wurzel wird jeder Knoten mit seinen untergeordneten Knoten verglichen, wobei die Knoten mit ihren älteren untergeordneten Knoten ausgetauscht werden, bis die Max-Heap-Eigenschaft erfüllt ist.
  2. Wiederholen Sie die Schritte 2 und 3 mit den neu gestapelten Elementen, bis auf das letzte Element an der richtigen Position.
  3. Wiederholen Sie diesen Vorgang, bis nur noch ein Element im Stapel übrig ist. Das ist jetzt geklärt.
  4. Aufhäufen: Ausgehend vom Wurzelknoten werden Elemente mit ihren untergeordneten Elementen verglichen und mit dem größeren der beiden ausgetauscht, bis die Eigenschaft „Max Heap“ erfüllt ist.Aufhäufen: Beginnen Sie mit dem letzten Element im Heap, vergleichen Sie es mit seinem übergeordneten Element und tauschen Sie es mit dem übergeordneten Element aus, um die Max-Heap-Eigenschaft zu erfüllen.

(vii) Radix-Sortierung : Ein Sortieralgorithmus, der Elemente basierend auf den Ziffern oder Ziffern ihrer binären Darstellung sortiert.

Der Algorithmus für die Radix-Sortierung lautet:

  1. Bestimmen Sie, wie viele Ziffern das größte Element der Eingabeliste enthält.
  2. Initialisieren Sie eine Variable, beispielsweise eine Ziffernstelle, auf 1, was die aktuelle Ziffernstelle darstellt.
  3. Erstellen Sie eine leere Liste für jeden möglichen Ziffernwert von 0 bis 9.
  4. Durchlaufen Sie die Eingabeliste und fügen Sie jedes Element basierend auf dem Wert der aktuellen Ziffernstelle zur entsprechenden Liste hinzu.
  5. Verketten Sie alle Listen, um die neue Liste in der Reihenfolge der Ziffernlisten zu bilden.
  6. Multiplizieren Sie „digitPlace“ mit 10, um zur nächsten Ziffernstelle zu gelangen.
  7. Wiederholen Sie die Schritte 4-6 für jede Ziffernstelle, bis alle Ziffern im größten Element berücksichtigt wurden.
  8. Die endgültige Liste wird in aufsteigender Reihenfolge nach den Ziffern der Elemente sortiert.
  9. Gibt die endgültige sortierte Liste zurück.

2. Suchalgorithmen

C bietet außerdem die notwendigen Werkzeuge zur Implementierung verschiedener Suchalgorithmen, wie z. B. der linearen Suche und der binären Suche. Diese Algorithmen können bestimmte Elemente in einem Datensatz schnell finden und sind daher für eine Vielzahl von Anwendungen nützlich.

Es gibt viele Arten von Suchalgorithmen.

Sie sind:-

(i) Lineare Suche : Ein einfacher Suchalgorithmus, der jeden Artikel in der Auflistung einzeln untersucht, bis er den gewünschten Artikel findet.

Algorithmus für die lineare Suche:-

  1. Definieren Sie die Eingabe für den Algorithmus: Die Eingabe für einen linearen Suchalgorithmus ist eine Liste von Elementen (oder ein Array) und ein Zielelement, nach dem wir suchen.
  2. Initialisieren Sie eine Variable namens „index“ auf -1: Diese Variable wird verwendet, um den Index des Zielelements zu speichern, wenn es gefunden wird.
  3. Durchlaufen Sie die Liste der Elemente: Überprüfen Sie ausgehend vom ersten Element jedes Element in der Liste einzeln.
  4. Vergleichen Sie das aktuelle Element mit dem gewünschten Element zur Auswertung: Behalten Sie den Index des aktuellen Elements in der Indexvariablen bei und verlassen Sie die Schleife, wenn das moderne Element und das Zielelement identisch sind.
  5. Geben Sie den Index des Zielelements zurück: Geben Sie nach Abschluss der Schleife den in der Indexvariablen gespeicherten Wert zurück. Wenn das Zielelement nicht gefunden wird, beträgt der Indexwert -1.

(ii) Binäre Suche : Ein Suchalgorithmus, der die Auflistung in Hälften aufteilt und innerhalb dieser Hälften sucht, enthält mit größerer Wahrscheinlichkeit das Element.

Algorithmus für die binäre Suche: –

  1. Eingabe: Eine sortierte Liste von n Elementen und einem Zielelement x.
  2. Variablen initialisieren: Setzen Sie den niedrigen Index auf 0, den hohen Index auf n-1 und den mittleren auf (niedrig+hoch)/2.
  3. Starten Sie eine Schleife: Wiederholen Sie die folgenden Schritte, während der niedrige Index kleiner oder gleich dem hohen Index ist.
  4. Vergleichen Sie das mittlere Element mit x: Wenn das mittlere Element gleich x ist, geben Sie den mittleren Index zurück.
  5. Aktualisieren Sie den unteren oder oberen Index: Wenn x größer als das mittlere Element ist, legen Sie den unteren Index auf „Mitte + 1“ fest. Andernfalls legen Sie den hohen Index auf „Mitte – 1“ fest.
  6. Aktualisieren Sie den Mittelindex: Mittel = (niedrig+hoch)/2.
  7. Ende der Schleife: Wenn der niedrige Index größer als der hohe Index ist, ist x nicht in der Liste und der Algorithmus gibt einen Fehler zurück.
  8. Ausgabe: Der Index von x in der Liste oder Fehlermeldung.

(iii) Tiefensuche : Ein Suchalgorithmus, der jeden Zweig so weit wie möglich untersucht, bevor er umkehrt.

Für die Tiefensuche gelten folgende Richtlinien:

  1. Wählen Sie den Startscheitelpunkt oder -knoten des Diagramms aus, mit dem Sie beginnen möchten.
  2. Fügen Sie dem ersten Scheitelpunkt eine Besuchsmarkierung hinzu.
  3. Platzieren Sie den Anfangsscheitelpunkt direkt in einem Stapel.
  4. Wiederholen Sie die folgenden Aktionen, bis der Stapel leer ist: -
    • Entfernen Sie den oberen Scheitelpunkt des Stapels.
    • Markieren Sie jeden nicht besuchten Nachbarn des entfernten Scheitelpunkts als besucht und fügen Sie ihn in den Stapel ein.
  5. Setzen Sie diesen Vorgang fort, bis alle Eckpunkte im Diagramm besucht wurden.
  6. Sobald alle Eckpunkte besucht wurden, ist der Algorithmus abgeschlossen und es wird eine Tiefensuche im Diagramm durchgeführt.

(iv) Breitensuche : Ein Suchalgorithmus, der alle Nachbarn eines Knotens untersucht, bevor er zur nächsten Ebene übergeht.

Der Algorithmus für die Breitensuche ist:

  1. Beginnen Sie mit dem Wurzelknoten oder dem Ausgangszustand.
  2. Fügen Sie den Stammknoten einer Warteschlange hinzu.
  3. Überprüfen Sie, ob die Warteschlange leer ist. Wenn ja, beenden Sie den Algorithmus.
  4. Nehmen Sie das erste Element aus der Warteschlange und markieren Sie es als besucht.
  5. Erweitern Sie den aktuellen Knoten, indem Sie alle seine nicht besuchten Nachbarn zur Warteschlange hinzufügen.
  6. Wiederholen Sie die Schritte 3 bis 5, bis der gewünschte Knoten gefunden wird oder die Warteschlange leer ist.
  7. Gibt den Pfad vom vorläufigen Zustand zum Zielzustand zurück, wenn der Zielknoten gefunden wird.
  8. Beenden Sie den Regelsatz und melden Sie, dass der Zielstatus nicht identifiziert wurde, wenn die Warteschlange leer ist.

(v) Interpolationssuche : Ein Suchalgorithmus, der die Werte der gesuchten Elemente verwendet, um die Position im Index zu schätzen.

Es ist wichtig, dass das Array gleichmäßig verteilt ist. Ansonsten handelt es sich um einen Algorithmus.

Es funktioniert wie erwartet.

Der Algorithmus lässt sich wie folgt zusammenfassen.

  1. Rufen Sie die Eingabeliste und den Schlüsselwert für die Suche ab.
  2. Initialisieren Sie die unteren und oberen Variablen am ersten und letzten Index der Liste.
  3. Wenn der untere Wert kleiner oder gleich dem höheren Wert ist, dann:-
    1. Berechnen Sie den geschätzten Standort mithilfe der folgenden Formel:
      pos = niedrig + ((hoch - niedrig) / (arr[hoch] - arr[niedrig])) * (x - arr[niedrig]).
    2. Gibt die Position zurück, wenn der geschätzte Positionswert ein Schlüsselwert ist.
    3. c) Wenn der geschätzte Positionswert kleiner als der Schlüsselwert ist, stellen Sie ihn niedriger ein.
      Position + 1.
    4. d) Wenn der Wert der geschätzten Position größer ist als der mit der Taste eingestellte Wert, Position - 1 nach oben.
  4. Wenn der Schlüsselwert nicht gefunden wird, geben Sie -1 zurück, um anzuzeigen, dass der Wert nicht in der Liste enthalten ist.

(vi) Sprungsuche : Eine Suchmethode, die die Liste in Schritten konstanter Länge durchläuft, bis sie das relevante Element findet oder feststellt, dass es nicht mehr vorhanden ist.

Der Sprungsuchalgorithmus ist wie folgt:

  1. Stellen Sie zunächst die Sprunggröße auf die Quadratwurzel der Anzahl der Array-Elemente ein.
  2. Setzt eine Variable mit dem Namen „current“ auf das erste Element des Arrays.
  3. Iteriert über das Array, indem es um die Sprunggröße springt und dabei eine Variable namens „jump“ erhöht.
  4. Fahren Sie mit dem nächsten Schritt fort, wenn das vorhandene Element kleiner als das gewünschte Element ist.
  5. Wenn das aktuelle Element größer als das Zielelement ist, führen Sie eine lineare Suche zwischen dem aktuellen Element und dem vorherigen Sprungelement durch, um das Zielelement zu finden.
  6. Wenn das Zielelement nicht im Array gefunden wird, wird -1 zurückgegeben, um anzuzeigen, dass es nicht im Array vorhanden ist.
  7. Wenn das Element gefunden wird, wird der Index des Elements im Array zurückgegeben.

3. Graphalgorithmen

Durch die Unterstützung von Zeigern und Datenstrukturen wie Arrays und verknüpften Listen eignet sich C für die Implementierung von Algorithmen, die Diagramme manipulieren, beispielsweise für die Suche nach dem kürzesten Pfad zwischen zwei Knoten in einem Diagramm.

Es gibt verschiedene Arten von Graphalgorithmen.

sie sind:-

    Dijkstras Algorithmus: Ein Algorithmus, der den kürzesten Weg zwischen zwei Knoten in einem Diagramm findet, indem er kontinuierlich die kürzeste Entfernung von jedem Knoten aktualisiert.Algorithmus A*: Eine Methode, die kontinuierlich den kürzesten Kurs zu jedem Knoten in einem Diagramm aktualisiert, um die kürzeste Route zwischen ihnen zu bestimmen.Prims Algorithmus: Ein Ansatz zur Ermittlung des kleinsten Spannbaums des gewichteten verbundenen Graphen.Kruskals Algorithmus: Ein Ansatz zur Identifizierung des niedrigsten Spannbaums des verknüpften gewichteten Diagramms.Bellman-Ford-Algorithmus: Ein Algorithmus, der, selbst wenn das Diagramm negative Kantengewichte aufweist, den kürzesten Pfad zwischen einem bestimmten Versorgungsknoten und jedem anderen Knoten im Netzwerk anzeigt.

4. Kryptografische Algorithmen

C unterstützt Low-Level-Operationen und effiziente Datenmanipulation und eignet sich daher ideal für die Implementierung von Algorithmen, die in der Kryptographie verwendet werden, wie z. B. Datenverschlüsselungs- und -entschlüsselungsalgorithmen.

Es gibt verschiedene Arten von Verschlüsselungsalgorithmen.

Sie sind:-

    Hash-Algorithmen: Diese Algorithmen erzeugen Ausgaben fester Größe (Hash) aus Eingaben beliebiger Größe. Beispiele hierfür sind MD5, SHA-1 und SHA-2.Symmetrische Schlüsselalgorithmen: Die Verschlüsselungs- und Entschlüsselungsschritte in solchen Algorithmen verwenden denselben privaten Schlüssel. AES, DES und Blowfish sind einige Beispiele.Asymmetrische Schlüsselalgorithmen: Ein öffentlicher Schlüssel und ein nicht öffentlicher Schlüssel werden von diesen Methoden als separate Schlüssel für die Verschlüsselung und Entschlüsselung verwendet. Einige Beispiele sind RSA, ECC und DSA.Schlüsselaustauschalgorithmen: Diese Algorithmen ermöglichen es zwei Parteien, Schlüssel sicher über einen unsicheren Kanal auszutauschen. Beispielsweise können wir Diffie-Hellman und Elliptic Curve Diffie-Hellman erwähnen.

Vorteile des Algorithmus

Algorithmen haben viele Vorteile.

sie sind:-

    Geschwindigkeit und Effizienz: Algorithmen können große Datenmengen schnell und genau verarbeiten, was sie für Aufgaben nützlich macht, die zu zeitaufwändig oder fehleranfällig sind, als dass Menschen sie ausführen könnten.Konsistenz: Algorithmen folgen einer Reihe vorgegebener Richtlinien. Es kann zu konsistenten Ergebnissen führen, ohne von persönlichen Vorurteilen und Emotionen beeinflusst zu werden.Automatisierung: Algorithmen können Aufgaben automatisch ausführen, sodass sich Menschen auf komplexere oder kreativere Aufgaben konzentrieren können.Erhöhte Genauigkeit: Algorithmen können oft eine höhere Genauigkeit erreichen als Menschen, insbesondere beim Umgang mit großen Datenmengen.Bessere Entscheidungsfindung: Algorithmen helfen uns, fundiertere und objektivere Entscheidungen zu treffen, indem sie Daten analysieren und Muster und Trends identifizieren, die für Menschen nicht leicht sichtbar sind.Skalierbarkeit: Algorithmen können problemlos vergrößert oder verkleinert werden, um sich ändernden Anforderungen und Arbeitslasten gerecht zu werden.

Nachteile des Algorithmus

Algorithmen sind für die Programmierung sehr nützlich, haben aber auch Nachteile.

sie sind:-

    Begrenzter Fokus: Algorithmen können nur Probleme innerhalb ihres Anwendungsbereichs lösen und sind möglicherweise nicht in der Lage, komplexe oder abstrakte Probleme zu lösen.Voreingenommenheit: Algorithmen können Verzerrungen in den für das Training verwendeten Daten aufrechterhalten und verstärken, was zu unfairen Ergebnissen führt.Unzureichende Transparenz: Viele Algorithmen verbergen den Prozess, durch den sie zu ihren Schlussfolgerungen gelangen. Dies könnte es schwierig machen, über die Ergebnisse nachzudenken oder sie zu überprüfen.Vertrauen auf die Feinheit der Daten:Die Korrektheit des Regelwerks hängt stark von der Feinheit und Anwendbarkeit der im Unterricht verwendeten Daten ab. Ungenaue oder ungenaue Effekte können die Folge fehlerhafter Daten sein.zurückhaltende Anpassungsfähigkeit:Algorithmen sind so konzipiert, dass sie Richtlinien folgen und sich nicht an sich ändernde Umstände und Bedingungen anpassen.