Boyer-Moore 알고리즘은 텍스트 검색, 편집기, 컴파일러 및 다양한 패턴 일치 도구에 널리 사용되는 효율적인 문자열 일치 알고리즘입니다. 이 기사에서는 Boyer-Moore 알고리즘의 작동 방식을 소개하고 구체적인 코드 예제를 제공합니다.
1. 작동 원리
Boyer-Moore 알고리즘은 검색되는 텍스트의 끝부터 일치를 시작하고, 패턴 문자열과 텍스트 문자열의 문자를 역으로 비교합니다. 이는 나쁜 문자 규칙과 좋은 접미사 규칙이라는 두 가지 경험적 규칙을 활용합니다.
잘못된 문자 규칙:
문자 불일치가 발생하면 알고리즘은 잘못된 문자의 위치(패턴 문자열의 마지막 위치)를 기준으로 패턴 문자열을 뒤로 밀어 잘못된 문자를 정렬합니다.
좋은 접미사 규칙:
문자 불일치가 발생하면 알고리즘은 좋은 접미사의 발생 위치와 길이에 따라 패턴 문자열을 뒤로 밀어서 좋은 접미사가 정렬되도록 합니다. 좋은 접미사는 텍스트 문자열과 일치하는 패턴 문자열의 접미사입니다.
Boyer-Moore 알고리즘은 패턴 문자열을 지속적으로 이동하고 일치하지 않는 문자를 건너뛰므로 비교 횟수가 크게 줄어들고 일치 효율성이 향상됩니다.
2. 응용 시나리오
Boyer-Moore 알고리즘은 다른 일반적인 문자열 일치 알고리즘(예: KMP, Brute-force)에 비해 패턴 문자열이 길고 문자 집합이 큰 경우 대규모 텍스트 일치 검색에 적합합니다. 등)에는 분명한 장점이 있습니다.
예를 들어 텍스트 처리, 검색 엔진, 컴파일러에서는 키워드, 변수 이름 또는 특정 문자열을 효율적으로 찾아야 합니다. Boyer-Moore 알고리즘은 텍스트에서 가능한 일치 위치를 신속하게 찾을 수 있으므로 검색 프로세스 속도가 빨라집니다.
다음은 문자열 일치를 위해 Boyer-Moore 알고리즘을 사용하는 방법을 보여주는 간단한 PHP 샘플 코드입니다.
<?php function boyerMoore($text, $pattern) { $textLength = strlen($text); $patternLength = strlen($pattern); $lastOccurrence = array(); // 初始化坏字符的位置表 for ($i = 0; $i < $patternLength; $i++) { $lastOccurrence[$pattern[$i]] = $i; } $offset = 0; while ($offset <= $textLength - $patternLength) { // 从末尾开始匹配 for ($j = $patternLength - 1; $j >= 0 && $pattern[$j] == $text[$offset + $j]; $j--); if ($j < 0) { // 找到匹配 return $offset; } else { // 根据坏字符规则和好后缀规则计算滑动距离 // 坏字符规则 $badCharDist = $j - $lastOccurrence[$text[$offset + $j]]; // 好后缀规则 $goodSuffixDist = 0; if ($j < $patternLength - 1) { $goodSuffixDist = $moveBy = $patternLength - $j; for ($k = $j + 1; $k < $patternLength - 1; $k++) { if ($pattern[$k] == $pattern[$k - $j - 1]) { $goodSuffixDist--; } } } // 取最大距离 $offset += max($badCharDist, $goodSuffixDist); } } // 未找到匹配 return -1; } // 示例用法 $text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; $pattern = "dolor"; $result = boyerMoore($text, $pattern); if ($result == -1) { echo "未找到匹配的字符串"; } else { echo "匹配的字符串位置:".$result; } ?>
위 샘플 코드에서는 일치 위치를 반환하는 $text
和模式串$pattern
传入boyerMoore
함수에 텍스트 문자열을 추가합니다. 일치하는 문자열이 없으면 반환 결과는 -1입니다.
요약:
Boyer-Moore 알고리즘은 잘못된 문자 규칙과 좋은 접미사 규칙을 적용하여 효율적인 문자열 일치를 달성합니다. 대규모 텍스트 검색에 좋은 성능을 가지며 특히 긴 패턴 문자열과 큰 문자 집합을 처리하는 데 적합합니다. 실제 응용 시나리오에서는 Boyer-Moore 알고리즘을 사용하여 문자열 일치를 신속하게 수행하고 검색 및 일치의 효율성을 향상시킬 수 있습니다.
위 내용은 PHP의 문자열 일치 알고리즘에서 Boyer-Moore 알고리즘의 작동 원리 및 응용 시나리오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!