


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
Output: 3
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
Output: 1
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; }
Sortie
The maximum score for a given function by selecting equal length substrings from given binary strings is 3
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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. 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.

É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.

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**

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

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

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.

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

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
