Table des matières
Exemple Exemple
Méthode 2
Algorithme
Exemple
Sortie
Maison développement back-end C++ Rechercher toute permutation qui n'existe pas dans un tableau de chaînes binaires de taille donnée

Rechercher toute permutation qui n'existe pas dans un tableau de chaînes binaires de taille donnée

Aug 26, 2023 pm 01:57 PM
arrangement chaîne binaire n'existe pas

Rechercher toute permutation qui nexiste pas dans un tableau de chaînes binaires de taille donnée

Dans ce problème, nous devons trouver toutes les chaînes binaires manquantes de longueur N dans un tableau. Nous pouvons résoudre ce problème en recherchant toutes les permutations d’une chaîne binaire de longueur N et en vérifiant quelles permutations n’existent pas dans le tableau. Nous verrons ici des méthodes itératives et récursives pour résoudre ce problème.

Énoncé du problème - Nous avons reçu un tableau arr[] de longueur N contenant des chaînes binaires de différentes longueurs. Nous devons trouver toutes les chaînes binaires manquantes de longueur N dans le tableau.

Exemple Exemple

Entrée – arr = {"111", "001", "100", "110"}, N = 3

Sortie – [000, 010, 011, 101]

Explication – Il existe 8 chaînes binaires de longueur 3, car 2 élevé à la puissance trois est égal à 8. Ainsi, il imprime les 4 chaînes binaires manquantes de longueur 3.

Entrée – str = {'00', '10', '11'}, N = 2

Sortie –[‘01’]

Explication – « 01 » est manquant dans le tableau, il sera donc imprimé dans la sortie.

Méthode 1

Ici, nous utiliserons la méthode itérative pour trouver toutes les chaînes binaires possibles de longueur N. Après cela, nous vérifierons si la chaîne existe dans le tableau. Si elle n'existe pas, nous imprimons la chaîne.

Algorithme

  • Définissez la collection et utilisez la méthode insert() pour ajouter toutes les chaînes du tableau à la collection.

  • Initialisez la variable total avec 2N, où 2N est le nombre total de chaînes de longueur N

  • Définissez la variable 'cnt' et initialisez-la à zéro pour stocker le nombre total de combinaisons manquantes.

  • Utilisez une boucle pour effectuer le nombre « total » d'itérations afin de trouver toutes les chaînes binaires de longueur N.

  • Dans la boucle, initialisez la variable chaîne "num" avec une chaîne vide.

  • Utilisez des boucles imbriquées pour un total de N itérations et à partir de la dernière itération, créez une chaîne de longueur N.

  • Utilisez la méthode find() pour vérifier si la collection contient la chaîne actuelle. Si tel est le cas, augmentez la valeur de « cnt » de 1.

  • Si la chaîne n'est pas dans la carte, imprimez-la pour l'afficher dans la sortie

  • Si la valeur de "cnt" est égale au nombre total, cela signifie que toutes les chaînes de longueur N existent dans le tableau et "-1" est imprimé.

Exemple

#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;
}
Copier après la connexion

Sortie

000, 010, 011, 101, 
Copier après la connexion

Complexité temporelle - O(N*2N), où O(N) est utilisé pour vérifier si la chaîne existe dans le tableau et O(2N) est utilisé pour trouver toutes les permutations possibles.

Complexité spatiale - O(N) car nous utilisons set pour stocker les chaînes.

Méthode 2

Dans cette méthode, nous montrons en utilisant la méthode récursive pour trouver toutes les chaînes binaires possibles de longueur N.

Algorithme

  • Définissez une collection et insérez toutes les valeurs du tableau dans la collection.

  • Appelez la fonction generateCombinations() pour générer toutes les combinaisons de chaînes binaires

  • Définissez le cas de base dans la fonction generateCombinations(). Si l'index est égal à N, alors currentCombination est ajouté à la liste.

    • Après avoir ajouté « 0 » ou « 1 » à la combinaison actuelle, appelez la fonction generateCombinations() de manière récursive.

  • Après avoir obtenu toutes les combinaisons, vérifiez quelles combinaisons sont présentes dans le tableau et lesquelles ne le sont pas. Imprimez également les combinaisons manquantes à afficher dans la sortie.

Exemple

#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;
}
Copier après la connexion

Sortie

000
010
011
101
Copier après la connexion

Complexité temporelle - O(N*2N)

Complexité spatiale - O(2N) puisque nous stockons toutes les combinaisons dans un tableau.

