Inhaltsverzeichnis
Beispiel
Anleitung
Naive Methode
Effiziente Methode
Ideen
Umsetzung
Ausgabe
Fazit
Heim Backend-Entwicklung C++ Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen

Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen

Aug 28, 2023 am 09:49 AM
子字符串 二进制字符串 最大化

Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen

Gegeben zwei Binärzeichenfolgen str1 und str2 gleicher Länge, müssen wir den gegebenen Funktionswert maximieren, indem wir Teilzeichenfolgen aus den gegebenen Zeichenketten gleicher Länge auswählen. Die angegebene Funktion sieht so aus -

fun(str1, str2) = (len(substring))/(2^xor(sub1, sub2)).

Hier ist len(substring) die Länge des ersten Teilstrings und xor(sub1, sub2) das XOR des gegebenen Teilstrings. Dies ist möglich, da es sich um binäre Strings handelt.

Beispiel

Input1: string str1 = 10110 & string str2 = 11101 
Nach dem Login kopieren
Output: 3
Nach dem Login kopieren

Anleitung

Wir könnten viele verschiedene Sätze von Zeichenfolgen auswählen, um die Lösung zu finden, aber die Auswahl von „101“ aus beiden Zeichenfolgen führt zu einer XOR-Nullung, was dazu führt, dass die Funktion den Maximalwert zurückgibt.

Input2: string str1 = 11111, string str2 = 10001 
Nach dem Login kopieren
Output: 1 
Nach dem Login kopieren

Anleitung

Wir können „1“ als Teilzeichenfolge auswählen, was zu dieser Ausgabe führt, und wenn wir eine andere Zeichenfolge auswählen, führt dies zu einem niedrigeren Wert.

Naive Methode

Bei dieser Methode finden wir alle Teilzeichenfolgen und vergleichen sie dann, um die Lösung zu finden. Diese Lösung ist jedoch nicht effizient und erfordert viel Zeit und Platzkomplexität.

Die durchschnittliche Zeitkomplexität für die Generierung von Teilzeichenfolgen der Länge x beträgt N^2, und der anschließende Vergleich jeder Teilzeichenfolge kostet N^2 mehr. Darüber hinaus müssen wir auch das XOR des gegebenen Teilstrings finden, was ebenfalls einen zusätzlichen Faktor N kostet, was bedeutet, dass N^5 die zeitliche Komplexität des obigen Codes ist, was sehr ineffizient ist.

Effiziente Methode

Ideen

Die Idee hier beruht auf der einfachen Beobachtung, dass die Antwort immer kleiner wird, wenn der XOR-Wert höher wird. Um den Rückgabewert der Funktion zu maximieren, müssen wir daher den XOR-Wert so weit wie möglich reduzieren.

In dem Fall, dass beide Teilzeichenfolgen Null sind, ist der minimal erreichbare XOR-Wert Null. Daher leitet sich dieses Problem tatsächlich vom Problem der längsten gemeinsamen Teilzeichenfolge ab.

Wenn das XOR Null ist, ist der Dividendenteil 1, sodass die endgültige Antwort die Länge des größten gemeinsamen Teilstrings ist.

Umsetzung

Wir haben die Idee zur Lösung des Problems gesehen, schauen wir uns die Schritte zur Implementierung des Codes an -

  • Wir erstellen eine Funktion, die zwei gegebene Zeichenfolgen als Eingabe akzeptiert und einen ganzzahligen Wert zurückgibt, der unser Endergebnis sein wird.

  • In der Funktion ermitteln wir zunächst die Länge der Zeichenfolge und erstellen dann einen 2D-Vektor mit der Größe multipliziert mit der angegebenen Zeichenfolge.

  • Wir werden verschachtelte for-Schleifen verwenden, um die Zeichenfolge zu durchlaufen und die größte gemeinsame Teilzeichenfolge zu erhalten.

  • Bei jeder Iteration prüfen wir, ob die aktuellen Indizes der beiden Zeichenfolgen übereinstimmen, und erhalten dann den Wert aus dem Vektor des letzten Index beider Zeichenfolgen.

  • Andernfalls würden wir den aktuellen Index des Vektors einfach auf Null setzen.

  • Darüber hinaus werden wir eine Variable verwalten, um die maximale Länge des gemeinsamen Teilstrings zu zählen.

  • Abschließend geben wir die Antwort zurück und drucken sie in der Hauptfunktion aus.

Beispiel

