Table des matières
Exemple
Instructions
Méthode naïve
Méthode efficace
Idées
Mise en œuvre
Sortie
Conclusion
Maison développement back-end C++ Maximisez la fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir de la chaîne binaire donnée

Maximisez la fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir de la chaîne binaire donnée

Aug 28, 2023 am 09:49 AM
子字符串 chaîne binaire maximiser

Maximisez la fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir de la chaîne binaire donnée

Étant donné deux chaînes binaires str1 et str2 de même longueur, nous devons maximiser la valeur de fonction donnée en sélectionnant des sous-chaînes parmi les chaînes données de même longueur. La fonction donnée est comme ceci -

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

Ici, len(substring) est la longueur de la première sous-chaîne et xor(sub1, sub2) est le XOR de la sous-chaîne donnée, cela est possible puisqu'il s'agit de chaînes binaires.

Exemple

Input1: string str1 = 10110 & string str2 = 11101 
Copier après la connexion
Output: 3
Copier après la connexion

Instructions

Nous pourrions choisir de nombreux ensembles de chaînes différents pour trouver la solution, mais choisir "101" parmi les deux chaînes entraînera XOR zéro, ce qui amènera la fonction à renvoyer la valeur maximale.

Input2: string str1 = 11111, string str2 = 10001 
Copier après la connexion
Output: 1 
Copier après la connexion

Instructions

Nous pouvons sélectionner "1" comme sous-chaîne, ce qui entraînera cette sortie et si nous sélectionnons une autre chaîne, cela entraînera une valeur inférieure.

Méthode naïve

Dans cette méthode, nous trouverons toutes les sous-chaînes puis les comparerons pour trouver la solution, mais cette solution n'est pas efficace et prend beaucoup de temps et d'espace.

La complexité temporelle moyenne de la génération de sous-chaînes de longueur x est N^2, puis la comparaison de chaque sous-chaîne coûtera N^2 de plus. De plus, nous devons également trouver le XOR de la sous-chaîne donnée, ce qui coûte également un facteur supplémentaire de N, ce qui signifie que N^5 sera la complexité temporelle du code ci-dessus, ce qui est très inefficace.

Méthode efficace

Idées

L'idée ici vient de la simple observation selon laquelle à mesure que la valeur XOR augmente, la réponse diminue toujours. Par conséquent, afin de maximiser la valeur de retour de la fonction, nous devons réduire autant que possible la valeur XOR.

Dans le cas où les deux sous-chaînes sont nulles, la valeur XOR minimale pouvant être atteinte est zéro. Par conséquent, ce problème est en fait dérivé du problème de sous-chaîne commun le plus long.

Lorsque le XOR est nul, la partie dividende est 1, donc la réponse finale sera la longueur de la plus grande sous-chaîne commune.

Mise en œuvre

Nous avons vu l'idée pour résoudre le problème, regardons les étapes pour implémenter le code -

  • Nous allons créer une fonction qui acceptera deux chaînes données en entrée et renverra une valeur entière, qui sera notre résultat final.

  • Dans la fonction, nous obtenons d'abord la longueur de la chaîne, puis créons un vecteur 2D de la taille multipliée par la chaîne donnée.

  • Nous utiliserons des boucles for imbriquées pour parcourir la chaîne et obtenir la plus grande sous-chaîne commune.

  • À chaque itération, nous vérifierons si les indices actuels des deux chaînes correspondent, puis nous obtiendrons la valeur du vecteur du dernier index des deux chaînes.

  • Sinon, nous définirions simplement l'indice actuel du vecteur à zéro.

  • De plus, nous maintiendrons une variable pour maintenir un décompte de la longueur maximale de la sous-chaîne commune.

  • Enfin, nous renverrons la réponse et l'imprimerons dans la fonction principale.

Exemple

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

Sortie

The maximum score for a given function by selecting equal length substrings from given binary strings is 3
Copier après la connexion

Complexité temporelle et spatiale

La complexité temporelle du code ci-dessus est O(N^2) car nous utilisons des boucles for imbriquées et itérons N fois à chaque fois.

Puisque nous utilisons un tableau bidimensionnel pour stocker des éléments, la complexité spatiale du code ci-dessus est O(N^2).

Conclusion

Dans ce tutoriel, nous codons pour implémenter le score maximum d'une fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir d'une chaîne binaire donnée. Nous avons déjà évoqué cette approche naïve et extrêmement inefficace. En fonction de la fonction donnée, la valeur du XOR est plus petite, nous rendons donc le XOR nul en obtenant la sous-chaîne commune la plus longue en complexité temporelle O(N^2).

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
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
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 utiliser la fonction LOCATE dans MySQL pour trouver la position d'une sous-chaîne dans une chaîne Comment utiliser la fonction LOCATE dans MySQL pour trouver la position d'une sous-chaîne dans une chaîne Jul 25, 2023 am 09:45 AM

Comment utiliser la fonction LOCATE dans MySQL pour trouver la position d'une sous-chaîne dans une chaîne. Dans MySQL, de nombreuses fonctions peuvent être utilisées pour traiter des chaînes. Parmi elles, la fonction LOCATE est une fonction très utile qui peut être utilisée pour trouver la position d'une sous-chaîne dans une chaîne. La syntaxe de la fonction LOCATE est la suivante : LOCATE(substring,string,[position]) où substring est la sous-chaîne à trouver et string est la sous-chaîne à trouver.

Compter le nombre d'occurrences d'une sous-chaîne de manière récursive en Java Compter le nombre d'occurrences d'une sous-chaîne de manière récursive en Java Sep 17, 2023 pm 07:49 PM

