Maison  >  Article  >  développement back-end  >  Utilisation de structures de données basées sur des politiques pour le comptage inversé

Utilisation de structures de données basées sur des politiques pour le comptage inversé

王林
王林avant
2023-09-02 23:45:06731parcourir

Utilisation de structures de données basées sur des politiques pour le comptage inversé

Nous compilerons le code dans le compilateur C++ en utilisant les fichiers d'en-tête g++. g++ est un en-tête basé sur Linux permettant de compiler du code pour des structures de données basées sur des politiques en C++. Les structures de données basées sur des stratégies sont des structures utilisées pour des performances élevées et une flexibilité dans votre code. Étant donné que ces structures de données sont très riches, nous pouvons les utiliser pour de nombreuses fonctions telles que rechercher un élément dans l'index, insérer un élément dans une position d'index, supprimer un élément d'une plage d'index, etc.

La traduction chinoise de

Exemple

est :

Exemple

Prenons un exemple de comptage inversé -

Supposons que le parcours interne pour construire l'arbre soit 1,2,3,4,5, lorsque nous le traversons pour l'inverser, la forme de l'arbre devient 5,4,3,2,1.

Prenons la structure arborescente suivante comme entrée

 < 5, 4, 3, 2, 1 >

La longueur de l'arbre de structure donnée est de 4. Nous allons maintenant considérer les étapes suivantes pour comprendre le processus d’inversion.

Étape 1 - Les éléments commencent par index[0] qui est 5, et associés à chaque élément jusqu'à index [4] qui est 1. Le nombre total entre les indices 0 et 4 est donc 4.

(5…4), (5…3), (5…2), (5…1)

Étape 2 - Les éléments commencent à partir de index[1] qui est 4, et sont associés à chaque élément jusqu'à index[4] qui est 1. Par conséquent, le nombre total entre les index 1 à 4 est 3.

(4…3), (4…2), (4…1)

Étape 3 - Les éléments commencent par index[2] qui vaut 3, et sont associés à chaque élément jusqu'à index [4] qui vaut 1. Le décompte total entre les indices 2 et 4 est donc 2.

(3…2), (3…1)

Étape 4 - Les éléments commencent à index[3], qui est 2, et sont associés à chaque élément jusqu'à index[4], qui est 1. Par conséquent, le nombre total entre les indices 3 et 4 est 1.

(2…1)

De cette façon, nous pouvons écrire l'inversion d'un arbre de construction donné. Par conséquent, le nombre total d’inversions de count(4+3+2+1) est 10.

Dans cet article, nous utiliserons des structures de données basées sur des politiques pour résoudre le problème du comptage par inversion.

Grammaire

La syntaxe suivante est utilisée dans le programme -

vector <data_type> vector_variable_name

Paramètres

data_type - Type de données à utiliser pour les vecteurs.

vector_variable_name - Nom de la variable à utiliser pour les vecteurs.

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;

Paramètres

typedef - Il s'agit d'un mot-clé réservé utilisé dans les programmes C++.

int - Type de données de l'élément de tableau inséré.

null_type - Il s'agit d'une stratégie de cartographie utilisée comme une collection. Si nous voulons cartographier, alors le deuxième paramètre doit être le type de carte.

less - Comparaison entre deux fonctions.

rb_tree_tag - Type d'arbre pour les arbres rouge-noir basé sur l'insertion et la suppression.

tree_order_statistics_node_update - Ceci est basé sur le fichier d'en-tête 'tree_policy.hpp', qui contient diverses opérations pour mettre à jour le conteneur d'arborescence des variantes de nœud. Par conséquent, nous garderons une trace des nœuds du sous-arbre.

pbds - Noms de variables pour les structures de données basées sur des politiques.

order_of_key()

Algorithme

  • Nous utiliserons les fichiers d'en-tête iostream et vector pour lancer le programme. Ensuite, nous mentionnerons les structures de données basées sur les politiques des fichiers d'en-tête (pbds) basées sur g++.

  • Nous utiliserons l'espace de noms nécessaire en fonction de la structure des données conformément à la politique de GNU, qui est « en utilisant l'espace de noms __gnu_pbds ». Il initialisera le format de l'arbre en fonction de pbds, c'est-à-dire 'typedef tree, rb_tree_tag, tree_order_statistics_node_update>En les utilisant, nous garderons une trace des nœuds dans le sous-arbre.

  • Nous définissons une définition de fonction de type de données double long 'inversion_Cnt', qui prend un paramètre d'un entier vectoriel et stocke l'adresse de l'élément du tableau.

  • Nous stockons « 0 » dans la variable « cnt » afin de gérer le décompte inverse du total des paires.

  • L'objet nommé pb est ensuite initialisé avec une variable basée sur une politique 'pbds' pour opérer sur l'insertion et le tri des éléments du tableau.

  • Après avoir initialisé la variable, utilisez une boucle for pour parcourir les éléments du tableau. Cet élément du tableau sera inversé selon les deux instructions suivantes -

    • cnt += i-pb.order_of_key(arr[i]); - En calculant ,, , , , , etc.

    • pb.insert(arr[i]); - En utilisant la fonction prédéfinie insert(), on ajoute l'inversion de l'élément du tableau, c'est-à-dire arr[i].

  • Nous démarrons la fonction principale et déclarons l'entrée du tableau vectoriel.

  • Ensuite nous appelons la fonction ‘inversion_Cnt’ en utilisant la variable ‘count’.

  • Enfin, la variable ‘count’ donne le nombre total d’inversions dans le tableau.

La traduction chinoise de

Exemple

est :

Exemple

Dans ce programme, nous utiliserons des structures de données stratégiques pour calculer l'inverse d'un nombre.

#include 
#include 
// *******g++ header file*********
#include 
#include 

using namespace std;
using namespace __gnu_pbds;

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
double long inversion_Cnt( vector& arr) {
   double long cnt = 0;
   pbds pb;
   for(int i = 0; i < arr.size(); i++) {
      cnt += i-pb.order_of_key(arr[i]); 
      pb.insert(arr[i]); // add the array element 
   }
   return cnt;
}
int main() {
   vector arr = {5, 4, 3, 2, 1}; // The inversion of following input array is <5,4>, <5,3>, <5,2>, <5,1>, <4,3>, <4,2>, <4,1>, <3,2>, <3,1>, <2,1>
   double long count = inversion_Cnt(arr);
   cout<<"Total number of inversion count using Policy based data structure is : "<

输出

Total number of inversion count using Policy based data structure is : 10

结论

我们通过执行基于反转计数的程序来探索 Linux 头文件 (g++) 的概念。众所周知,C++程序用于操作系统,它有一个跟踪器来记录系统的每一个信息。与此程序相同,我们看到子树如何跟踪其每个节点。

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer