Heim > Backend-Entwicklung > C++ > Suche vorwärts und rückwärts im unsortierten Array

Suche vorwärts und rückwärts im unsortierten Array

WBOY
Freigeben: 2023-09-06 23:45:05
nach vorne
797 Leute haben es durchsucht

Suche vorwärts und rückwärts im unsortierten Array

Unsortiertes Array – Ein Array ist eine Datenstruktur, die aus einer Sammlung von Elementen desselben Typs besteht. Ein unsortiertes Array ist eine Struktur, in der die Reihenfolge der Elemente zufällig ist, d. h. beim Einfügen wird das Element unabhängig von der Reihenfolge der vorherigen Elemente zum letzten Element hinzugefügt und die Suche in einem solchen Array leidet nicht unter der Hilfe von Suchalgorithmen Fehlen eines Musters für die Elementpositionierung.

Suchen – Suchen in einem Array bedeutet, nach einem bestimmten Element im Array zu suchen, das die Position des gewünschten Elements oder eine Bool-Anweisung zurückgeben kann, die angibt, ob das Element im Array vorhanden ist oder nicht.

  • Vorwärtssuche – Die Vorwärtssuche in einem Array bedeutet, dass eine lineare Suchdurchquerung des Arrays beginnend mit dem 0. Index (d. h. dem ersten Element) durchgeführt wird.

  • Umgekehrte Suche – Das Durchsuchen eines Arrays in umgekehrter Reihenfolge bedeutet, dass das Array ausgehend vom (n-1)-ten Index (d. h. dem letzten Element) linear durchsucht wird.

Problemstellung

Stellen Sie bei einem gegebenen Suchelement x fest, ob x im folgenden Fall existiert -

  • Arrays mit Elementen gleicher Größe, Arrays aus ganzen Zahlen.

  • Arrays mit Elementen unterschiedlicher Größe, Arrays aus Strings.

Beispiel 1

Input: x = 4, [6, 1, 4, 10, 2]
Nach dem Login kopieren
Output: TRUE
Nach dem Login kopieren

Erklärung – Im angegebenen Array erscheint 4 am zweiten Index.

Beispiel 2

Input: x = “high”, [“goat”, “ice”, “hgh”]
Nach dem Login kopieren
Output: False
Nach dem Login kopieren

Erläuterung – Im angegebenen Array existiert „high“ nicht.

Lösung

Wie oben erwähnt, beginnt die Vorwärtssuche beim ersten Element und die Rückwärtssuche beim letzten Element. Durch die Kombination dieser beiden Methoden kann die Zeit für die Suche nach einem Element im Array um das Doppelte reduziert werden, da die erste und zweite Hälfte des Arrays gleichzeitig überprüft werden.

Um herauszufinden, ob ein Element in einem Array vorkommt, definieren Sie „first“ und „last“ als erstes und letztes Element des Arrays. Gibt „true“ zurück, wenn entweder das erste oder das letzte Element das erforderliche Element ist. Andernfalls wird das erste Element um 1 erhöht, das letzte Element um 1 verringert und so lange fortgesetzt, bis das Element gefunden wird. Wenn „first“ und „last“ nach Abschluss des Durchlaufs gleich sind, wird „false“ zurückgegeben, wenn das Element nicht gefunden wird.

Pseudocode

procedure frontBack (arr[], x)
   first = 0
   last = n - 1
   while first <= last
      If arr[first] == x or arr[last] == x
         ans = true
       end if
      front = front + 1
      last = last - 1
   ans = false
end procedure
Nach dem Login kopieren

Beispiel: C++-Implementierung

Im folgenden Programm nehmen wir den ersten Fall eines Arrays von Ganzzahlen. Rufen Sie die erste und die nächste Variable ab, während Sie das erste und das letzte Element überprüfen, um das erforderliche Element zu finden. Wenn das Element gefunden wird, geben Sie „true“ zurück, andernfalls gehen Sie zum nächsten Element und überprüfen Sie es erneut.

#include <bits/stdc++.h>
using namespace std;
// Function to front back search an element in the array
bool frontBack(int arr[], int x){
   int first = 0, last = 9;
   
   // loop execute till the element is found or traversal completes
   while (first <= last){
      if (arr[first] == x || arr[last] == x){
         return true;
      }
      first++;  // Incrementing first
      last--;  // Decrementing last
   }
   return false;
}
int main(){
   int arr[10] = {21, 43, 10, 19, 3, 56, 91, 20, 5, 79};
   int x = 55;
   cout << "In the array : ";
   for (int i = 0; i < 10; i++){
      cout << arr[i] << " ";
   }
   cout << "\nElement " << x;
   if (frontBack(arr, x)){
      cout << " is present.";
   }
   else{
      cout << " is not present.";
   }
   return 0;
}
Nach dem Login kopieren

Ausgabe

In the array : 21 43 10 19 3 56 91 20 5 79 
Element 55 is not present.
Nach dem Login kopieren

Zeitliche Komplexität – O(n/2), da die Suche von beiden Seiten die Zeit halbiert.

Raumkomplexität – O(1)

Beispiel

Im folgenden Programm nehmen wir den zweiten Fall eines String-Arrays. Rufen Sie die erste und die nächste Variable ab, während Sie das erste und das letzte Element überprüfen, um das erforderliche Element zu finden. Wenn das Element gefunden wird, geben Sie „true“ zurück, andernfalls gehen Sie zum nächsten Element und überprüfen Sie es erneut.

#include <bits/stdc++.h>
using namespace std;
// Function to front back search an element in the array
bool frontBack(string arr[], string x){
   int first = 0, last = 9;
   
   // loop execute till the element is found or traversal completes
   while (first <= last)    {
      if (arr[first] == x || arr[last] == x)        {
         return true;
      }
      first++; // Incrementing first
      last--; // Decrementing last
   }
   return false;
}
int main(){
   string arr[4] = {"hi", "high", "goat", "goa"};
   string x = "goat";
   cout << "In the array : ";
   for (int i = 0; i < 4; i++) {
      cout << arr[i] << ", ";
   }
   cout << "\nElement " << x;
   if (frontBack(arr, x)) {
      cout << " is present.";
   }
   else {
      cout << " is not present.";
   }
   return 0;
}
Nach dem Login kopieren

Ausgabe

In the array : hi, high, goat, goa, 
Element goat is present.
Nach dem Login kopieren

Zeitliche Komplexität – O(n/2), da die Suche von beiden Seiten die Zeit halbiert.

Raumkomplexität – O(1)

Fazit

Zusammenfassend lässt sich sagen, dass die Vorwärts- und Rückwärtssuche eines Arrays der üblichen linearen Suche ähnelt, mit der Ausnahme, dass zwei Elemente gleichzeitig überprüft werden, wodurch der Zeitaufwand halbiert wird. Dadurch wird die zeitliche Komplexität der Suche in einem unsortierten Array im ungünstigsten Fall von O(n) auf O(n/2) transformiert.

Das obige ist der detaillierte Inhalt vonSuche vorwärts und rückwärts im unsortierten Array. 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