0

0

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

王林

王林

发布时间:2023-09-02 23:45:06

|

966人浏览过

|

来源于tutorialspoint

转载

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

我们将使用 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  vector_variable_name

参数

data_type - 用于向量的数据类型。

vector_variable_name − 用于向量的变量名称。

typedef tree, rb_tree_tag, tree_order_statistics_node_update> pbds;

参数

typedef - 这是 C++ 程序中使用的保留关键字。

int − 插入数组项的数据类型。

null_type - 这是一个映射策略并作为一个集合使用。如果我们想要映射,那么第二个参数必须是映射类型。

less - 两个函数之间的比较。

E购-新零售系统
E购-新零售系统

“米烁云货宝”,是一款基于云计算的Saas模式新零售系统。以互联网为基础,通过大数据、人工智能等先进技术,对商品的生产、流通、销售、服务等环节转型升级改造,进而重塑业态结构与生态圈。并对线上交易运营服务、线下体验购买及现代物流进行深度融合,所形成的零售新模式。

下载

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]); - 通过计算 ,、、、、 等。

    • 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, 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++程序用于操作系统,它有一个跟踪器来记录系统的每一个信息。与此程序相同,我们看到子树如何跟踪其每个节点。

相关专题

更多
excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

20

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

65

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

C++的Top K问题怎么解决
C++的Top K问题怎么解决

TopK问题可通过优先队列、partial_sort和nth_element解决:优先队列维护大小为K的堆,适合流式数据;partial_sort对前K个元素排序,适用于需有序结果且K较小的场景;nth_element基于快速选择,平均时间复杂度O(n),效率最高但不保证前K内部有序。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12

2025.12.29

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

134

2025.12.29

抖音网页版入口在哪(最新版)
抖音网页版入口在哪(最新版)

抖音网页版可通过官网https://www.douyin.com进入,打开浏览器输入网址后,可选择扫码或账号登录,登录后同步移动端数据,未登录仅可浏览部分推荐内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

63

2025.12.29

快手直播回放在哪看教程
快手直播回放在哪看教程

快手直播回放需主播开启功能才可观看,主要通过三种路径查看:一是从“我”主页进入“关注”标签再进主播主页的“直播”分类;二是通过“历史记录”中的“直播”标签页找回;三是进入“个人信息查阅与下载”里的“直播回放”选项。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 1.9万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号