Maison> développement back-end> C++> le corps du texte

Nombre minimum de caractères à supprimer pour trier une chaîne binaire afin qu'elle soit par ordre croissant

WBOY
Libérer: 2023-09-08 22:49:02
avant
1239 Les gens l'ont consulté

Nombre minimum de caractères à supprimer pour trier une chaîne binaire afin quelle soit par ordre croissant

En informatique, la manipulation de chaînes est un sujet important, impliquant des opérations telles que l'épissage, les sous-chaînes et l'inversion. Un problème courant lié à la manipulation de chaînes consiste à supprimer tous les zéros d’une chaîne binaire. Dans cet article, nous discuterons d'un algorithme qui utilise un nombre minimum de retournements de paires non adjacentes pour résoudre ce problème.

Énoncé du problème

Étant donné une chaîne binaire, nous devons supprimer tous les 0 de la chaîne en utilisant un nombre minimum de retournements de paires non adjacentes. Flip est défini comme la sélection de deux personnages adjacents et leur échange. En d’autres termes, nous devons trouver le nombre minimum de retournements requis pour amener tous les 0 de la chaîne à la fin de la chaîne.

Méthode

Nous pouvons utiliser un algorithme glouton pour résoudre ce problème. Nous pouvons commencer par le côté gauche de la chaîne et garder une trace du dernier index où nous avons basculé 0 jusqu'à la fin. Pour chaque 0 rencontré, nous échangeons sa position avec le dernier 0 inversé, en le déplaçant à la fin de la chaîne. Si 1 est rencontré, nous passons simplement à l’index suivant.

Regardons l'algorithme en détail -

  • Initialisez les deux variables "lastFlipped" et "flipCount" à -1 et 0 respectivement.

  • Traversez une chaîne binaire de gauche à droite.

  • Si le caractère actuel est "0", échangez-le avec le caractère à l'index "lastFlipped + 1" et incrémentez la variable "lastFlipped".

  • Incrémentez la variable "flipCount" pour chaque opération d'échange.

  • Une fois le parcours terminé, tous les 0 seront à la fin de la chaîne et "flipCount" contiendra le nombre minimum de retournements requis pour supprimer tous les 0.

Exemple

C'est le code C++ utilisé pour implémenter l'algorithme ci-dessus -

#include  #include  using namespace std; int minNonAdjacentPairFlips(string s) { int lastFlipped = -1; int flipCount = 0; for (int i = 0; i < s.length(); i++) { if (s[i] == '0') { swap(s[i], s[lastFlipped + 1]); lastFlipped++; flipCount++; } } return flipCount; } int main() { string s = "100101000"; cout << "Binary String: " << s << endl; cout << "Minimum Non-adjacent Pair Flips: " << minNonAdjacentPairFlips(s) << endl; return 0; }
Copier après la connexion

Sortie

Binary String: 100101000 Minimum Non-adjacent Pair Flips: 6
Copier après la connexion

Explication des cas de tests

Prenons la chaîne binaire « 100101000 » comme exemple. Nous devons supprimer tous les 0 de la chaîne en utilisant un nombre minimum de paires non adjacentes.

  • Initialement, "lastFlipped" et "flipCount" sont respectivement définis sur -1 et 0.

  • Nous commençons à parcourir la chaîne de gauche à droite.

  • A l'indice 1, on rencontre un '0'. Nous l'échangeons avec le caractère à l'index "lastFlipped + 1" (c'est-à-dire l'index 0) et incrémentons "lastFlipped" à 0. La chaîne devient « 010101000 ». "flipCount" est augmenté à 1.

  • À l'indice 4, nous rencontrons un autre « 0 ». Nous l'échangeons avec le caractère à l'index "lastFlipped + 1" (c'est-à-dire l'index 1) et incrémentons "lastFlipped" à 1. La chaîne devient « 011010000 ». "flipCount" est augmenté à 2.

  • A l'indice 5, on rencontre un '1'. On passe juste à l'index suivant

Conclusion

Dans cet article, nous discutons d'un algorithme permettant de supprimer tous les 0 d'une chaîne binaire en utilisant un nombre minimum de retournements de paires non adjacentes. L’approche utilisée par cet algorithme est gourmande, ce qui le rend efficace et simple à mettre en œuvre. Nous fournissons également du code C++ pour implémenter l'algorithme ainsi que des exemples de cas de test.

Ce problème peut également être résolu à l'aide de la programmation dynamique, mais l'algorithme glouton offre une solution plus simple et plus rapide. La complexité temporelle de cet algorithme est O(n), où n est la longueur de la chaîne binaire.

En résumé, l'algorithme de retournement de paires non adjacentes minimales est un outil utile dans les opérations sur les chaînes et peut être appliqué à diverses situations.

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!

Étiquettes associées:
source:tutorialspoint.com
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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!