Cari Bit Kth dalam Rentetan Binari Nth
Oct 20, 2024 am 06:10 AM1545. Cari Bit Kth dalam Rentetan Perduaan Nth
Kesukaran: Sederhana
Topik: Rentetan, Rekursi, Simulasi
Diberi dua integer positif n dan k, rentetan binari Sn dibentuk seperti berikut:
- S1 = "0"
- Si = Si - 1 "1" terbalik(songsang(Si - 1)) untuk i > 1
Di mana menandakan operasi penggabungan, reverse(x) mengembalikan rentetan terbalik x, dan invert(x) menyongsangkan semua bit dalam x (0 berubah menjadi 1 dan 1 berubah menjadi 0).
Sebagai contoh, empat rentetan pertama dalam urutan di atas ialah:
- S1 = "0"
- S2 = "011"
- S3 = "0111001"
- S4 = "011100110110001"
Kembalikan bit kke dalam Sn. Dijamin k sah untuk n.
Contoh 1:
- Input: n = 3, k = 1
- Output: "0"
- Penjelasan: S3 ialah "0111001". Bit 1st ialah "0".
Contoh 2:
- Input: n = 4, k = 11
- Output: "1"
- Penjelasan: S4 ialah "011100110110001". Bit ke-11 ialah "1".
Contoh 3:
- Input: n = 3, k = 2
- Output: "0"
Kekangan:
- 1 <= n <= 20
- 1 <= k <= 2n - 1
Petunjuk:
- Memandangkan n adalah kecil, kita hanya boleh mensimulasikan proses membina S1 kepada Sn.
Penyelesaian:
Kita perlu memahami proses rekursif yang digunakan untuk menjana setiap rentetan binari Sn dan gunakan ini untuk menentukan bit k-ke- tanpa membina keseluruhan rentetan.
Pendekatan:
-
Pembinaan Rentetan Rekursif:
- S1 = "0".
- Untuk saya > 1:
- Si dibina sebagai: Si = Si-1 "1" terbalik(songsang(Si-1))
- Ini bermakna Si terdiri daripada tiga bahagian:
- Si-1 (bahagian asal)
- "1" (bit tengah)
- terbalik(terbalikkan(Si-1)) (bahagian yang berubah)
-
Pemerhatian Utama:
- Si mempunyai panjang 2i-1.
- Bit tengah (kedudukan 2i-1 daripada Si sentiasa "1".
- Jika k terletak pada separuh masa pertama, ia jatuh dalam Si-1.
- Jika k betul-betul kedudukan tengah, jawapannya ialah "1".
- Jika k berada pada separuh masa kedua, ia sepadan dengan bahagian songsang terbalik.
-
Menterbalikkan dan Membalikkan:
- Untuk menentukan bit pada separuh masa kedua, petakan k ke kedudukan yang sepadan pada separuh masa pertama menggunakan: k' = 2i - k
- Bit pada kedudukan ini dalam separuh asal adalah terbalik, jadi kita perlu membalikkan hasilnya.
-
Penyelesaian Rekursif:
- Tentukan secara rekursif kbit ke- dengan mengurangkan n dan pemetaan k sehingga n = 1.
- Kes Asas: Jika n = 1, Si ialah "0" , jadi satu-satunya nilai yang mungkin untuk mana-mana k ialah "0".
-
Langkah Rekursif:
- Kira indeks tengah pertengahan iaitu 2n-1.
- Jika k sepadan dengan indeks tengah, kembalikan "1".
- Jika k kurang daripada pertengahan, k-ke bit terletak pada separuh masa pertama, jadi kami mencari secara rekursif kbit ke- dalam Sn-1.
- Jika k lebih besar daripada pertengahan, kita dapati bit yang sepadan dalam separuh masa kedua songsang dan balikkannya.
- Kerumitan Masa: O(n) kerana setiap panggilan rekursif mengurangkan n sebanyak 1.
- Kerumitan Angkasa: O(n) untuk timbunan panggilan rekursif.
-
Input: n = 3 , k = 1
- S3 = "0111001"
- k = 1 jatuh pada separuh masa pertama, jadi kita cari k = 1 dalam S2.
- Dalam S2 = "011" , k = 1 sepadan dengan "0".
-
Input: n = 4 , k = 11
- S4 = "011100110110001"
- Indeks tengah untuk S4 ialah 8.
- k = 11 jatuh pada separuh masa kedua.
- Peta k = 11 ke bit yang sepadan pada separuh masa pertama: k' = 2 4 - 11 = 5.
- Cari k = 5 dalam S3 , iaitu "0", kemudian balikkannya kepada "1".
- GitHub
Mari laksanakan penyelesaian ini dalam PHP: 1545. Cari Bit Kth dalam Rentetan Binari N
<?php /** * @param Integer $n * @param Integer $k * @return String */ function findKthBit($n, $k) { ... ... ... /** * go to ./solution.php */ } ?>
Penjelasan:
Analisis Kerumitan:
Contoh Panduan:
Dengan memanfaatkan rekursi dan sifat pembinaan rentetan, penyelesaian ini mengelakkan menjana keseluruhan rentetan, menjadikannya cekap walaupun untuk lebih besar n.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Cari Bit Kth dalam Rentetan Binari Nth. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

11 skrip pemendek URL terbaik PHP (percuma dan premium)

Bekerja dengan Data Sesi Flash di Laravel

Respons HTTP yang dipermudahkan dalam ujian Laravel

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

12 skrip sembang php terbaik di codecanyon
