Rumah > Artikel > pembangunan bahagian belakang > 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 bagiMari 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.
Sintaks berikut digunakan dalam program -
vector <data_type> vector_variable_name
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;
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
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()
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
‘inversion_Cnt’, yang mengambil parameter integer vektor dan menyimpan alamat elemen tatasusunan.
pb kemudiannya dimulakan kepada pembolehubah berasaskan dasar ‘pbds’ untuk beroperasi pada sisipan dan pengisihan elemen tatasusunan.
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].
‘count’ untuk memanggil fungsi ‘inversion_Cnt’.
‘kira’ memberikan jumlah kiraan penyongsangan dalam tatasusunan.
#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!