Ulangi semua subcorak topeng yang diberikan


Ia berlaku bahawa adalah perlu untuk menghitung semua jujukan bit dengan panjang tertentu. Atau dengan kata lain, ulangi semua pilihan yang mungkin, di mana untuk setiap objek satu daripada dua keadaan yang mungkin dipilih.

Dalam situasi sedemikian, adalah mungkin untuk melaksanakan penghitungan menggunakan topeng bit. Kelebihan pendekatan ini ialah kod sedemikian berfungsi secara bukan rekursif dan beroperasi pada nombor dan bukannya koleksi atau sebagainya, yang sangat meningkatkan prestasi.

Kod umum menggunakan bitmasks diberikan di bawah: intn; // bilangan objek (panjang jujukan bit) untuk (int mask = 0; mask < (1 << n); mask++) { // gelung melalui semua nombor dari 0 hingga 2^n - 1, di mana setiap nombor sepadan dengan bitmask // topeng nombor semasa ialah bitmask, di mana bit ke-i menentukan keadaan objek ke-i for (int i = 0; i < n; i++) { // berulang ke atas n bit untuk memahami keadaan setiap objek if ((1 << i) & mask) { // semak sama ada bit ke-i sama dengan satu // memproses pilihan bahawa objek ke-i mempunyai keadaan '1' } else { // kes apabila bit ke-i ialah sifar // memproses pilihan bahawa objek ke-i bagi keadaan '0' } } }
Kod ini dijalankan dalam O(2^n * f(n)), dengan f(n) ialah masa yang anda perlukan untuk memproses satu lelaran tertentu.

Ia berlaku bahawa adalah perlu untuk menghitung semua jujukan bit dengan panjang tertentu. Atau dengan kata lain, ulangi semua pilihan yang mungkin, di mana untuk setiap objek satu daripada dua keadaan yang mungkin dipilih.

Dalam situasi sedemikian, adalah mungkin untuk melaksanakan penghitungan menggunakan topeng bit. Kelebihan pendekatan ini ialah kod sedemikian berfungsi secara bukan rekursif dan beroperasi pada nombor dan bukannya koleksi atau sebagainya, yang sangat meningkatkan prestasi.

Kod umum menggunakan bitmasks diberikan di bawah: intn; // bilangan objek (panjang jujukan bit) untuk (int mask = 0; mask < (1 << n); mask++) { // gelung melalui semua nombor dari 0 hingga 2^n - 1, di mana setiap nombor sepadan dengan bitmask // topeng nombor semasa ialah bitmask, di mana bit ke-i menentukan keadaan objek ke-i for (int i = 0; i < n; i++) { // berulang ke atas n bit untuk memahami keadaan setiap objek if ((1 << i) & mask) { // semak sama ada bit ke-i sama dengan satu // memproses pilihan bahawa objek ke-i mempunyai keadaan '1' } else { // kes apabila bit ke-i ialah sifar // memproses pilihan bahawa objek ke-i bagi keadaan '0' } } }
Kod ini dijalankan dalam O(2^n * f(n)), dengan f(n) ialah masa yang anda perlukan untuk memproses satu lelaran tertentu.