PHP의 가장 긴 공통 부분 수열 알고리즘에 대한 자세한 설명
최장 공통 부분 수열(LCS)은 두 문자열의 유사성을 비교하는 데 주로 사용되는 공통 문자열 일치 알고리즘입니다. PHP에서는 동적 프로그래밍이라는 아이디어를 통해 LCS 알고리즘을 구현할 수 있으며, 알고리즘의 원리와 코드 구현은 아래에서 자세히 소개하겠습니다.
특히 다음 단계에 따라 가장 긴 공통 부분 수열을 풀 수 있습니다.
1) dp 배열을 초기화합니다. 여기서 dpi는 문자열 X의 첫 번째 i 문자와 문자열 Y의 첫 번째 j 문자의 최대값을 나타냅니다. 긴 공통 부분 수열.
2) 문자열 X와 Y의 각 문자를 탐색합니다. X[i]가 Y[j]와 같으면 dpi 값은 dpi-1+1로 얻을 수 있습니다. 그렇지 않으면 dpi 값은 dpi-1입니다. 및 dpi 에서 더 큰 값입니다.
3) 마지막으로 dpm은 문자열 X와 Y의 가장 긴 공통 부분 수열의 길이입니다. 여기서 m과 n은 문자열 X와 Y의 길이입니다.
function LCS($str1, $str2) { $m = strlen($str1); $n = strlen($str2); $dp = array(); for ($i = 0; $i <= $m; $i++) { $dp[$i][0] = 0; } for ($j = 0; $j <= $n; $j++) { $dp[0][$j] = 0; } for ($i = 1; $i <= $m; $i++) { for ($j = 1; $j <= $n; $j++) { if ($str1[$i - 1] == $str2[$j - 1]) { $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; } else { $dp[$i][$j] = max($dp[$i - 1][$j], $dp[$i][$j - 1]); } } } $lcs = ''; $i = $m; $j = $n; while ($i > 0 && $j > 0) { if ($str1[$i - 1] == $str2[$j - 1]) { $lcs = $str1[$i - 1] . $lcs; $i--; $j--; } elseif ($dp[$i - 1][$j] > $dp[$i][$j - 1]) { $i--; } else { $j--; } } return $lcs; } $str1 = "abcdefg"; $str2 = "bcedgh"; $lcs = LCS($str1, $str2); echo "最长公共子序列: " . $lcs;
위 코드에서는 먼저 2차원 배열 dp를 초기화하고 첫 번째 행과 첫 번째 열 요소를 추가합니다. 모두 0으로 설정되어 있습니다. 그런 다음 두 개의 중첩 for 루프를 사용하여 dp 배열의 각 요소를 계산합니다. 마지막으로 역추적을 통해 가장 긴 공통 부분 수열을 찾아 반환합니다.
위 내용은 PHP에서 가장 긴 공통 하위 시퀀스 알고리즘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!