Les deux méthodes utilisent la même logique pour résoudre le problème. La première méthode utilise une technique itérative pour trouver toutes les combinaisons de chaînes binaires de longueur N, ce qui est plus rapide que la technique récursive utilisée dans la seconde méthode. De plus, la deuxième méthode consomme plus d’espace que la première méthode.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les dix principales plateformes de trading de devises virtuelles? Quelles sont les dix principales plateformes de trading de devises virtuelles? Feb 20, 2025 pm 02:15 PM

Avec la popularité des crypto-monnaies, des plateformes de trading de devises virtuelles ont émergé. Les dix principales plateformes de trading de devises virtuelles au monde sont classées comme suit selon le volume des transactions et la part de marché: Binance, Coinbase, FTX, Kucoin, Crypto.com, Kraken, Huobi, Gate.io, Bitfinex, Gemini. Ces plateformes offrent un large éventail de services, allant d'un large éventail de choix de crypto-monnaie à la négociation des dérivés, adapté aux commerçants de niveaux différents.

Dois-je utiliser Flexbox au centre de l'image bootstrap? Dois-je utiliser Flexbox au centre de l'image bootstrap? Apr 07, 2025 am 09:06 AM

Il existe de nombreuses façons de centrer des photos de bootstrap, et vous n'avez pas à utiliser Flexbox. Si vous avez seulement besoin de centrer horizontalement, la classe de cent texte est suffisante; Si vous devez centrer verticalement ou plusieurs éléments, Flexbox ou Grid convient plus. Flexbox est moins compatible et peut augmenter la complexité, tandis que Grid est plus puissant et a un coût d'enseignement supérieur. Lorsque vous choisissez une méthode, vous devez peser les avantages et les inconvénients et choisir la méthode la plus appropriée en fonction de vos besoins et préférences.

Comment ajuster l'échange ouvert en sésame en chinois Comment ajuster l'échange ouvert en sésame en chinois Mar 04, 2025 pm 11:51 PM

Comment ajuster l'échange ouvert en sésame en chinois? Ce didacticiel couvre des étapes détaillées sur les ordinateurs et les téléphones mobiles Android, de la préparation préliminaire aux processus opérationnels, puis à la résolution de problèmes communs, vous aidant à changer facilement l'interface d'échange Open Sesame aux chinois et à démarrer rapidement avec la plate-forme de trading.

Top 10 des plates-formes de trading de crypto-monnaie, les dix principales applications de plate-forme de trading de devises recommandées Top 10 des plates-formes de trading de crypto-monnaie, les dix principales applications de plate-forme de trading de devises recommandées Mar 17, 2025 pm 06:03 PM

Les dix principales plates-formes de trading de crypto-monnaie comprennent: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Top 10 des plates-formes de trading de devises virtuelles 2025 Applications de trading de crypto-monnaie classée top dix Top 10 des plates-formes de trading de devises virtuelles 2025 Applications de trading de crypto-monnaie classée top dix Mar 17, 2025 pm 05:54 PM

Top dix plates-formes de trading de devises virtuelles 2025: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Comment calculer C-SUBScript 3 Indice 5 C-SUBScript 3 Indice Indice 5 Tutoriel d'algorithme Comment calculer C-SUBScript 3 Indice 5 C-SUBScript 3 Indice Indice 5 Tutoriel d'algorithme Apr 03, 2025 pm 10:33 PM

Le calcul de C35 est essentiellement des mathématiques combinatoires, représentant le nombre de combinaisons sélectionnées parmi 3 des 5 éléments. La formule de calcul est C53 = 5! / (3! * 2!), Qui peut être directement calculé par des boucles pour améliorer l'efficacité et éviter le débordement. De plus, la compréhension de la nature des combinaisons et la maîtrise des méthodes de calcul efficaces est cruciale pour résoudre de nombreux problèmes dans les domaines des statistiques de probabilité, de la cryptographie, de la conception d'algorithmes, etc.

Comment implémenter la disposition adaptative de la position de l'axe y dans l'annotation Web? Comment implémenter la disposition adaptative de la position de l'axe y dans l'annotation Web? Apr 04, 2025 pm 11:30 PM

L'algorithme adaptatif de la position de l'axe y pour la fonction d'annotation Web Cet article explorera comment implémenter des fonctions d'annotation similaires aux documents de mots, en particulier comment gérer l'intervalle entre les annotations ...

Quelles sont les plates-formes de monnaie numérique sûres et fiables? Quelles sont les plates-formes de monnaie numérique sûres et fiables? Mar 17, 2025 pm 05:42 PM

Une plate-forme de monnaie numérique sûre et fiable: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. Bitfinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

See all articles