目录
Example
示例
语法
参数
算法
输出
结论
首页 后端开发 C++ 使用基于策略的数据结构进行逆序计数

使用基于策略的数据结构进行逆序计数

Sep 02, 2023 pm 11:45 PM
数据结构 策略 逆序计数

使用基于策略的数据结构进行逆序计数

我们将使用 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()
登录后复制

算法

  • 我们将使用头文件iostreamvector启动程序。然后我们将提到基于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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用Java函数比较进行复杂数据结构比较 使用Java函数比较进行复杂数据结构比较 Apr 19, 2024 pm 10:24 PM

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

Java数据结构与算法:深入详解 Java数据结构与算法:深入详解 May 08, 2024 pm 10:12 PM

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

exe转php:实现功能扩展的有效策略 exe转php:实现功能扩展的有效策略 Mar 04, 2024 pm 09:36 PM

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

Astar质押原理、收益拆解、空投项目及策略 & 操作保姆级攻略 Astar质押原理、收益拆解、空投项目及策略 & 操作保姆级攻略 Jun 25, 2024 pm 07:09 PM

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

深入了解Go语言中的引用类型 深入了解Go语言中的引用类型 Feb 21, 2024 pm 11:36 PM

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

PHP数据结构:AVL树的平衡之道,维持高效有序的数据结构 PHP数据结构:AVL树的平衡之道,维持高效有序的数据结构 Jun 03, 2024 am 09:58 AM

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

MyBatis缓存策略解析:一级缓存与二级缓存的最佳实践 MyBatis缓存策略解析:一级缓存与二级缓存的最佳实践 Feb 21, 2024 pm 05:51 PM

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

Java集合框架全解析:解剖数据结构,揭秘高效存储之道 Java集合框架全解析:解剖数据结构,揭秘高效存储之道 Feb 23, 2024 am 10:49 AM

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

See all articles