


Maksimumkan fungsi yang diberikan dengan memilih subrentetan panjang yang sama daripada rentetan binari yang diberikan
Memandangkan dua rentetan binari str1 dan str2 yang sama panjang, kita perlu memaksimumkan nilai fungsi yang diberikan dengan memilih subrentetan daripada rentetan yang diberikan dengan panjang yang sama. Fungsi yang diberikan adalah seperti ini -
keseronokan(str1, str2) = (len(subrentetan))/(2^xor(sub1, sub2)).
Di sini, len(substring) ialah panjang subrentetan pertama dan xor(sub1, sub2) ialah XOR substring yang diberikan, ini mungkin kerana ia adalah rentetan binari.
Contoh
Input1: string str1 = 10110 & string str2 = 11101
Output: 3
Arahan
Kita boleh memilih banyak set rentetan yang berbeza untuk mencari penyelesaian, tetapi memilih "101" daripada kedua-dua rentetan akan XOR sifar, yang akan menyebabkan fungsi mengembalikan nilai maksimum.
Input2: string str1 = 11111, string str2 = 10001
Output: 1
Arahan
Kita boleh memilih "1" sebagai subrentetan yang akan menghasilkan output ini dan jika kita memilih mana-mana rentetan lain ia akan menghasilkan nilai yang lebih rendah.
Kaedah naif
Dalam kaedah ini kita akan mencari semua subrentetan dan kemudian membandingkannya untuk mencari penyelesaian, tetapi penyelesaian ini tidak cekap dan memerlukan banyak masa dan kerumitan ruang.
Purata kerumitan masa untuk menghasilkan subrentetan panjang x ialah N^2, dan kemudian membandingkan setiap subrentetan akan menelan kos N^2 lebih. Selain itu, kita juga perlu mencari XOR subrentetan yang diberikan, yang juga menelan kos faktor tambahan N, yang bermaksud N^5 akan menjadi kerumitan masa kod di atas, yang sangat tidak cekap.
Kaedah yang cekap
Idea
Idea di sini datang daripada pemerhatian mudah bahawa apabila nilai XOR semakin tinggi, ia sentiasa mengurangkan jawapan. Oleh itu, untuk memaksimumkan nilai pulangan fungsi, kita mesti mengurangkan nilai XOR sebanyak mungkin.
Dalam kes di mana kedua-dua subrentetan adalah sifar, nilai XOR minimum yang boleh dicapai ialah sifar. Oleh itu, masalah ini sebenarnya berasal daripada masalah substring biasa yang paling lama.
Apabila XOR adalah sifar, bahagian dividen ialah 1, jadi jawapan akhir ialah panjang subrentetan sepunya terbesar.
Pelaksanaan
Kami telah melihat idea untuk menyelesaikan masalah, mari lihat langkah-langkah untuk melaksanakan kod -
Kami akan mencipta fungsi yang akan menerima dua rentetan yang diberikan sebagai input dan mengembalikan nilai integer, yang akan menjadi hasil akhir kami.
Dalam fungsi, kita mula-mula mendapatkan panjang rentetan dan kemudian mencipta vektor 2D dengan saiz yang didarab dengan rentetan yang diberikan.
Kami akan menggunakan gelung bersarang untuk mengulang melalui rentetan dan mendapatkan subrentetan sepunya terbesar.
Pada setiap lelaran kami akan menyemak sama ada indeks semasa dua rentetan sepadan dan kemudian kita akan mendapat nilai daripada vektor indeks terakhir kedua rentetan.
Jika tidak, kami hanya akan menetapkan indeks semasa vektor kepada sifar.
Selain itu, kami akan mengekalkan pembolehubah untuk mengekalkan kiraan panjang maksimum subrentetan biasa.
Akhir sekali, kami akan mengembalikan jawapan dan mencetaknya dalam fungsi utama.
Contoh
#include <bits/stdc++.h> using namespace std; // function to get the result int result(string str1, string str2){ int n = str1.length(); // size of the first string int m = str2.length(); // size of the second string // creating vector to store the dynamic programming results vector<vector<int>>dp(n+1, vector<int>(m+1)); int ans = 0; // variable to store the result // traversing over the strings using nested for loops for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ // if current elements of both the string are equal if (str1[i - 1] == str2[j - 1]){ // getting one maximum of the last two dp[i][j] = 1 + dp[i - 1][j - 1]; ans = max(ans, dp[i][j]); } } } return ans; // return the final answer or count } int main(){ string str1 = "10110"; string str2 = "11101"; // calling the function cout<<"The maximum score for a given function by selecting equal length substrings from given binary strings is "<< result(str1,str2)<<endl; return 0; }
Output
The maximum score for a given function by selecting equal length substrings from given binary strings is 3
Kerumitan masa dan ruang
Kerumitan masa kod di atas ialah O(N^2) kerana kami menggunakan bersarang untuk gelung dan berulang N kali setiap kali.
Memandangkan kami menggunakan tatasusunan dua dimensi untuk menyimpan elemen, kerumitan ruang kod di atas ialah O(N^2).
Kesimpulan
Dalam tutorial ini, kami mengekodkan untuk melaksanakan skor maksimum bagi fungsi tertentu dengan memilih subrentetan yang sama panjang daripada rentetan binari yang diberikan. Kami telah membincangkan pendekatan naif ini, yang sangat tidak cekap. Bergantung pada fungsi yang diberikan, nilai XOR adalah lebih kecil, jadi kami menjadikan XOR sifar dengan mendapatkan subrentetan sepunya terpanjang dalam kerumitan masa O(N^2).
Atas ialah kandungan terperinci Maksimumkan fungsi yang diberikan dengan memilih subrentetan panjang yang sama daripada rentetan binari yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat 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



