문제

나는 코딩 LCS(장 일반적인 시퀀스)에서 php 를 사용하여 프로그램을 재귀적인 접근 방식이다.나는 다음과 같은 코드:

<?php

$lcsTbl = array(array(128),array(128));
$backTracks = array(array(128),array(128));

$str1 = 'asdvadsdad'; 
$str2 = 'asdasdadasda';

$len1 = strlen($str1);
$len2 = strlen($str2); 

echo LCS_Length($lcsTbl, $backTracks, $str1, $str2, $len1, $len2); //longest common sub sequence

echo '<br/>';

function LCS_Length(&$LCS_Length_Table, &$B, &$s1, &$s2, &$m, &$n)
{
  //reset the 2 cols in the table
  for($i=1; $i < $m; $i++) $LCS_Length_Table[$i][0]=0;
  for($j=0; $j < $n; $j++) $LCS_Length_Table[0][$j]=0;

  for ($i=1; $i <= $m; $i++) {
    for ($j=1; $j <= $n; $j++) {
      if ($s1[$i-1]==$s2[$j-1])
        { $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i-1][$j-1] + 1; $B[$i][$j] = '\\';}
      else if ($LCS_Length_Table[$i-1][$j] >= $LCS_Length_Table[$i][$j-1])
        { $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i-1][$j];  $B[$i][$j] = '|';}
      else
        { $LCS_Length_Table[$i][$j] = $LCS_Length_Table[$i][$j-1]; $B[$i][$j] = '-';}
    }
  }

  return $LCS_Length_Table[$m][$n];
}

인쇄 LCS,나는 다음과 같은 기능:

$x = str_split($str1);
echo lcs_print($backTracks, $str1, $len1, $len2); //print longest common sub sequence


function lcs_print(&$B, &$x, &$i, &$j)
{
    if( $i == 0 || $j == 0 )
        return;
    if( $B[$i][$j] == '\\' ) {
        echo $x[$i-1];
        lcs_print( $B, $x, $i = $i-1, $j = $j-1 );


    } else if( $B[$i][$j] == '|' ) {
        lcs_print( $B, $x, $i = $i-1, $j );
    } else {
        lcs_print( $B, $x, $i, $j = $j-1 );
    }
}
?> 

이 코드를 수은 총 lengthof LCS 올바르지만"주의 사항:정의되지 않은 오프셋:-1"모든 호출에는 이 라인에서 프린트 기능 echo $x[$i-1]; 고 인쇄합니다.가 거의 모든 분할하의 문자열$str1 한 다음 전달하는 기능을 하지만 아무것도 작동하지 않습니다.인쇄되지 않습 LCS 문자열이기 때문에 뭔가 잘못으로 이 줄의 코드 echo $x[$i-1]; 내가 못 얻을 수 있습니다.도와 주시기 바랍니다.

참고:서 의사의 위 코드에서 촬영되었습의 책 Thomas H.Cormen,"소개하는 알고리즘 3rd Edition".쓰고 그것으로 PHP 의 의도와 함께 연장 그래서 그것을 인쇄할 수 있습니다 LCS 의 두 개 이상의 문자열입니다.나는 감사하는 경우에는 사람의 주가의 아이디어는 방법을 연장할 수 있 이 코드는 그것을 인쇄할 수 있습니다 LCS 의 배열과 여러 문자열은 다음과 같$배열{'sdsad','asddaw','asd',n}.나중에,내가 의도하는 변환 프로그램 전체로 MATLAB.

도움이 되었습니까?

해결책 2

나는 해결 오류가 발생합니다.나는 배치 echo$x[$i-1];전 lcs_print($B,$x,$i=$i-1,$j=$j-1);에 lcs_print 기능 모든 수 있다는 것을 의미합니다..

다른 팁

문제가 있에서 당신의 LCS_length
1.if($s1[$i-1]==$s2[$j-1]),그것이 있어야 되는 경우($s1[$i]==$s2[$j])
2.당신의 경계 조건($j=0;$j < $n)은 불분명하여야 하며,이 upperbound 당신은 노력하고 그것을 인쇄하이 lcs_print($역 추적,$str1,$len1,$len2).야($j=0;$j<=n;$j++)

내 생각에 이러한 변경은 문제가 해결 될 수 있습니다.수행하지 않았 코딩 PHP 에서 그렇게 말할 수 없습에 대한 구문.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top