Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyahduplikasi dan Menyusun Vektor Besar dengan Cekap dalam C?
Mengoptimumkan Penyahduplikasian dan Isih Vektor
Memadam pendua dan menyusun vektor besar boleh menjadi tugas penting dalam pengaturcaraan. Mari kita periksa pendekatan yang berbeza dan terokai cara untuk mencapai kecekapan dalam proses ini.
1. Menggabungkan Isih dan Unik:
Coretan kod yang disediakan cuba memadamkan pendua dan mengisih vektor menggunakan std::erase dan std::sort. Walau bagaimanapun, ia tidak berfungsi kerana std::unique memerlukan pengulangan input yang diisih.
Untuk membetulkannya, kita boleh mengisih vektor dahulu dan kemudian menggunakan std::unique untuk mengalih keluar pendua:
std::sort(vec.begin(), vec.end()); vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
2. Memadam Pendua Dahulu atau Menyusun Dahulu:
Memadamkan pendua sebelum mengisih secara amnya lebih cekap dari segi kerumitan masa kerana algoritma std::unique mempunyai kerumitan masa O(n), di mana n ialah saiz vektor input. Walau bagaimanapun, pengisihan selepas memadamkan pendua adalah perlu untuk memastikan vektor kekal diisih.
3. Menggunakan Set:
Seperti yang dinyatakan dalam jawapan yang dipautkan, menggunakan std::set boleh menjadi lebih cekap untuk mengendalikan vektor besar dengan penduaan yang ketara. Satu set secara automatik mengalih keluar pendua apabila memasukkan elemen. Kita boleh menukar vektor kepada set, memasukkan elemen, dan kemudian menukarnya kembali kepada vektor, dengan itu mencapai penyahduplikasian dan pengisihan dalam satu langkah.
Perbandingan Prestasi:
Menanda aras pendekatan yang berbeza (vektor dengan isihan unik, penukaran set manual dan penukaran pembina set) mendedahkan bahawa apabila bilangan pendua adalah penting, menukar kepada set dan membuang semula data ke dalam vektor adalah lebih pantas daripada menggunakan teknik berasaskan vektor.
Kesimpulannya, untuk vektor besar dengan penduaan tinggi, menggunakan set menyediakan cara paling berkesan untuk memadam pendua dan menyusunnya. Selain itu, penukaran set manual cenderung lebih cepat daripada menggunakan pembina set.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahduplikasi dan Menyusun Vektor Besar dengan Cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!