#include <bits/stdc++.h>
using namespace std;
// function to get the result
int result(string str1, string str2){
   int n = str1.length(); // size of the first string
   int m = str2.length(); // size of the second string   
   
   // creating vector to store the dynamic programming results 
   vector<vector<int>>dp(n+1, vector<int>(m+1)); 
   int ans = 0; // variable to store the result 
   
   // traversing over the strings using nested for loops 
   for (int i = 1; i <= n; i++){
      for (int j = 1; j <= m; j++){ 
      
         // if current elements of both the string are equal 
         if (str1[i - 1] == str2[j - 1]){
            // getting one maximum of the last two 
            dp[i][j] = 1 + dp[i - 1][j - 1];
            ans = max(ans, dp[i][j]);
         }
      }
   }
   return ans; // return the final answer or count 
} 
int main(){
   string str1 = "10110";
   string str2 = "11101"; 
   
   // calling the function
   cout<<"The maximum score for a given function by selecting equal length substrings from given binary strings is "<< result(str1,str2)<<endl;
   return 0;
}
Nach dem Login kopieren

Ausgabe

The maximum score for a given function by selecting equal length substrings from given binary strings is 3
Nach dem Login kopieren

Zeitliche und räumliche Komplexität

Die zeitliche Komplexität des obigen Codes beträgt O(N^2), da wir verschachtelte for-Schleifen verwenden und jedes Mal N-mal iterieren.

Da wir ein zweidimensionales Array zum Speichern von Elementen verwenden, beträgt die räumliche Komplexität des obigen Codes O(N^2).

Fazit

In diesem Tutorial erstellen wir Code, um die maximale Punktzahl einer bestimmten Funktion zu implementieren, indem wir Teilzeichenfolgen gleicher Länge aus einer bestimmten Binärzeichenfolge auswählen. Wir haben diesen naiven Ansatz, der äußerst ineffizient ist, bereits besprochen. Abhängig von der gegebenen Funktion ist der Wert des XOR kleiner, daher machen wir das XOR auf Null, indem wir den längsten gemeinsamen Teilstring in der Zeitkomplexität O(N^2) erhalten.

Das obige ist der detaillierte Inhalt vonMaximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie die LOCATE-Funktion in MySQL, um die Position eines Teilstrings in einem String zu finden So verwenden Sie die LOCATE-Funktion in MySQL, um die Position eines Teilstrings in einem String zu finden Jul 25, 2023 am 09:45 AM

So verwenden Sie die LOCATE-Funktion in MySQL, um die Position eines Teilstrings in einem String zu finden. In MySQL gibt es viele Funktionen, die zum Verarbeiten von Strings verwendet werden können. Unter diesen ist die LOCATE-Funktion eine sehr nützliche Funktion, mit der die Position eines Teilstrings in einem String ermittelt werden kann. Die Syntax der LOCATE-Funktion lautet wie folgt: LOCATE(substring,string,[position]) wobei substring der zu findende Teilstring und string der zu findende Teilstring ist.

Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Sep 17, 2023 pm 07:49 PM

Gegeben seien zwei Strings str_1 und str_2. Das Ziel besteht darin, mithilfe eines rekursiven Verfahrens die Anzahl der Vorkommen der Teilzeichenfolge str2 in der Zeichenfolge str1 zu zählen. Eine rekursive Funktion ist eine Funktion, die sich innerhalb ihrer Definition selbst aufruft. Wenn str1 „Iknowthatyouknowthatiknow“ und str2 „know“ ist, beträgt die Anzahl der Vorkommen -3. Lassen Sie uns das anhand von Beispielen verstehen. Geben Sie beispielsweise str1="TPisTPareTPamTP", str2="TP" ein; geben Sie Countofoccurrencesofasubstringrecursi aus

Die Funktion strtok_r() ist eine Funktion in der C-Sprache. Ihre Funktion besteht darin, eine Zeichenfolge in eine Reihe von Teilzeichenfolgen aufzuteilen. Die Funktion strtok_r() ist eine Funktion in der C-Sprache. Ihre Funktion besteht darin, eine Zeichenfolge in eine Reihe von Teilzeichenfolgen aufzuteilen. Aug 26, 2023 am 09:45 AM

Diese Funktion ähnelt der Funktion strtok(). Der einzige wesentliche Unterschied besteht in _r, einer so genannten reentrant-Funktion. Reentrant-Funktionen sind Funktionen, die während der Ausführung unterbrochen werden können. Diese Art von Funktion kann verwendet werden, um die Ausführung fortzusetzen. Daher sind reentrant-Funktionen Thread-sicher, was bedeutet, dass sie sicher von Threads unterbrochen werden können, ohne Schaden zu verursachen. Die Funktion strtok_r() verfügt über einen zusätzlichen Parameter namens context. Dadurch kann die Funktion an der richtigen Stelle wiederhergestellt werden. Die Syntax der Funktion strtok_r() lautet wie folgt: #include<string.h>char*strtok_r(char*string,constchar*limiter,char**

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Sep 07, 2023 pm 11:13 PM

