Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan struktur data berasaskan dasar untuk pengiraan terbalik

Menggunakan struktur data berasaskan dasar untuk pengiraan terbalik

王林
王林ke hadapan
2023-09-02 23:45:06780semak imbas

Menggunakan struktur data berasaskan dasar untuk pengiraan terbalik

Kami akan menyusun kod dalam pengkompil C++ menggunakan fail pengepala g++. g++ ialah pengepala berasaskan Linux untuk menyusun kod untuk struktur data berasaskan dasar dalam C++. Struktur data berasaskan dasar ialah struktur yang digunakan untuk prestasi tinggi dan fleksibiliti dalam kod anda. Memandangkan struktur data ini sangat kaya, kami boleh menggunakannya untuk banyak fungsi seperti mencari indeks untuk elemen, memasukkan elemen ke dalam kedudukan indeks, mengalih keluar elemen daripada julat indeks, dsb.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

Mari kita ambil contoh membalikkan mengira -

Andaikan lintasan dalaman untuk membina pokok ialah 1,2,3,4,5, apabila kita melintasi untuk membalikkannya, bentuk pokok itu menjadi 5,4,3,2,1.

Mari kita ambil struktur pokok berikut sebagai input

 < 5, 4, 3, 2, 1 >

Panjang pokok struktur yang diberikan ialah 4. Sekarang kita akan mempertimbangkan langkah-langkah berikut untuk memahami proses penyongsangan.

Langkah 1 - Elemen bermula dengan indeks[0] iaitu 5, dan dipasangkan dengan setiap elemen sehingga indeks [4] iaitu 1. Jadi jumlah kiraan antara indeks 0 dan 4 ialah 4.

(5…4), (5…3), (5…2), (5…1)

Langkah 2 - Elemen bermula dari indeks[1] iaitu 4, dan digandingkan dengan setiap elemen sehingga indeks[4] iaitu 1. Oleh itu, jumlah kiraan antara indeks 1 hingga 4 ialah 3.

(4…3), (4…2), (4…1)

Langkah 3 - Elemen bermula dengan indeks[2] iaitu 3, dan dipasangkan dengan setiap elemen sehingga indeks [4] iaitu 1. Jadi jumlah kiraan antara indeks 2 dan 4 ialah 2.

(3…2), (3…1)

Langkah 4 - Elemen bermula pada indeks[3], iaitu 2, dan digandingkan dengan setiap elemen sehingga indeks[4], iaitu 1. Oleh itu, jumlah kiraan antara indeks 3 dan 4 ialah 1.

(2…1)

Dengan cara ini kita boleh menulis penyongsangan pokok pembinaan yang diberikan. Oleh itu, jumlah bilangan pembalikan kiraan(4+3+2+1) ialah 10.

Dalam artikel ini, kami akan menggunakan struktur data berasaskan dasar untuk menyelesaikan masalah pengiraan penyongsangan.

Tatabahasa

Sintaks berikut digunakan dalam program -

vector <data_type> vector_variable_name

Parameter

data_type - Jenis data untuk digunakan untuk vektor.

nama_pembolehubah_vektor − Nama pembolehubah untuk digunakan bagi vektor.

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

Parameter

typedef - Ini ialah kata kunci simpanan yang digunakan dalam program C++.

int − Jenis data item tatasusunan yang disisipkan.

null_type - Ini adalah strategi pemetaan dan digunakan sebagai koleksi. Jika kita ingin memetakan, maka parameter kedua mestilah jenis peta.

less - Perbandingan antara dua fungsi.

rb_tree_tag - Jenis pokok untuk pokok merah-hitam berdasarkan sisipan dan pemadaman.

tree_order_statistics_node_update − Ini berdasarkan fail pengepala 'tree_policy.hpp', yang mengandungi pelbagai operasi untuk mengemas kini bekas pokok varian nod. Oleh itu, kami akan menjejaki nod dalam subpokok.

pbds - Nama pembolehubah untuk struktur data berasaskan dasar.

order_of_key()

Algoritma

  • Kami akan menggunakan fail pengepala iostream dan vektor untuk melancarkan program. Kemudian kami akan menyebut struktur data berasaskan dasar fail pengepala (pbds) berdasarkan g++.

  • Kami akan menggunakan ruang nama yang diperlukan berdasarkan struktur data mengikut dasar GNU, iaitu ‘menggunakan ruang nama __gnu_pbds’. Ia akan memulakan format pokok mengikut pbds, iaitu ‘typedef tree, rb_tree_tag, tree_order_statistics_node_update> pbds;

  • Kami sedang mentakrifkan takrifan fungsi jenis data panjang berganda

    ‘inversion_Cnt’, yang mengambil parameter integer vektor dan menyimpan alamat elemen tatasusunan.

  • Kami menyimpan '0' ke dalam pembolehubah 'cnt' untuk mengendalikan kiraan terbalik daripada jumlah pasangan.

  • Objek bernama

    pb kemudiannya dimulakan kepada pembolehubah berasaskan dasar ‘pbds’ untuk beroperasi pada sisipan dan pengisihan elemen tatasusunan.

  • Selepas memulakan pembolehubah, gunakan gelung

    for untuk mengulangi elemen tatasusunan. Elemen tatasusunan ini akan diterbalikkan mengikut dua pernyataan berikut -

    • cnt += i-pb.order_of_key(arr[i]); - Dengan mengira ,, , , , , dsb.

    • pb.insert(arr[i]); - Dengan menggunakan insert() fungsi yang telah ditetapkan, kami menambah penyongsangan elemen tatasusunan, iaitu arr[i].

  • Kami memulakan fungsi utama dan mengisytiharkan input tatasusunan vektor.

  • Kemudian kita gunakan pembolehubah

    ‘count’ untuk memanggil fungsi ‘inversion_Cnt’.

  • Akhir sekali, pembolehubah

    ‘kira’ memberikan jumlah kiraan penyongsangan dalam tatasusunan.

  • Terjemahan bahasa Cina bagi
Contoh

ialah:

Contoh

Dalam program ini, kami akan menggunakan struktur data strategik untuk mengira terbalik sesuatu nombor.

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

Atas ialah kandungan terperinci Menggunakan struktur data berasaskan dasar untuk pengiraan terbalik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam