Menggunakan struktur data berasaskan dasar untuk pengiraan terbalik

王林
Lepaskan: 2023-09-02 23:45:06
ke hadapan
787 orang telah melayarinya

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 >
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

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()
Salin selepas log masuk

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 ,<5,4>, < 等对值来返回第二个参数中的最小值5,3>, <5,2>, <5,1>, <4,3>, dsb. <4,2>

    • 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 : "<
Salin selepas log masuk

输出

Total number of inversion count using Policy based data structure is : 10
Salin selepas log masuk

结论

我们通过执行基于反转计数的程序来探索 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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan