Table des matières
Exemple Exemple
Instructions
Méthode 1
Algorithme
Exemple
Sortie
Comment utiliser Bitset
Conclusion
Maison développement back-end C++ Construire une chaîne binaire de longueur K à partir du tableau selon les conditions données

Construire une chaîne binaire de longueur K à partir du tableau selon les conditions données

Sep 09, 2023 pm 07:45 PM
二进制 数组 构建

Construire une chaîne binaire de longueur K à partir du tableau selon les conditions données

Dans ce tutoriel, nous devons construire une chaîne binaire de longueur K telle qu'elle contienne "1" à son i-ème index si la somme des sous-ensembles égale à I peut être obtenue à l'aide d'éléments de tableau. Nous apprendrons deux façons de résoudre le problème. Dans la première approche, nous utiliserons des méthodes de programmation dynamique pour vérifier s'il est possible que la somme des sous-ensembles soit égale à l'indice "I". Dans la deuxième méthode, nous utiliserons bitset pour trouver toutes les sommes possibles à travers les éléments du tableau.

Énoncé du problème - On nous donne un tableau contenant N entiers. De plus, on nous donne un entier M représentant la longueur de la chaîne binaire. Nous devons créer une chaîne binaire de longueur M telle qu'elle obéisse aux conditions suivantes.

  • Le caractère à l'index "I" est 1 si l'on peut trouver un sous-ensemble du tableau dont la somme est égale à l'index "I" sinon il est 0 ;

  • Mon index commence à 1.

Exemple Exemple

Input –  arr = [1, 2] M = 4
Copier après la connexion
Output – 1110
Copier après la connexion

Instructions

  • Le sous-ensemble dont la somme est égale à 1 est {1}.

  • Le sous-ensemble dont la somme est égale à 2 est {2}.

  • Le sous-ensemble dont la somme est égale à 3 est {1, 2}.

  • Nous ne trouvons pas de sous-ensemble dont la somme est égale à 4, nous mettons donc 0 au 4ème index.

Input –  arr = [1, 3, 1] M = 9
Copier après la connexion
Output – 111110000
Copier après la connexion

Instructions

Nous pouvons créer toutes les combinaisons possibles pour que la somme soit comprise entre 1 et 5. Ainsi, les 5 premiers caractères valent 1 et les 4 derniers caractères valent 0.

Input –  arr = [2, 6, 3] M = 6
Copier après la connexion
Output – 011011
Copier après la connexion

Instructions

Vous ne pouvez pas obtenir une somme égale à 1 et 4 en utilisant des éléments de tableau, nous plaçons donc 0 aux première et quatrième positions d'index.

Méthode 1

Dans cette méthode, nous utiliserons la programmation dynamique pour vérifier si nous pouvons construire une somme égale à l'index 'I' à l'aide d'éléments de tableau. Nous allons le vérifier pour chaque index et ajouter 1 ou 0 à une chaîne binaire.

Algorithme

  • Étape 1 - Créez un vecteur de taille N et initialisez-le avec une valeur entière. Définissez également une variable "bin" de type chaîne et initialisez-la avec une chaîne vide.

  • Étape 2 - Utilisez une boucle for pour rendre le nombre total d'itérations égal à la longueur de la chaîne.

  • Étape 3 - Dans la boucle for, appelez la fonction isSubsetSum() en passant le tableau N et la valeur d'index comme paramètres.

  • Étape 4 - Si la fonction isSubsetSum() renvoie vrai, ajoutez "1" à "bin". Sinon, ajoutez « 0 » à « bin ».

  • Étape 5 - Définissez la fonction isSubsetSum() pour vérifier si les éléments du tableau peuvent être additionnés.

  • Étape 5.1 - Définissez un vecteur bidimensionnel nommé dpTable.

  • Étape 5.2 - Initialisez 'dpTable[i][0]' à true car une somme nulle est toujours possible. Ici, « I » est la valeur de l'index.

  • Étape 5.3 - Initialisez 'dpTable[0][j]' sur false car la somme des tableaux vides n'est pas possible.

  • Étape 5.4 - Maintenant, utilisez deux boucles imbriquées. La première boucle parcourt de 1 à N et l’autre boucle parcourt de 1 à somme.

  • Étape 5.5 - Dans la boucle for, si la valeur de l'élément actuel est supérieure à la somme, ignorez-la.

  • Étape 5.6 − Sinon, incluez ou excluez des éléments pour obtenir la somme.

  • Étape 5.7 - Renvoie 'dpTable[N][sum]' contenant les résultats.

Exemple

