Inhaltsverzeichnis
Beispiel Beispiel
Methode 2
Algorithmus
Beispiel
Ausgabe
Heim Backend-Entwicklung C++ Finden Sie alle Permutationen, die in einem binären String-Array einer bestimmten Größe nicht vorhanden sind

Finden Sie alle Permutationen, die in einem binären String-Array einer bestimmten Größe nicht vorhanden sind

Aug 26, 2023 pm 01:57 PM
排列 二进制字符串 不存在

Finden Sie alle Permutationen, die in einem binären String-Array einer bestimmten Größe nicht vorhanden sind

In diesem Problem müssen wir alle fehlenden Binärzeichenfolgen der Länge N aus einem Array finden. Wir können dieses Problem lösen, indem wir alle Permutationen einer binären Zeichenfolge der Länge N finden und prüfen, welche Permutationen im Array nicht vorhanden sind. Hier werden wir iterative und rekursive Methoden zur Lösung dieses Problems sehen.

Problemstellung – Wir haben ein Array arr[] der Länge N erhalten, das Binärzeichenfolgen unterschiedlicher Länge enthält. Wir müssen alle fehlenden Binärzeichenfolgen der Länge N aus dem Array finden.

Beispiel Beispiel

Eingabe – arr = {"111", "001", "100", "110"}, N = 3

Ausgabe – [000, 010, 011, 101]

Erläuterung – Es gibt 8 binäre Zeichenfolgen der Länge 3, da 2 in der dritten Potenz gleich 8 ist. Es gibt also die fehlenden 4 Binärzeichenfolgen der Länge 3 aus.

Eingabe – str = {‘00’, ‘10’, ‘11’}, N = 2

Ausgabe –[‘01’]

Erklärung – „01“ fehlt im Array und wird daher in der Ausgabe gedruckt.

Methode 1

Hier verwenden wir die iterative Methode, um alle möglichen Binärzeichenfolgen der Länge N zu finden. Danach prüfen wir, ob die Zeichenfolge im Array vorhanden ist. Wenn es nicht existiert, drucken wir die Zeichenfolge.

Algorithmus

  • Definieren Sie die Sammlung und verwenden Sie die Methode insert(), um alle Zeichenfolgen im Array zur Sammlung hinzuzufügen.

  • Initialisieren Sie die Gesamtvariable mit 2N, wobei 2N die Gesamtzahl der Zeichenfolgen der Länge N ist

  • Definieren Sie die Variable „cnt“ und initialisieren Sie sie auf Null, um die Gesamtzahl der fehlenden Kombinationen zu speichern.

  • Verwenden Sie eine Schleife, um die „Gesamtzahl“ der Iterationen zu ermitteln und alle binären Zeichenfolgen der Länge N zu finden.

  • Initialisieren Sie in der Schleife die String-Variable „num“ mit einem leeren String.

  • Verwenden Sie verschachtelte Schleifen für insgesamt N Iterationen und erstellen Sie ausgehend von der letzten Iteration eine Zeichenfolge der Länge N.

  • Verwenden Sie die Methode find(), um zu überprüfen, ob die Sammlung die aktuelle Zeichenfolge enthält. Wenn ja, erhöhen Sie den Wert von „cnt“ um 1.

  • Wenn die Zeichenfolge nicht in der Karte enthalten ist, drucken Sie sie aus, um sie in der Ausgabe anzuzeigen

  • Wenn der Wert von „cnt“ gleich der Gesamtzahl ist, bedeutet dies, dass alle Zeichenfolgen der Länge N im Array vorhanden sind und „-1“ gedruckt wird.

Beispiel

#include <bits/stdc++.h>
using namespace std;
// function to print missing combinations of a binary string of length N in an array
void printMissingCombinations(vector<string> &arr, int N) {
   unordered_set<string> set;
   // insert all the strings in the set
   for (string temp : arr) {
      set.insert(temp);
   }
   // get total combinations for the string of length N
   int total = (int)pow(2, N);
   // To store combinations that are present in an array
   int cnt = 0;
   // find all the combinations
   for (int p = 0; p < total; p++) {
      // Initialize empty binary string
      string bin = "";
      for (int q = N - 1; q >= 0; q--) {
          // If the qth bit is set, append '1'; append '0'.
          if (p & (1 << q)) {
              bin += '1';
          } else {
              bin += '0';
          }
      }
      // If the combination is present in an array, increment cnt
      if (set.find(bin) != set.end()) {
          cnt++;
          continue;
      } else {
          cout << bin << ", ";
      }
   }
   // If all combinations are present in an array, print -1
   if (cnt == total) {
      cout << "-1";
   }
}
int main() {
   int N = 3;
   vector<string> arr = {"111", "001", "100", "110"};
   printMissingCombinations(arr, N);
   return 0;
}
Nach dem Login kopieren

