Saya memiliki vektor bit, yang masing-masing terdiri oleh bit. Masing menunjukkan Mari dengan yang bit -th dari th vektor, . Setiap bit vektor tunduk pada batasan 2 berikut:m v i [ j ] j i i , j ∈ [ 1 , m ] v i
- .
- .
- Bit yang tidak termasuk dalam batasan di atas dapat berupa atau , tetapi dalam kasus demikian jumlah paling banyak . 1 0 12
Sekarang saya memiliki vektor bit lain , dari bit: awalnya semua bit ditetapkan untuk . Dengan "menerapkan ke " Maksud saya melakukan bitwise AND antara dan , dan kemudian menyimpan hasilnya dalam . Saya tertarik pada evolusi setelah aplikasi berulang vektor diberikan dalam input. m m s 1 v i s s v i s s v 1 , . . . , v m
Mari kita sebut "aplikasi berulang" sebagai lintasan , dan mari kita tentukan lintasan seperti itu secara lebih formal. Lintasan adalah urutan yang disusun oleh paling banyak vektor (dipilih dari diberikan dalam input) sehingga jika ada dalam urutan, maka semua setelah itu harus memiliki . Jadi, misalnya, adalah lintasan, sedangkan tidak (karena ). v 1 , . . . , v m v i v j j < i < v 8 , v 3 > < v 3 , v 8 , v 7 > 8 ≥ 3
Jelas, ada lintasan yang berbeda. Biarkan . Misalkan untuk mengambil dan untuk membiarkannya menjalani lintasan : untuk setiap langkah dari lintasan , menempatkan nilai baru yang diambil oleh di . Kemudian ulangi proses yang sama untuk lintasan (selalu dimulai dari , dan selalu menempatkan setiap nilai baru dari di ). Kemudian lagi, sampai Anda mencoba semua lintasan . Pada akhirnya, himpunan akan berisi semua nilai yang mungkin s S T 2 s = 1 m s S 2 m S s mungkin pernah menganggap diberi vektor dalam input.
Pertanyaan
- Saya memiliki dalam input. Saya ingin tahu | S | , Yaitu berapa banyak nilai yang berbeda mungkin s pernah berasumsi. Tentu saja, saya ingin menghitung | S | efisien, yaitu tanpa mencoba semua lintasan yang mungkin satu per satu.
- Misalkan untuk menghapus 2 nd pembatasan vektor input. Bagaimana hal itu memengaruhi ?
- Lebih penting lagi, yang paling saya pedulikan adalah bagaimana tumbuh bersama m . Apakah | S | paling polinomial dalam m ? Apakah | S | paling sub-eksponensial dalam m ? Atau apakah ada contoh buruk di mana | S | harus eksponensial dalam m ?
Gambar berikut adalah contoh dengan :
Saya mengumpulkan data eksperimental untuk mencoba mencari tahu hubungan antara dan | S | . Sejauh ini, percobaan tampaknya menunjukkan bahwa | S | tumbuh lebih cepat dari m 3 dan lebih lambat dari m 4 . Namun, untuk saat ini data tersebut tidak memiliki banyak signifikansi: Saya hanya dapat melakukan tes hingga m = 90 , jadi mungkin ada konstanta tersembunyi yang besar atau beberapa faktor lain yang memungkinkan hukum eksponensial terlihat seperti hukum polinomial untuk m kecil. . Saya perlu bantuan dalam mencari tahu perilaku asimptotik | S | dengan hormat .
sumber
Jawaban:
Saya telah memikirkan kembali ini dan ikatan awal saya benar. Dalam kasus terburuk,| S| =Θ(m2mlgm)
Bukti ada dalam dua bagian. Pertama, . Pertimbangkan kemungkinan nilaisdari lintasan yang berakhir padavx. Setiap bits[j]untukj≥xadalah 0, dan setiap bits[j]untukj<x-m| S| =O(m2mlgm) s vx s [ j ] j ≥ x s [ j ] adalah 1. Oleh karena itu hanya ada2mj < x - mlgm nilai-nilai yangsdapat mengambil. Kalikan dengan jumlahvxdan kita memiliki batas atas.2mlgm s vx
Kedua, pertimbangkan
Saya tegaskan bahwa skema ini memberi Anda . Untuk setiap kolomvxpertimbangkan juga(m| S| =Ω(m2mlgm) vx kolom di sebelah kanannya. Masing-masing2 m( mlgm- 2 ) kombinasi dari mereka memberikan yang berbedas, dan di masing-masingstop set bit adalah bit atas setvx, sehingga tidak ada penghitungan ganda antara yang berbedavx.2mlgm- 2 s s vx vx
sumber