目錄
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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++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是一種跨平台的語言

PHP資料結構:AVL樹的平衡之道,維持高效有序的資料結構 PHP資料結構:AVL樹的平衡之道,維持高效有序的資料結構 Jun 03, 2024 am 09:58 AM

AVL樹是一種平衡二元搜尋樹,確保快速且有效率的資料操作。為了實現平衡,它執行左旋和右旋操作,調整違反平衡的子樹。 AVL樹利用高度平衡,確保樹的高度相對於節點數始終較小,從而實現對數時間複雜度(O(logn))的查找操作,即使在大型資料集上也能保持資料結構的效率。

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

引用類型在Go語言中是一種特殊的資料類型,它們的值並非直接儲存資料本身,而是儲存資料的位址。在Go語言中,引用型別包括slices、maps、channels和指標。深入了解引用類型對於理解Go語言的記憶體管理和資料傳遞方式至關重要。本文將結合具體的程式碼範例,介紹Go語言中引用類型的特點和使用方法。 1.切片(Slices)切片是Go語言中最常用的引用類型之一

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

目錄Astar Dapp 質押原理質押收益 拆解潛在空投項目:AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap 質押策略 & 操作“AstarDapp質押”今年初已升級至V3版本,對質押收益規則做了不少調整。目前首個質押週期已結束,第二質押週期的「投票」子週期剛開始。若要獲得「額外獎勵」收益,需掌握此關鍵階段(預計持續至6月26日,現餘不到5天)。我將細緻拆解Astar質押收益,

Java集合框架全解析:解剖資料結構,揭秘高效率儲存之道 Java集合框架全解析:解剖資料結構,揭秘高效率儲存之道 Feb 23, 2024 am 10:49 AM

Java集合框架概述Java集合框架是Java程式語言的重要組成部分,它提供了一系列可以儲存和管理資料的容器類別庫。這些容器類別庫具有不同的資料結構,可以滿足不同場景下的資料儲存和處理需求。集合框架的優點在於它提供了統一的接口,使得開發人員可以使用相同的方式來操作不同的容器類別庫,從而降低了開發難度。 Java集合框架的資料結構Java集合框架中包含多種資料結構,每種資料結構都有其獨特的特性和適用場景。以下是幾種常見的Java集合框架資料結構:1.List:List是一個有序的集合,它允許元素重複。 Li

MyBatis快取策略解析:一級快取與二級快取的最佳實踐 MyBatis快取策略解析:一級快取與二級快取的最佳實踐 Feb 21, 2024 pm 05:51 PM

MyBatis快取策略解析:一級快取與二級快取的最佳實踐在使用MyBatis進行開發時,我們經常需要考慮快取策略的選擇。 MyBatis中的快取主要分為一級快取和二級快取兩種。一級緩存是SqlSession層級的緩存,而二級緩存是Mapper層級的快取。在實際應用中,合理地使用這兩種快取是提高系統效能的重要手段。本文將透過具體的程式碼範例來解析MyBatis中一

See all articles