Python 문자열 일치 알고리즘 코드 예제 구현
Python 에서 긴 문자열 에서 하위 문자열 이 존재 하 는 지 찾 으 려 면 두 가지 방법 을 사용 하 십시오.하 나 는 str 의 find()함수 이 고 find()함 수 는 하위 문자열 이 일치 하 는 시작 위치 만 되 돌려 줍 니 다.없 으 면-1 로 되 돌려 줍 니 다.둘 째 는 re 모듈 의 findall 함수 로 일치 하 는 모든 하위 문자열 을 되 돌려 줍 니 다.
그러나 findall 함 수 를 사용 할 때 문자열 에 존재 하 는 특수 문 자 를 주의해 야 합 니 다.
만력 법 문자열 일치:
패턴 을 텍스트 의 앞 m(패턴 길이)문 자 를 맞 춘 다음 왼쪽 에서 오른쪽으로 모든 일치 하거나 일치 하지 않 는 문 자 를 만 날 때 까지 일치 합 니 다.다음 상황 에서 모드 를 오른쪽으로 이동 합 니 다.
코드 는 다음 과 같 습 니 다:
def string_match(string, sub_str):
#
for i in range(len(string)-len(sub_str)+1):
index = i # index
for j in range(len(sub_str)):
if string[index] == sub_str[j]:
index += 1
else:
break
if index-i == len(sub_str):
return i
return -1
if __name__ == "__main__":
print(string_match("adbcbdc", "dc"))
최 악의 경우 이 알고리즘 은Θ(nm),사실상 이 알고리즘 의 평균 효율 은 최 악의 효율 보다 훨씬 좋다.사실 무 작위 텍스트 를 찾 을 때 선형 효율 에 속한다.Θ(n)。Horspool 알고리즘:
Horsepool 알고리즘 은 Boyer-Moore 알고리즘 의 간략화 버 전 으로 공간 이 시간 을 바 꾸 는 전형 적 인 예 이기 도 합 니 다.알고리즘 은 패턴 P 와 텍스트 T 의 시작 문 자 를 정렬 하고 패턴 의 마지막 문자 부터 비교 합 니 다.비교 에 실패 하면 패턴 을 뒤로 이동 합 니 다.매번 시도 하 는 과정 에서 비 교 는 오른쪽 에서 왼쪽으로 한다.
만력 알고리즘 에서 패턴 의 모든 이동 은 하나의 문자 이 고 Horspool 알고리즘 의 핵심 사상 은 공간 을 이용 하여 시간 을 바 꾸 고 패턴 이 창 과 일치 하 는 이동 폭 을 향상 시 키 는 것 입 니 다.만력 알고리즘 과 달리 그 패턴 의 매 칭 은 오른쪽 에서 왼쪽으로 이 며,매번 이동 하 는 거 리 를 미리 계산 하여 표 에 병존 한다.
코드 는 다음 과 같 습 니 다:
__author__ = 'Wang'
from collections import defaultdict
def shift_table(pattern):
# Horspool
# c, m
# c m-1 , m
# c
table = defaultdict(lambda: len(pattern))
for index in range(0, len(pattern)-1):
table[pattern[index]] = len(pattern) - 1 - index
return table
def horspool_match(pattern, text):
# horspool
# , text ; -1
table = shift_table(pattern)
index = len(pattern) - 1
while index <= len(text) - 1:
print("start matching at", index)
match_count = 0
while match_count < len(pattern) and pattern[len(pattern)-1-match_count] == text[index-match_count]:
match_count += 1
if match_count == len(pattern):
return index-match_count+1
else:
index += table[text[index]]
return -1
if __name__ == "__main__":
print(horspool_match("barber", "jim_saw_me_in_a_barbershopp"))
분명히 Horspool 알고리즘 의 최 악의 효율 은Θ(nm)。무 작위 텍스트 를 찾 을 때 선형 효율 에 속 합 니 다.Θ(n)。효율 유형 은 같 지만 평균 적 으로 Horspool 알고리즘 은 만력 알고리즘 보다 훨씬 빠르다.총결산
이상 은 Python 이 문자열 일치 알고리즘 코드 예제 에 관 한 모든 내용 입 니 다.도움 이 되 기 를 바 랍 니 다.관심 이 있 는 친 구 는 본 사 이 트 를 계속 참고 할 수 있 습 니 다.
Python 스케줄 링 알고리즘 코드 상세 설명 실현
Python 알고리즘 그림 옮 겨 다 니 기
Python 프로 그래 밍 개미 떼 알고리즘 상세 해석 실현
부족 한 점 이 있 으 면 댓 글로 지적 해 주세요.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.