Cara menggunakan fungsi LOCATE dalam MySQL untuk mencari kedudukan substring dalam rentetan Dalam MySQL, terdapat banyak fungsi yang boleh digunakan untuk memproses rentetan. Antaranya, fungsi LOCATE adalah fungsi yang sangat berguna yang boleh digunakan untuk mencari kedudukan substring dalam rentetan. Sintaks fungsi LOCATE adalah seperti berikut: LOCATE(subrentetan, rentetan,[kedudukan]) dengan subrentetan ialah subrentetan untuk ditemui dan rentetan ialah subrentetan untuk ditemui.

Diberi dua rentetan str_1 dan str_2. Matlamatnya adalah untuk mengira bilangan kejadian subrentetan str2 dalam rentetan str1 menggunakan prosedur rekursif. Fungsi rekursif ialah fungsi yang memanggil dirinya dalam definisinya. Jika str1 ialah "Iknowthatyouknowthatiknow" dan str2 ialah "tahu" bilangan kejadian ialah -3 Mari kita fahami melalui contoh. Contohnya, input str1="TPisTPareTPamTP", str2="TP";

Fungsi ini serupa dengan fungsi strtok(). Satu-satunya perbezaan utama ialah _r, yang dipanggil fungsi reentrant. Fungsi reentrant ialah fungsi yang boleh diganggu semasa pelaksanaan. Fungsi jenis ini boleh digunakan untuk menyambung semula pelaksanaan. Oleh itu, fungsi reentrant adalah thread-safe, yang bermaksud ia boleh diganggu dengan selamat oleh thread tanpa menyebabkan sebarang kerosakan. Fungsi strtok_r() mempunyai parameter tambahan yang dipanggil konteks. Dengan cara ini fungsi boleh dipulihkan di lokasi yang betul. Sintaks fungsi strtok_r() adalah seperti berikut: #include<string.h>char*strtok_r(char*string,constchar*limiter,char**

Dalam masalah ini, kita perlu mencari urutan tidak bertambah terpanjang bagi rentetan yang diberikan. Tidak bertambah bermakna aksara sama ada sama atau dalam susunan menurun. Memandangkan rentetan binari hanya mengandungi "0" dan "1", rentetan yang terhasil hendaklah sama ada bermula dengan "1" dan berakhir dengan "0", atau bermula dan berakhir dengan "0" atau "1". Untuk menyelesaikan masalah ini, kami akan mengira awalan "1" dan akhiran "0" pada setiap kedudukan rentetan dan mencari jumlah maksimum awalan "1" dan akhiran "0". Pernyataan Masalah - Kami diberi rentetan binari str. Kita perlu mencari urutan tidak bertambah terpanjang daripada rentetan yang diberikan. Contoh Input–str="010100"Output–4 menggambarkan bukan rekursif terpanjang

Dalam masalah yang diberikan, kita diberi rentetan yang terdiri daripada 0 dan 1 kita perlu mencari jumlah bilangan semua pilih atur bermula dengan 1. Oleh kerana jawapannya mungkin jumlah yang besar, kami mengambilnya modulo 1000000007 dan mengeluarkannya. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Kami akan menyelesaikan masalah ini dengan menggunakan beberapa matematik gabungan dan menyediakan beberapa formula. Kaedah Penyelesaian Dalam kaedah ini kita akan mengira bilangan 0 dan 1. Sekarang andaikan n ialah nombor 1 yang muncul dalam rentetan kami dan m ialah bilangan 0 yang muncul dalam rentetan kami

Fungsi pack() mengemas data ke dalam rentetan binari. Pek sintaks(format,args) Format parameter - format untuk digunakan. Berikut ialah nilai yang mungkin - a - rentetan berlapik NUL A - rentetan empuk ruang h - rentetan perenambelasan, nibble rendah dahulu H - rentetan perenambelasan, nibble tinggi dahulu c - char C yang ditandatangani - char s yang tidak ditandatangani - ditandatangani pendek (sentiasa 16 bit , pesanan bait mesin) S - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait mesin) n - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian besar) v - pendek tidak ditandatangani (sentiasa 16 bit, susunan bait endian kecil) i - integer bertanda (bergantung pada saiz mesin dan susunan bait) I - Tiada integer yang ditandatangani (bergantung pada

Ungkapan biasa ialah alat pemprosesan teks yang berkuasa yang boleh digunakan untuk memadankan rentetan dalam corak tertentu. Dalam PHP, ungkapan biasa biasanya digunakan dalam pemprosesan rentetan, pengesahan borang, carian dan penggantian, dsb. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa PHP untuk mengekstrak aksara tertentu daripada rentetan ke subrentetan pada penghujungnya. Pertama, mari kita lihat contoh. Katakan kami mempunyai rentetan $str yang mengandungi berbilang URL bermula dengan "http://" dan kami ingin mengekstrak URL ini dan menyimpannya dalam

Dalam tutorial ini, kita perlu menyelesaikan pertanyaan subrentetan palindrom untuk rentetan tertentu. Menyelesaikan pertanyaan subrentetan palindrom adalah lebih kompleks daripada menyelesaikan pertanyaan biasa dalam C++. Ia memerlukan kod dan logik yang lebih kompleks. Dalam tutorial ini, kami telah menyediakan pertanyaan string str dan Q substring [L...R], setiap satunya mempunyai dua nilai L dan R. Matlamat kami adalah untuk menulis atur cara yang menyelesaikan pertanyaan untuk menentukan sama ada subrentetan[L...R] ialah palindrom. Kita perlu menentukan sama ada subrentetan yang terbentuk dalam julat L hingga R adalah palindrom untuk menyelesaikan setiap pertanyaan. Contohnya-Mari masukkan"abbbabaaaba"asourinputstring.Thequer
