Table of Contents
Example
grammar
parameter
algorithm
输出
结论
Home Backend Development C++ Using policy-based data structures for reverse counting

Using policy-based data structures for reverse counting

Sep 02, 2023 pm 11:45 PM
data structure Strategy Counting in reverse order

Using policy-based data structures for reverse counting

We will use the g header file to compile the code in the C compiler. g is a Linux-based header file for compiling code for policy-based data structures in C. Policy-based data structures are structures used for high performance and flexibility in your code. Since these data structures are very rich, we can use them for many functions such as searching the index for an element, inserting an element into an index position, removing an element from an index range, etc.

The Chinese translation of

Example

is:

Example

Let’s take an example of reversing counting -

Suppose the internal traversal to build the tree is 1,2,3,4,5, when we traverse to reverse it, the form of the tree becomes 5,4,3,2 ,1.

Let us take the following tree structure as input

 < 5, 4, 3, 2, 1 >
Copy after login

The given structure tree length is 4. Now we will consider the following steps to understand the process of inversion.

Step 1 - Element starts with index[0] i.e. 5, and paired with every element until index[4] is 1. So the total count between indexes 0 and 4 is 4.

(5…4), (5…3), (5…2), (5…1)
Copy after login

Step 2 - Elements start from index[1] i.e. 4, and paired with each element until index[4 ] is 1. Therefore, the total count between indexes 1 to 4 is 3.

(4…3), (4…2), (4…1)
Copy after login

Step 3 - Element starts with index[2] i.e. 3, and paired with each element until index[4] That is 1. So the total count between indexes 2 and 4 is 2.

(3…2), (3…1)
Copy after login

Step 4 - Elements start at index[3], i.e. 2, and are paired with each element until index[4 ], that is, 1. Therefore, the total count between index 3 and 4 is 1.

(2…1)
Copy after login

This way we can write the inversion of a given construction tree. Therefore, the total number of reversals of count(4 3 2 1) is 10.

In this article, we will use policy-based data structures to solve the inversion counting problem.

grammar

Use the following syntax in the program -

vector <data_type> vector_variable_name
Copy after login

parameter

data_type - The data type used for vectors.

vector_variable_name − Variable name to use for vectors.

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

parameter

typedef - This is a reserved keyword used in C programs.

int − Data type of inserted array item.

null_type - This is a mapping strategy and is used as a collection. If we want to map, then the second parameter must be the map type.

less - Comparison between two functions.

rb_tree_tag - Tree type for red-black trees based on insertion and deletion.

tree_order_statistics_node_update − This is based on the header file ‘tree_policy.hpp’, which contains various operations for updating the tree container of node variants. Therefore, we will keep track of the nodes in the subtree.

pbds - Variable name for the policy-based data structure.

order_of_key()
Copy after login

algorithm

  • We will use the header files iostream and vector to start the program. Then we will mention the header file policy-based data structures (pbds) based on g .

  • We will use the necessary namespace based on the data structure according to GNU's policy, that is, 'using namespace __gnu_pbds'. It will initialize the tree according to the format of pbds, i.e. 'typedef tree, rb_tree_tag, tree_order_statistics_node_update> pbds;By using these, we will keep track of the nodes in the subtree .

  • We are defining a function definition of double long data type 'inversion_Cnt', which accepts a vector integer parameter and stores the address of the array element.

  • We store ‘0’ into the variable ‘cnt’ in order to process the reverse count of the total pairs.

  • The object named pb is then initialized to a strategy-based variable 'pbds' to operate on the insertion and sorting of array elements.

  • After initializing the variable, use a for loop to iterate over the array elements. This array element will be reversed according to the following two statements -

    • cnt = i-pb.order_of_key(arr[i]); - By calculating <5,4>,< 等对值来返回第二个参数中的最小值5,3>,<5,2>,<5,1>,<4,3>,<4,2> wait.

    • pb.insert(arr[i]); - By using the predefined function insert(), we add the inversion of the array element, i.e. arr[i].

  • We start the main function and declare the vector array input.

  • Then we use the variable 'count' to call the function 'inversion_Cnt'.

  • Finally, the ‘count’ variable gives the total count of inversions in the array.

The Chinese translation of

Example

is:

Example

In this program, we will use strategic data structures to calculate the reverse of a number.

#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 : "<
Copy after login

输出

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

结论

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

The above is the detailed content of Using policy-based data structures for reverse counting. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Compare complex data structures using Java function comparison Compare complex data structures using Java function comparison Apr 19, 2024 pm 10:24 PM

When using complex data structures in Java, Comparator is used to provide a flexible comparison mechanism. Specific steps include: defining the comparator class, rewriting the compare method to define the comparison logic. Create a comparator instance. Use the Collections.sort method, passing in the collection and comparator instances.

Java data structures and algorithms: in-depth explanation Java data structures and algorithms: in-depth explanation May 08, 2024 pm 10:12 PM

Data structures and algorithms are the basis of Java development. This article deeply explores the key data structures (such as arrays, linked lists, trees, etc.) and algorithms (such as sorting, search, graph algorithms, etc.) in Java. These structures are illustrated through practical examples, including using arrays to store scores, linked lists to manage shopping lists, stacks to implement recursion, queues to synchronize threads, and trees and hash tables for fast search and authentication. Understanding these concepts allows you to write efficient and maintainable Java code.

exe to php: an effective strategy to achieve function expansion exe to php: an effective strategy to achieve function expansion Mar 04, 2024 pm 09:36 PM

EXE to PHP: An effective strategy to achieve function expansion. With the development of the Internet, more and more applications have begun to migrate to the web to achieve wider user access and more convenient operations. In this process, the demand for converting functions originally run as EXE (executable files) into PHP scripts is also gradually increasing. This article will discuss how to convert EXE to PHP to achieve functional expansion, and give specific code examples. Why Convert EXE to PHP Cross-Platformness: PHP is a cross-platform language

PHP data structure: The balance of AVL trees, maintaining an efficient and orderly data structure PHP data structure: The balance of AVL trees, maintaining an efficient and orderly data structure Jun 03, 2024 am 09:58 AM

AVL tree is a balanced binary search tree that ensures fast and efficient data operations. To achieve balance, it performs left- and right-turn operations, adjusting subtrees that violate balance. AVL trees utilize height balancing to ensure that the height of the tree is always small relative to the number of nodes, thereby achieving logarithmic time complexity (O(logn)) search operations and maintaining the efficiency of the data structure even on large data sets.

In-depth understanding of reference types in Go language In-depth understanding of reference types in Go language Feb 21, 2024 pm 11:36 PM

Reference types are a special data type in the Go language. Their values ​​do not directly store the data itself, but the address of the stored data. In the Go language, reference types include slices, maps, channels, and pointers. A deep understanding of reference types is crucial to understanding the memory management and data transfer methods of the Go language. This article will combine specific code examples to introduce the characteristics and usage of reference types in Go language. 1. Slices Slices are one of the most commonly used reference types in the Go language.

Astar staking principle, income dismantling, airdrop projects and strategies & operation nanny-level strategy Astar staking principle, income dismantling, airdrop projects and strategies & operation nanny-level strategy Jun 25, 2024 pm 07:09 PM

Table of Contents Astar Dapp Staking Principle Staking Revenue Dismantling of Potential Airdrop Projects: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Staking Strategy & Operation "AstarDapp Staking" has been upgraded to the V3 version at the beginning of this year, and many adjustments have been made to the staking revenue rules. At present, the first staking cycle has ended, and the "voting" sub-cycle of the second staking cycle has just begun. To obtain the "extra reward" benefits, you need to grasp this critical stage (expected to last until June 26, with less than 5 days remaining). I will break down the Astar staking income in detail,

MyBatis cache strategy analysis: best practices for first-level cache and second-level cache MyBatis cache strategy analysis: best practices for first-level cache and second-level cache Feb 21, 2024 pm 05:51 PM

MyBatis cache strategy analysis: best practices for first-level cache and second-level cache When developing using MyBatis, we often need to consider the choice of cache strategy. The cache in MyBatis is mainly divided into two types: first-level cache and second-level cache. The first-level cache is a SqlSession-level cache, while the second-level cache is a Mapper-level cache. In practical applications, rational use of these two caches is an important means to improve system performance. This article will use specific code examples to analyze a MyBatis

Full analysis of Java collection framework: dissecting data structure and revealing the secret of efficient storage Full analysis of Java collection framework: dissecting data structure and revealing the secret of efficient storage Feb 23, 2024 am 10:49 AM

Overview of Java Collection Framework The Java collection framework is an important part of the Java programming language. It provides a series of container class libraries that can store and manage data. These container class libraries have different data structures to meet the data storage and processing needs in different scenarios. The advantage of the collection framework is that it provides a unified interface, allowing developers to operate different container class libraries in the same way, thereby reducing the difficulty of development. Data structures of the Java collection framework The Java collection framework contains a variety of data structures, each of which has its own unique characteristics and applicable scenarios. The following are several common Java collection framework data structures: 1. List: List is an ordered collection that allows elements to be repeated. Li

See all articles