Ausgabe

000, 010, 011, 101, 
Nach dem Login kopieren

Zeitkomplexität – O(N*2N), wobei O(N) verwendet wird, um zu prüfen, ob die Zeichenfolge im Array vorhanden ist, und O(2N) verwendet wird, um alle möglichen Permutationen zu finden.

Raumkomplexität – O(N), weil wir set zum Speichern von Strings verwenden.

Methode 2

In dieser Methode zeigen wir, wie wir mit der rekursiven Methode alle möglichen Binärzeichenfolgen der Länge N finden.

Algorithmus

  • Definieren Sie eine Sammlung und fügen Sie alle Array-Werte in die Sammlung ein.

  • Rufen Sie die Funktion „generateCombinations()“ auf, um alle Kombinationen von Binärzeichenfolgen zu generieren

  • Definieren Sie den Basisfall in der Funktion „generateCombinations()“. Wenn der Index gleich N ist, wird currentCombination zur Liste hinzugefügt.

    • Nachdem Sie „0“ oder „1“ zur aktuellen Kombination hinzugefügt haben, rufen Sie die Funktion „generateCombinations()“ rekursiv auf.

  • Nachdem Sie alle Kombinationen erhalten haben, prüfen Sie, welche Kombinationen im Array vorhanden sind und welche nicht. Drucken Sie außerdem die fehlenden Kombinationen aus, um sie in der Ausgabe anzuzeigen.

Beispiel

#include <bits/stdc++.h>
using namespace std;
// Function to generate all possible combinations of binary strings
void generateCombinations(int index, int N, string currentCombination, vector<string> &combinations) {
   // Base case: if we have reached the desired length N, add the combination to the vector
   if (index == N) {
      combinations.push_back(currentCombination);
      return;
   }
   // Recursively generate combinations by trying both 0 and 1 at the current index
   generateCombinations(index + 1, N, currentCombination + "0", combinations);
   generateCombinations(index + 1, N, currentCombination + "1", combinations);
}
// function to print missing combinations of a binary string of length N in an array
void printMissingCombinations(vector<string> &arr, int N) {    
   unordered_set<string> set;
   // insert all the strings in the set
   for (string str : arr) {
      set.insert(str);
   }
   // generating all combinations of binary strings of length N
   vector<string> combinations;
   generateCombinations(0, N, "", combinations);
   // Traverse all the combinations and check if it is present in the set or not
   for (string str : combinations) {
      // If the combination is not present in the set, print it
      if (set.find(str) == set.end()) {
          cout << str << endl;
      }
   }

   return;
}
int main(){
   int N = 3;
   vector<string> arr = {"111", "001", "100", "110"};
   printMissingCombinations(arr, N);
   return 0;
}
Nach dem Login kopieren

Ausgabe

000
010
011
101
Nach dem Login kopieren

Zeitkomplexität – O(N*2N)

Raumkomplexität – O(2N), da wir alle Kombinationen im Array speichern.

Beide Methoden verwenden dieselbe Logik, um das Problem zu lösen. Die erste Methode verwendet eine iterative Technik, um alle Kombinationen binärer Zeichenfolgen der Länge N zu finden, was schneller ist als die rekursive Technik, die in der zweiten Methode verwendet wird. Außerdem verbraucht die zweite Methode mehr Platz als die erste Methode.

Das obige ist der detaillierte Inhalt vonFinden Sie alle Permutationen, die in einem binären String-Array einer bestimmten Größe nicht vorhanden sind. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Was sind die zehn besten Handelsplattformen für virtuelle Währung? Was sind die zehn besten Handelsplattformen für virtuelle Währung? Feb 20, 2025 pm 02:15 PM

Mit der Popularität von Kryptowährungen sind virtuelle Währungshandelsplattformen entstanden. Die zehn besten Handelsplattformen der virtuellen Währung der Welt werden nach dem Transaktionsvolumen und dem Marktanteil wie folgt eingestuft: Binance, Coinbase, FTX, Kucoin, Crypto.com, Kraken, Huobi, Gate.io, Bitfinex, Gemini. Diese Plattformen bieten eine breite Palette von Dienstleistungen, die von einer Vielzahl von Kryptowährungsauswahl bis hin zu Derivatenhandel reichen und für Händler unterschiedlicher Ebene geeignet sind.