Étant donné deux chaînes str_1 et str_2. Le but est de compter le nombre d'occurrences de la sous-chaîne str2 dans la chaîne str1 en utilisant une procédure récursive. Une fonction récursive est une fonction qui s'appelle dans sa définition. Si str1 est "Je sais que vous savez que je sais" et str2 est "savoir", le nombre d'occurrences est de -3 Comprenons à travers des exemples. Par exemple, entrez str1="TPisTPareTPamTP", str2="TP" ; sortie Countofoccurrencesofasubstringrecursi.

La fonction strtok_r() est une fonction en langage C. Sa fonction est de diviser une chaîne en une série de sous-chaînes. La fonction strtok_r() est une fonction en langage C. Sa fonction est de diviser une chaîne en une série de sous-chaînes. Aug 26, 2023 am 09:45 AM

Cette fonction est similaire à la fonction strtok(). La seule différence clé est _r, qui est appelée fonction réentrante. Les fonctions réentrantes sont des fonctions qui peuvent être interrompues lors de l'exécution. Ce type de fonction peut être utilisé pour reprendre l'exécution. Par conséquent, les fonctions réentrantes sont thread-safe, ce qui signifie qu’elles peuvent être interrompues en toute sécurité par les threads sans causer de dommages. La fonction strtok_r() a un paramètre supplémentaire appelé contexte. De cette façon, la fonction peut être restaurée au bon endroit. La syntaxe de la fonction strtok_r() est la suivante : #include<string.h>char*strtok_r(char*string,constchar*limiter,char**

Sous-séquence non croissante la plus longue dans une chaîne binaire Sous-séquence non croissante la plus longue dans une chaîne binaire Sep 07, 2023 pm 11:13 PM

Dans ce problème, nous devons trouver la sous-séquence non croissante la plus longue d’une chaîne donnée. Non croissant signifie que les caractères sont identiques ou classés par ordre décroissant. Étant donné que les chaînes binaires ne contiennent que « 0 » et « 1 », la chaîne résultante doit soit commencer par « 1 » et se terminer par « 0 », soit commencer et se terminer par « 0 » ou « 1 ». Pour résoudre ce problème, nous allons compter le préfixe « 1 » et le suffixe « 0 » à chaque position de la chaîne et trouver la somme maximale du préfixe « 1 » et du suffixe « 0 ». Énoncé du problème - On nous donne une chaîne binaire str. Nous devons trouver la sous-séquence non croissante la plus longue de la chaîne donnée. Exemple Input–str="010100"Output–4 illustre le plus long fichier non récursif

En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire Aug 31, 2023 pm 02:05 PM

La fonction pack() regroupe les données dans une chaîne binaire. Syntaxe pack(format,args) Format des paramètres - le format à utiliser. Voici les valeurs possibles - a - chaîne remplie NUL A - chaîne remplie d'espaces h - chaîne hexadécimale, petit quartet en premier H - chaîne hexadécimale, haut quartet en premier c - caractère signé C - caractère non signé s - court signé (toujours 16 bits , ordre des octets machine) S - court non signé (toujours 16 bits, ordre des octets machine) n - court non signé (toujours 16 bits, ordre des octets big endian) v - court non signé (toujours 16 bits, ordre des octets small endian) i - entier signé (dépend de la taille de la machine et de l'ordre des octets) I - Aucun entier signé (en fonction de

Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Sep 05, 2023 am 09:01 AM

Dans le problème donné, on nous donne une chaîne composée de 0 et 1 ; nous devons trouver le nombre total de toutes les permutations commençant par 1. Puisque la réponse peut être un nombre énorme, nous la prenons modulo 1000000007 et la produisons. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Nous allons résoudre ce problème en appliquant des mathématiques combinatoires et en mettant en place des formules. Méthode de solution Dans cette méthode, nous compterons le nombre de 0 et de 1. Supposons maintenant que n soit le nombre de 1 qui apparaissent dans notre chaîne et que m soit le nombre de 0 qui apparaissent dans notre chaîne.

PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne Mar 21, 2024 am 10:31 AM

Cet article expliquera en détail comment PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence, j'espère que vous finirez de lire. cet article. Vous pouvez tirer quelque chose de cet article. Utilisez la fonction substr() en PHP pour extraire des sous-chaînes d'une chaîne. La fonction substr() peut extraire des caractères dans une plage spécifiée d'une chaîne. La syntaxe est la suivante : substr(string,start,length) où : string : la chaîne d'origine à partir de laquelle la sous-chaîne doit être extraite. start : L'index de la position de départ de la sous-chaîne (à partir de 0). length (facultatif) : la longueur de la sous-chaîne. Si non précisé, alors

Expression régulière PHP : Comment extraire des caractères spécifiques d'une chaîne vers une sous-chaîne à la fin Expression régulière PHP : Comment extraire des caractères spécifiques d'une chaîne vers une sous-chaîne à la fin Jun 22, 2023 pm 05:33 PM

Les expressions régulières sont un puissant outil de traitement de texte qui peut être utilisé pour faire correspondre des chaînes dans des modèles spécifiques. En PHP, les expressions régulières sont couramment utilisées dans le traitement des chaînes, la validation des formulaires, la recherche et le remplacement, etc. Cet article explique comment utiliser les expressions régulières de PHP pour extraire des caractères spécifiques d'une chaîne vers la sous-chaîne à la fin. Tout d’abord, regardons un exemple. Supposons que nous ayons une chaîne $str qui contient plusieurs URL commençant par "http://" et que nous souhaitions extraire ces URL et les stocker dans un

See all articles