Bei diesem Problem müssen wir die längste nicht zunehmende Teilfolge einer gegebenen Zeichenfolge finden. Nicht aufsteigend bedeutet, dass die Zeichen entweder gleich oder in absteigender Reihenfolge sind. Da Binärzeichenfolgen nur „0“ und „1“ enthalten, sollte die resultierende Zeichenfolge entweder mit „1“ beginnen und mit „0“ enden oder mit „0“ oder „1“ beginnen und enden. Um dieses Problem zu lösen, zählen wir das Präfix „1“ und das Suffix „0“ an jeder Position der Zeichenfolge und ermitteln die maximale Summe aus Präfix „1“ und Suffix „0“. Problemstellung: Wir erhalten eine binäre Zeichenfolge str. Wir müssen die längste nicht zunehmende Teilsequenz aus der gegebenen Zeichenfolge finden. Beispiel Input–str="010100"Output–4 veranschaulicht die längste nicht-rekursive Methode

In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln Aug 31, 2023 pm 02:05 PM

Die Funktion pack() packt Daten in eine Binärzeichenfolge. Syntax pack(format,args) Parameter format – das zu verwendende Format. Die folgenden Werte sind möglich: a – mit NUL aufgefüllte Zeichenfolge A – mit Leerzeichen aufgefüllte Zeichenfolge h – hexadezimale Zeichenfolge, niedriges Nibble zuerst H – hexadezimale Zeichenfolge, hohes Nibble zuerst c – vorzeichenbehaftetes Zeichen C – vorzeichenloses Zeichen s – vorzeichenbehaftetes Kurzzeichen (immer 16 Bit). , Maschinenbyte-Reihenfolge) S – unsigned short (immer 16 Bit, Maschinenbyte-Reihenfolge) n – unsigned short (immer 16 Bit, Big-Endian-Bytereihenfolge) v – unsigned short (immer 16 Bit, Little-Endian-Bytereihenfolge) i – vorzeichenbehaftete Ganzzahl (hängt von der Maschinengröße und der Byte-Reihenfolge ab) I – Keine vorzeichenbehaftete Ganzzahl (abhängig von

Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Sep 05, 2023 am 09:01 AM

In der gegebenen Aufgabe erhalten wir eine Zeichenfolge bestehend aus 0 und 1; wir müssen die Gesamtzahl aller Permutationen ermitteln, die mit 1 beginnen. Da die Antwort eine große Zahl sein kann, nehmen wir sie modulo 1000000007 und geben sie aus. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Wir werden dieses Problem lösen, indem wir kombinatorische Mathematik anwenden und einige Formeln aufstellen. Lösungsmethode Bei dieser Methode zählen wir die Anzahl der Nullen und Einsen. Angenommen, n ist die Anzahl der Einsen, die in unserer Zeichenfolge erscheinen, und m ist die Anzahl der Nullen, die in unserer Zeichenfolge erscheinen

PHP gibt den String von der Startposition bis zur Endposition eines Strings in einem anderen String zurück PHP gibt den String von der Startposition bis zur Endposition eines Strings in einem anderen String zurück Mar 21, 2024 am 10:31 AM

In diesem Artikel wird ausführlich erläutert, wie PHP die Zeichenfolge von der Startposition zur Endposition einer Zeichenfolge in einer anderen Zeichenfolge zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit diesem Artikel können Sie etwas abgewinnen. Verwenden Sie die Funktion substr() in PHP, um Teilzeichenfolgen aus einer Zeichenfolge zu extrahieren. Die Funktion substr() kann Zeichen innerhalb eines angegebenen Bereichs aus einer Zeichenfolge extrahieren. Die Syntax lautet wie folgt: substr(string,start,length) wobei: string: der ursprüngliche String, aus dem der Teilstring extrahiert werden soll. start: Der Index der Startposition des Teilstrings (beginnend bei 0). Länge (optional): Die Länge des Teilstrings. Wenn nicht angegeben, dann

Regulärer PHP-Ausdruck: So extrahieren Sie bestimmte Zeichen aus einer Zeichenfolge in eine Teilzeichenfolge am Ende Regulärer PHP-Ausdruck: So extrahieren Sie bestimmte Zeichen aus einer Zeichenfolge in eine Teilzeichenfolge am Ende Jun 22, 2023 pm 05:33 PM

Reguläre Ausdrücke sind ein leistungsstarkes Textverarbeitungstool, mit dem Zeichenfolgen in bestimmten Mustern abgeglichen werden können. In PHP werden reguläre Ausdrücke häufig bei der Zeichenfolgenverarbeitung, Formularvalidierung, Suche und Ersetzung usw. verwendet. In diesem Artikel wird erläutert, wie Sie mithilfe der regulären Ausdrücke von PHP bestimmte Zeichen aus einer Zeichenfolge in die Teilzeichenfolge am Ende extrahieren. Schauen wir uns zunächst ein Beispiel an. Angenommen, wir haben eine Zeichenfolge $str, die mehrere URLs enthält, die mit „http://“ beginnen, und wir möchten diese URLs extrahieren und in einem speichern

See all articles