Muss ich Flexbox in der Mitte des Bootstrap -Bildes verwenden? Muss ich Flexbox in der Mitte des Bootstrap -Bildes verwenden? Apr 07, 2025 am 09:06 AM

Es gibt viele Möglichkeiten, Bootstrap -Bilder zu zentrieren, und Sie müssen keine Flexbox verwenden. Wenn Sie nur horizontal zentrieren müssen, reicht die Text-Center-Klasse aus. Wenn Sie vertikal oder mehrere Elemente zentrieren müssen, ist Flexbox oder Grid besser geeignet. Flexbox ist weniger kompatibel und kann die Komplexität erhöhen, während das Netz leistungsfähiger ist und höhere Lernkosten hat. Bei der Auswahl einer Methode sollten Sie die Vor- und Nachteile abwägen und die am besten geeignete Methode entsprechend Ihren Anforderungen und Vorlieben auswählen.

So passen Sie den Sesam offenen Austausch in Chinesisch an So passen Sie den Sesam offenen Austausch in Chinesisch an Mar 04, 2025 pm 11:51 PM

Wie kann ich den Sesam offenen Austausch an Chinesisch anpassen? Dieses Tutorial behandelt detaillierte Schritte zu Computern und Android -Mobiltelefonen, von der vorläufigen Vorbereitung bis hin zu operativen Prozessen und dann bis zur Lösung gemeinsamer Probleme, um die Sesam -Open Exchange -Schnittstelle auf Chinesisch zu wechseln und schnell mit der Handelsplattform zu beginnen.

Top 10 Cryptocurrency -Handelsplattformen, Top Ten empfohlene Apps für Währungshandelsplattformen Top 10 Cryptocurrency -Handelsplattformen, Top Ten empfohlene Apps für Währungshandelsplattformen Mar 17, 2025 pm 06:03 PM

Zu den zehn Top -Kryptowährungsplattformen gehören: 1. OKX, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. Sicherheit, Liquidität, Handhabungsgebühren, Währungsauswahl, Benutzeroberfläche und Kundensupport sollten bei der Auswahl einer Plattform berücksichtigt werden.

Top 10 Top -Currency -Handelsplattformen 2025 Cryptocurrency Trading Apps, die die Top Ten ringen Top 10 Top -Currency -Handelsplattformen 2025 Cryptocurrency Trading Apps, die die Top Ten ringen Mar 17, 2025 pm 05:54 PM

Top Ten Ten Virtual Currency Trading Platforms 2025: 1. OKX, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. Sicherheit, Liquidität, Handhabungsgebühren, Währungsauswahl, Benutzeroberfläche und Kundensupport sollten bei der Auswahl einer Plattform berücksichtigt werden.

Berechnung des C-Subscript 3-Index 5 C-Subscript 3-Index 5-Algorithmus-Tutorial Berechnung des C-Subscript 3-Index 5 C-Subscript 3-Index 5-Algorithmus-Tutorial Apr 03, 2025 pm 10:33 PM

Die Berechnung von C35 ist im Wesentlichen kombinatorische Mathematik, die die Anzahl der aus 3 von 5 Elementen ausgewählten Kombinationen darstellt. Die Berechnungsformel lautet C53 = 5! / (3! * 2!), Was direkt durch Schleifen berechnet werden kann, um die Effizienz zu verbessern und Überlauf zu vermeiden. Darüber hinaus ist das Verständnis der Art von Kombinationen und Beherrschen effizienter Berechnungsmethoden von entscheidender Bedeutung, um viele Probleme in den Bereichen Wahrscheinlichkeitsstatistik, Kryptographie, Algorithmus -Design usw. zu lösen.

Wie kann man adaptives Layout der Y-Achse-Position in Webanmerkungen implementieren? Wie kann man adaptives Layout der Y-Achse-Position in Webanmerkungen implementieren? Apr 04, 2025 pm 11:30 PM

Der ad-axis-Position adaptive Algorithmus für Webanmerkungen In diesem Artikel wird untersucht, wie Annotationsfunktionen ähnlich wie Word-Dokumente implementiert werden, insbesondere wie man mit dem Intervall zwischen Anmerkungen umgeht ...

Was sind die sicheren und zuverlässigen digitalen Währungsplattformen? Was sind die sicheren und zuverlässigen digitalen Währungsplattformen? Mar 17, 2025 pm 05:42 PM

Eine sichere und zuverlässige Plattform für digitale Währung: 1. OKX, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. Sicherheit, Liquidität, Handhabungsgebühren, Währungsauswahl, Benutzeroberfläche und Kundensupport sollten bei der Auswahl einer Plattform berücksichtigt werden.

See all articles