Heim >Backend-Entwicklung >C++ >Zählen Sie die Anzahl der verschiedenen normalen Klammersequenzen, die keine N-Perioden haben

Zählen Sie die Anzahl der verschiedenen normalen Klammersequenzen, die keine N-Perioden haben

PHPz
PHPznach vorne
2023-08-30 23:49:131132Durchsuche

Zählen Sie die Anzahl der verschiedenen normalen Klammersequenzen, die keine N-Perioden haben

In diesem Artikel werden wir uns mit einem faszinierenden Problem aus dem Bereich der Kombinatorik und String-Verarbeitung befassen: „Zählen verschiedener regulärer Klammersequenzen, die nicht N-periodisch sind“. Herausfiltern von Sequenzen, die N-periodisch sind, werden wir das Problem besprechen, eine C++-Code-Implementierung eines Brute-Force-Ansatzes bereitstellen und einen Testfall erläutern.

Die Problemstellung verstehen

Bei einer gegebenen ganzen Zahl N besteht die Aufgabe darin, die Anzahl verschiedener regulärer Klammerfolgen der Länge 2N zu zählen, die keine N Perioden sind. Wenn eine Folge als M-mal wiederholte Folge S dargestellt werden kann, wobei die Länge von S N und M > 1 ist, dann ist die Folge N-periodisch.

Eine reguläre Klammersequenz ist eine Zeichenfolge, die in einen korrekten arithmetischen Ausdruck umgewandelt werden kann, indem zwischen den ursprünglichen Zeichen die Zeichen „1“ und „+“ eingefügt werden. Beispielsweise ist die Sequenz „(())“ regulär, während „)( " und "(()" sind es nicht.

Methode

Aufgrund der Komplexität des Problems ist eine direkte mathematische Lösung möglicherweise nicht möglich. Stattdessen müssen wir einen programmatischen Ansatz verwenden, um Klammersequenzen zu generieren und die Anzahl der Klammersequenzen zu zählen, die unseren Kriterien entsprechen.

Wir werden eine rekursive Funktion verwenden, um alle möglichen Klammersequenzen der Länge 2N zu generieren. Beim Generieren der Sequenzen werden wir zwei wichtige Parameter im Auge behalten: das Gleichgewicht der Klammern (die Anzahl der offenen Klammern sollte niemals kleiner sein als die Anzahl der geschlossenen Klammern) und der Anzahl der offenen Klammern (sollte N nicht überschreiten).

Um N-Perioden-Sequenzen herauszufiltern, überprüfen wir jede generierte Sequenz. Wenn die Sequenz eine Wiederholung einer kleineren Sequenz der Länge N ist, schließen wir sie aus der Zählung aus.

C++-Implementierung

Dies ist eine Brute-Force-Methode, um das Problem in C++ zu lösen. Diese Methode generiert alle möglichen Klammersequenzen und prüft, ob jede Sequenz N-periodisch ist, und erhöht die Anzahl, wenn nicht. Diese Lösung eignet sich für kleine Eingabegrößen, da sie eine exponentielle Zeitkomplexität aufweist und sich für größere Eingaben nicht gut skalieren lässt.

Beispiel

#include <bits/stdc++.h>
using namespace std;

// Function to check if string is N periodic
bool isPeriodic(string s, int N) {
   string sub = s.substr(0, N);
   for (int i = N; i < s.size(); i += N) {
      if (sub != s.substr(i, N)) return false;
   }
   return true;
}

// Function to generate all bracket sequences
void generateBrackets(string s, int open, int close, int N, int &count) {
   // If sequence is complete
   if (s.size() == 2*N) {
      if (!isPeriodic(s, N)) count++;
      return;
   }
   
   // Add an open bracket if we have some left
   if (open < N) generateBrackets(s + "(", open + 1, close, N, count);
   
   // Add a close bracket if it doesn't make the sequence invalid
   if (close < open) generateBrackets(s + ")", open, close + 1, N, count);
}

int main() {
   int N = 3;
   int count = 0;
   generateBrackets("", 0, 0, N, count);
   cout << "Count of sequences: " << count;
   return 0;
}

Ausgabe

Count of sequences: 5

Testfall

Betrachten wir einen Testfall mit N = 3. Dieser Code generiert alle 5 unterschiedlichen regulären Klammersequenzen der Länge 6, die nicht 3-periodisch sind: ((())), (()()), (())( ), ()(()), ()()().

Fazit

In diesem Artikel wird eine Methode vorgestellt, mit der das Zählproblem verschiedener regulärer Klammersequenzen mit Nicht-N-Punkten gewaltsam gelöst werden kann. Obwohl dieser Ansatz mit Eingaben im kleinen Maßstab umgehen kann, ist es wichtig zu beachten, dass das Problem aufgrund der Notwendigkeit, alle möglichen Klammersequenzen zu generieren und zu überprüfen, eine exponentielle Komplexität aufweist und daher nicht für Eingaben im großen Maßstab geeignet ist.

Das obige ist der detaillierte Inhalt vonZählen Sie die Anzahl der verschiedenen normalen Klammersequenzen, die keine N-Perioden haben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen