使用基于策略的数据结构进行逆序计数
我们将使用 g++ 头文件在 C++ 编译器中编译代码。 g++是一个基于Linux的头文件,用于在C++中编译基于策略的数据结构的代码。基于策略的数据结构是用于代码的高性能和灵活性的结构。由于这些数据结构非常丰富,我们可以将它们用于许多功能,例如搜索元素的索引、将元素插入到索引位置、从索引范围中删除元素等。
Example
的中文翻译为:示例
让我们举一个反转计数的例子 -
假设构建树的内部遍历是1,2,3,4,5,当我们遍历以反转它时,树的形式变为5,4,3,2,1.
让我们将以下树结构作为输入
< 5, 4, 3, 2, 1 >
给定的结构树长度为4。现在我们将考虑以下步骤来理解反转的过程。
步骤 1 - 元素以 index[0] 开头,即 5, 并与每个元素配对,直到 index [4]即1。因此索引 0 到 4 之间的总计数为 4。
(5…4), (5…3), (5…2), (5…1)
第二步 - 元素从 index[1] 开始,即 4, 并与每个元素配对,直到 index[4] 即 1。因此,索引 1 到 4 之间的总计数为 3。
(4…3), (4…2), (4…1)
步骤 3 - 元素以 index[2] 开头,即 3, 并与每个元素配对,直到 index [4] 即 1。因此索引 2 到 4 之间的总计数为 2。
(3…2), (3…1)
第4步 - 元素从 index[3] 开始,即 2,并与每个元素配对,直到 index[4],即 1。因此,索引3到4之间的总计数为 1。
(2…1)
这样我们可以编写给定构造树的反转。因此,count(4+3+2+1)的总反转数为10。
在本文中,我们将使用基于策略的数据结构来解决反转计数问题。
语法
程序中使用以下语法 -
vector <data_type> vector_variable_name
参数
data_type - 用于向量的数据类型。
vector_variable_name − 用于向量的变量名称。
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
参数
typedef - 这是 C++ 程序中使用的保留关键字。
int − 插入数组项的数据类型。
null_type - 这是一个映射策略并作为一个集合使用。如果我们想要映射,那么第二个参数必须是映射类型。
less
rb_tree_tag - 用于基于插入和删除的红黑树的树类型。
tree_order_statistics_node_update − 这是基于头文件‘tree_policy.hpp’的,该文件包含了用于更新节点变体的树形容器的各种操作。因此,我们将跟踪子树中的节点。
pbds - 基于策略的数据结构的变量名称。
order_of_key()
算法
我们将使用头文件iostream和vector启动程序。然后我们将提到基于g++的头文件基于策略的数据结构(pbds)。
我们将根据GNU的策略基于数据结构使用必要的命名空间,即‘using namespace __gnu_pbds’。它将根据pbds初始化树的格式,即‘typedef tree
, rb_tree_tag, tree_order_statistics_node_update> pbds; 通过使用这些,我们将跟踪子树中的节点。我们正在定义一个双长数据类型的函数定义‘inversion_Cnt’,它接受一个向量整数的参数并存储数组元素的地址。
我们将‘0’存储到变量‘cnt’中,以便处理总对的逆序计数。
然后将名为pb的对象初始化为基于策略的变量‘pbds’,以便对数组元素的插入和排序进行操作。
在初始化变量之后,使用for循环来迭代数组元素。这个数组元素将根据以下两个语句进行反转操作 -
cnt += i-pb.order_of_key(arr[i]); - 通过计算 <5,4>,< 等对值来返回第二个参数中的最小值5,3>、<5,2>、<5,1>、<4,3>、<4,2> 等。
pb.insert(arr[i]); - 通过使用预定义函数 insert(),我们添加数组元素的反转,即 arr[i]。
我们开始主函数,并声明向量数组 input。
然后我们使用变量‘count’调用函数‘inversion_Cnt’。
最后,‘count’变量给出了数组中反转的总计数。
Example
的中文翻译为:示例
在这个程序中,我们将使用策略性的数据结构来计算数字的逆序数。
#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++程序用于操作系统,它有一个跟踪器来记录系统的每一个信息。与此程序相同,我们看到子树如何跟踪其每个节点。
以上是使用基于策略的数据结构进行逆序计数的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Java中比较复杂数据结构时,使用Comparator提供灵活的比较机制。具体步骤包括:定义比较器类,重写compare方法定义比较逻辑。创建比较器实例。使用Collections.sort方法,传入集合和比较器实例。

数据结构和算法是Java开发的基础,本文深入探讨Java中的关键数据结构(如数组、链表、树等)和算法(如排序、搜索、图算法等)。这些结构通过实战案例进行说明,包括使用数组存储分数、使用链表管理购物清单、使用栈实现递归、使用队列同步线程以及使用树和哈希表进行快速搜索和身份验证等。理解这些概念可以编写高效且可维护的Java代码。

EXE转PHP:实现功能扩展的有效策略随着互联网的发展,越来越多的应用程序开始向web化迁移,以实现更大范围的用户访问和更便捷的操作。在这个过程中,将原本以EXE(执行文件)方式运行的功能转化为PHP脚本的需求也在逐渐增加。本文将探讨如何将EXE转换为PHP来实现功能扩展,同时给出具体的代码示例。为什么将EXE转换为PHP跨平台性:PHP是一种跨平台的语言

目录Astar Dapp 质押原理质押收益 拆解潜在空投项目:AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap 质押策略 & 操作“AstarDapp质押”今年初已升级至V3版本,对质押收益规则做了不少调整。目前首个质押周期已结束,第二质押周期的“投票”子周期刚开始。要获取“额外奖励”收益,需把握此关键阶段(预计持续至6月26日,现余不到5天)。我将细致拆解Astar质押收益,

引用类型在Go语言中是一种特殊的数据类型,它们的值并非直接存储数据本身,而是存储数据的地址。在Go语言中,引用类型包括slices、maps、channels和指针。深入了解引用类型对于理解Go语言的内存管理和数据传递方式至关重要。本文将结合具体的代码示例,介绍Go语言中引用类型的特点和使用方法。1.切片(Slices)切片是Go语言中最常用的引用类型之一

AVL树是一种平衡二叉搜索树,确保快速高效的数据操作。为了实现平衡,它执行左旋和右旋操作,调整违反平衡的子树。AVL树利用高度平衡,确保树的高度相对于节点数始终较小,从而实现对数时间复杂度(O(logn))的查找操作,即使在大型数据集上也能保持数据结构的效率。

MyBatis缓存策略解析:一级缓存与二级缓存的最佳实践在使用MyBatis进行开发时,我们经常需要考虑缓存策略的选择。MyBatis中的缓存主要分为一级缓存和二级缓存两种。一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。在实际应用中,合理地使用这两种缓存是提高系统性能的重要手段。本文将通过具体的代码示例来解析MyBatis中一

Java集合框架概述Java集合框架是Java编程语言的重要组成部分,它提供了一系列可以存储和管理数据的容器类库。这些容器类库具有不同的数据结构,可以满足不同场景下的数据存储和处理需求。集合框架的优势在于它提供了统一的接口,使得开发人员可以使用相同的方式来操作不同的容器类库,从而降低了开发难度。Java集合框架的数据结构Java集合框架中包含多种数据结构,每种数据结构都有其独特的特性和适用场景。下面是几种常见的Java集合框架数据结构:1.List:List是一个有序的集合,它允许元素重复。Li
