Heim >Backend-Entwicklung >C++ >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.
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.
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.
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.
#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; }
Count of sequences: 5
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: ((())), (()()), (())( ), ()(()), ()()().
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!