Время вызова по ссылке

В этом коде есть фатальная ошибка:

Передача по ссылке во время вызова была удалена в строке 108. Это
Алгоритм Бойера Мура

function suffixes($pattern, &$suffixes)
{
$m = strlen($pattern);

$suffixes[$m - 1] = $m;
$g = $m - 1;

for ($i = $m - 2; $i >= 0; --$i) {
if ($i > $g && $suffixes[$i + $m - 1 - $f] < $i - $g) {
$suffixes[$i] = $suffixes[$i + $m - 1 - $f];
} else {
if ($i < $g) {
$g = $i;
}
$f = $i;

while ($g >= 0 && $pattern[$g] == $pattern[$g + $m - 1 - $f]) {
$g--;
}
$suffixes[$i] = $f - $g;
}
}
}

функция badCharacters

 function badCharacters($pattern, &$badChars)
{
$m = strlen($pattern);

for ($i = 0; $i < $m - 1; ++$i) {
$badChars[$pattern{$i}] = $m - $i - 1;
}
}

функция goodSuffixes

function goodSuffixes($pattern, &$goodSuffixes)
{
$m       = strlen($pattern);
$suff    = array();

suffixes($pattern, $suff);

for ($i = 0; $i < $m; $i++) {
$goodSuffixes[$i] = $m;
}

for ($i = $m - 1; $i >= 0; $i--) {
if ($suff[$i] == $i + 1) {
for ($j = 0; $j < $m - $i - 1; $j++) {
if ($goodSuffixes[$j] == $m) {
$goodSuffixes[$j] = $m - $i - 1;
}
}
}
}

for ($i = 0; $i < $m - 2; $i++) {
$goodSuffixes[$m - 1 - $suff[$i]] = $m - $i - 1;
}
}

функция boyer_moore

function boyer_moore($pattern, $text)
{
$n = strlen($text);
$m = strlen($pattern);

$goodSuffixes    = array();
$badCharacters   = array();

//this is the line 108
goodSuffixes($pattern, &$goodSuffixes);
badCharacters($pattern, &$badCharacters);

$j = 0;
while ($j < $n - $m) {
for ($i = $m - 1; $i >= 0 && $pattern[$i] == $text[$i + $j]; $i--);
if ($i < 0) {
echo $j;
$j += $goodSuffixes[0];
} else {
$j += max($goodSuffixes[$i], $badCharacters[$text[$i + $j]] - $m + $i + 1);
}
}
}

boyer_moore($pattern, $text);

Что вызывает эту ошибку?

0

Решение

Это ясно из сообщения об ошибке:

goodSuffixes($pattern, &$goodSuffixes);
badCharacters($pattern, &$badCharacters);

‘&’- символ, который пытается передать по ссылке во время вызова. Удалить ‘&’перед 2 именами переменных.

goodSuffixes($pattern, $goodSuffixes);
badCharacters($pattern, $badCharacters);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]