Bagaimana untuk menggunakan algoritma tamak untuk mencapai penyelesaian optimum kepada masalah susulan biasa yang paling lama dalam PHP?
Masalah Susunan Biasa Terpanjang (LCS) ialah masalah algoritma klasik yang digunakan untuk mencari panjang urutan sepunya terpanjang dalam dua jujukan. Algoritma tamak ialah strategi yang biasa digunakan untuk menyelesaikan masalah urutan lazim terpanjang Ia membina penyelesaian optimum global dengan memilih penyelesaian tempatan optimum semasa.
Dalam PHP, kita boleh menggunakan pengaturcaraan dinamik untuk melaksanakan algoritma tamak untuk menyelesaikan masalah urutan biasa yang paling lama. Langkah-langkah pelaksanaan khusus adalah seperti berikut:
Langkah 1: Tentukan masalah
Pertama sekali, kita perlu mentakrifkan masalah dengan jelas. Diberi dua jujukan X dan Y, kita diminta untuk mencari panjang urutan sepunya terpanjang mereka.
Langkah 2: Buat tatasusunan dua dimensi
Buat tatasusunan dua dimensi $dp, bilangan baris ialah panjang jujukan X tambah 1, dan bilangan lajur ialah panjang jujukan Y tambah 1.
$dp = array(); $lengthX = strlen($X); $lengthY = strlen($Y); for ($i = 0; $i <= $lengthX; $i++) { $dp[$i] = array(); for ($j = 0; $j <= $lengthY; $j++) { $dp[$i][$j] = 0; } }
Langkah 3: Cari panjang susulan sepunya terpanjang
Dengan mengisi tatasusunan dua dimensi $dp, kita boleh mencari panjang susulan sepunya terpanjang. Lintas setiap elemen dalam jujukan X dan Y secara bergilir-gilir, dan kemas kini nilai tatasusunan $dp mengikut strategi tamak.
for ($i = 1; $i <= $lengthX; $i++) { for ($j = 1; $j <= $lengthY; $j++) { if ($X[$i - 1] == $Y[$j - 1]) { $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; } else { $dp[$i][$j] = max($dp[$i][$j - 1], $dp[$i - 1][$j]); } } }
Langkah 4: Kembalikan panjang jujukan sepunya terpanjang
Akhir sekali, kita boleh mendapatkannya melalui elemen terakhir tatasusunan $dp, iaitu $dp[$lengthX][ $lengthY] Panjang bagi urutan sepunya terpanjang.
$lengthLCS = $dp[$lengthX][$lengthY]; return $lengthLCS;
Contoh kod PHP lengkap adalah seperti berikut:
function longestCommonSubsequence($X, $Y) { $dp = array(); $lengthX = strlen($X); $lengthY = strlen($Y); for ($i = 0; $i <= $lengthX; $i++) { $dp[$i] = array(); for ($j = 0; $j <= $lengthY; $j++) { $dp[$i][$j] = 0; } } for ($i = 1; $i <= $lengthX; $i++) { for ($j = 1; $j <= $lengthY; $j++) { if ($X[$i - 1] == $Y[$j - 1]) { $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; } else { $dp[$i][$j] = max($dp[$i][$j - 1], $dp[$i - 1][$j]); } } } $lengthLCS = $dp[$lengthX][$lengthY]; return $lengthLCS; } $X = "ABCD"; $Y = "ACDF"; $lengthLCS = longestCommonSubsequence($X, $Y); echo "最长公共子序列的长度为:" . $lengthLCS;
Melalui contoh kod di atas, kita boleh menggunakan algoritma tamak untuk menyelesaikan masalah susulan biasa yang paling lama dalam PHP dan dapatkan yang paling Panjang susulan sepunya yang panjang.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan algoritma tamak untuk mencapai penyelesaian optimum kepada masalah urutan biasa terpanjang dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!