#include <iostream>
#include <vector>
using namespace std;
// Function to check if subset-sum is possible
bool isSubsetSum(vector<int> &arr, int N, int sum){
   vector<vector<bool>> dpTable(N + 1, vector<bool>(sum + 1, false));
   
   // Base cases
   for (int i = 0; i <= N; i++)
   
      // If the sum is zero, then the answer is true
      dpTable[i][0] = true;
      
   // for an empty array, the sum is not possible
   for (int j = 1; j <= sum; j++)
      dpTable[0][j] = false;
      
   // Fill the dp table
   for (int i = 1; i <= N; i++){
      for (int j = 1; j <= sum; j++){
      
         // if the current element is greater than the sum, then we can't include it
         if (arr[i - 1] > j)
            dpTable[i][j] = dpTable[i - 1][j];
            
         // else we can either include it or exclude it to get the sum
         else
            dpTable[i][j] = dpTable[i - 1][j] || dpTable[i - 1][j - arr[i - 1]];
      }
   }
   
   // The last cell of the dp table contains the result
   return dpTable[N][sum];
}
int main(){

   // Given M
   int M = 9;
   
   // Creating the vector
   vector<int> arr = {1, 3, 1};
   
   // getting the size of the vector
   int N = arr.size();
   
   // Initializing the string
   string bin = "";
   
   // Making k iteration to construct the string of length k
   for (int i = 1; i <= M; i++){
   
      // if the subset sum is possible, then add 1 to the string, else add 0
      if (isSubsetSum(arr, N, i)){
         bin += "1";
      }
      else{
         bin += "0";
      }
   }
   
   // print the result.
   cout << "The constructed binary string of length " << M << " according to the given conditions is ";
   cout << bin;
   return 0;
}
Copier après la connexion

Sortie

The constructed binary string of length 9 according to the given conditions is 111110000
Copier après la connexion

Complexité temporelle - O(N^3), car la complexité temporelle de isSubsetSum() est O(N^2) et nous l'appelons N fois dans le code du pilote.

Complexité spatiale - O(N^2), car nous utilisons un vecteur bidimensionnel dans la fonction isSubsetSum().

Comment utiliser Bitset

Dans cette méthode, nous utiliserons des jeux de bits pour trouver toutes les valeurs de somme possibles en combinant différents éléments du tableau. Ici, bitset signifie qu'il crée une chaîne binaire. Dans l'ensemble de bits résultant, chaque bit représente si la somme est susceptible d'être égale à un index spécifique, et nous devons le trouver ici.

Algorithme

  • Étape 1 - Définissez le tableau et M. De plus, définissez la fonction createBinaryString().

  • Étape 2 - Ensuite, définissez l'ensemble de bits de la longueur souhaitée, qui créera une chaîne binaire.

  • Étape 3 - Initialisez bit[0] à 1, puisqu'une somme de 0 est toujours possible.

  • Étape 4 - Utilisez une boucle for pour parcourir les éléments du tableau

  • .
  • Étape 5 - Tout d'abord, effectuez une opération de décalage vers la gauche "bit" sur les éléments du tableau. La valeur résultante est ensuite combinée en OU avec la valeur du bit.

  • Étape 6 - Imprimez la valeur du bit défini de l'index 1 à M.

Exemple

#include <bits/stdc++.h>
using namespace std;
// function to construct the binary string
void createBinaryString(int array[], int N, int M){
   bitset<100003> bit;
   
   // Initialize with 1
   bit[0] = 1;
   
   // iterate over all the integers
   for (int i = 0; i < N; i++){
      // perform left shift by array[i], and OR with the previous value.
      bit = bit | bit << array[i];
   }
   
   // Print the binary string
   cout << "The constructed binary string of length " << M << " according to the given conditions is ";
   for (int i = 1; i <= M; i++){
      cout << bit[i];
   }
}
int main(){

   // array of integers
   int array[] = {1, 4, 2};
   int N = sizeof(array) / sizeof(array[0]);
   
   // value of M, size of the string
   int M = 8;
   createBinaryString(array, N, M);
}
Copier après la connexion

Sortie

The constructed binary string of length 8 according to the given conditions is 11111110
Copier après la connexion

Complexité temporelle - O(N) car nous utilisons une seule boucle for.

Complexité spatiale - O(N) car nous stockons la valeur de l'ensemble de bits.

Conclusion

Ici, nous avons optimisé la deuxième méthode, qui est meilleure que la première méthode en termes de complexité spatiale et temporelle. Cependant, la deuxième méthode peut être difficile à comprendre pour les débutants si vous ne comprenez pas les jeux de bits.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Comment supprimer les éléments en double du tableau PHP à l'aide de la boucle foreach ? Comment supprimer les éléments en double du tableau PHP à l'aide de la boucle foreach ? Apr 27, 2024 am 11:33 AM

La méthode d'utilisation d'une boucle foreach pour supprimer les éléments en double d'un tableau PHP est la suivante : parcourez le tableau, et si l'élément existe déjà et que la position actuelle n'est pas la première occurrence, supprimez-le. Par exemple, s'il existe des enregistrements en double dans les résultats de la requête de base de données, vous pouvez utiliser cette méthode pour les supprimer et obtenir des résultats sans enregistrements en double.

L'art de PHP Array Deep Copy : utiliser différentes méthodes pour obtenir une copie parfaite L'art de PHP Array Deep Copy : utiliser différentes méthodes pour obtenir une copie parfaite May 01, 2024 pm 12:30 PM

Les méthodes de copie approfondie de tableaux en PHP incluent : l'encodage et le décodage JSON à l'aide de json_decode et json_encode. Utilisez array_map et clone pour créer des copies complètes des clés et des valeurs. Utilisez Serialize et Unsérialize pour la sérialisation et la désérialisation.

Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes May 03, 2024 pm 09:03 PM

La comparaison des performances des méthodes de retournement des valeurs de clé de tableau PHP montre que la fonction array_flip() fonctionne mieux que la boucle for dans les grands tableaux (plus d'un million d'éléments) et prend moins de temps. La méthode de la boucle for consistant à retourner manuellement les valeurs clés prend un temps relativement long.

Application de la fonction de regroupement de tableaux PHP dans le tri des données Application de la fonction de regroupement de tableaux PHP dans le tri des données May 04, 2024 pm 01:03 PM

La fonction array_group_by de PHP peut regrouper des éléments dans un tableau en fonction de clés ou de fonctions de fermeture, renvoyant un tableau associatif où la clé est le nom du groupe et la valeur est un tableau d'éléments appartenant au groupe.

Meilleures pratiques pour la copie approfondie des tableaux PHP : découvrez des méthodes efficaces Meilleures pratiques pour la copie approfondie des tableaux PHP : découvrez des méthodes efficaces Apr 30, 2024 pm 03:42 PM

La meilleure pratique pour effectuer une copie complète d'un tableau en PHP consiste à utiliser json_decode(json_encode($arr)) pour convertir le tableau en chaîne JSON, puis à le reconvertir en tableau. Utilisez unserialize(serialize($arr)) pour sérialiser le tableau en chaîne, puis désérialisez-le en un nouveau tableau. Utilisez RecursiveIteratorIterator pour parcourir de manière récursive des tableaux multidimensionnels.

Pratique du tri multidimensionnel des tableaux PHP : des scénarios simples aux scénarios complexes Pratique du tri multidimensionnel des tableaux PHP : des scénarios simples aux scénarios complexes Apr 29, 2024 pm 09:12 PM

Le tri des tableaux multidimensionnels peut être divisé en tri sur une seule colonne et en tri imbriqué. Le tri sur une seule colonne peut utiliser la fonction array_multisort() pour trier par colonnes ; le tri imbriqué nécessite une fonction récursive pour parcourir le tableau et le trier. Les cas pratiques incluent le tri par nom de produit et le tri composé par volume de ventes et prix.

Algorithme de fusion et de déduplication de tableaux PHP : solution parallèle Algorithme de fusion et de déduplication de tableaux PHP : solution parallèle Apr 18, 2024 pm 02:30 PM

L'algorithme de fusion et de déduplication de tableaux PHP fournit une solution parallèle, divisant le tableau d'origine en petits blocs pour un traitement parallèle, et le processus principal fusionne les résultats des blocs à dédupliquer. Étapes algorithmiques : divisez le tableau d'origine en petits blocs également alloués. Traitez chaque bloc pour la déduplication en parallèle. Fusionnez les résultats du bloc et dédupliquez à nouveau.

Le rôle de la fonction de regroupement de tableaux PHP dans la recherche d'éléments en double Le rôle de la fonction de regroupement de tableaux PHP dans la recherche d'éléments en double May 05, 2024 am 09:21 AM

La fonction array_group() de PHP peut être utilisée pour regrouper un tableau par une clé spécifiée afin de rechercher les éléments en double. Cette fonction fonctionne selon les étapes suivantes : Utilisez key_callback pour spécifier la clé de regroupement. Utilisez éventuellement value_callback pour déterminer les valeurs de regroupement. Comptez les éléments regroupés et identifiez les doublons. Par conséquent, la fonction array_group() est très utile pour rechercher et traiter des éléments en double.

See all articles