이 질문은 알고리즘에 관한 것입니다. 의사 코드 이 같다 : 루프 문자열의 배열에서 문자열을 찾는 가장 빠른 알고리즘은 무엇입니까?
A = Array of strings; //let's say count(A) = N
S = String to find; //let's say length(S) = M
for (Index=0; Index<count(A); Index++)
if (A[Index]==S) {
print "First occurrence at index\x20"+Index;
break;
}
이
가 N 회 (또는 바이트 비교 N * M 회, O (N의 *를 M)) 문자열 비교를 필요로한다. 배열 A에 많은 항목이 있거나 문자열 S가 너무 길 때 이것은 좋지 않습니다.첫 번째 발생을 찾는 더 좋은 방법은 무엇입니까? O (K * logK)에서의 알고리즘은 괜찮지 만 O (K) 또는 O (logK)에서 가장 좋습니다. 여기서 K는 N 또는 M입니다.
다른 구조를 추가하거나 비교 루프 전에 일부 데이터 처리를 수행합니다.
"문자열 S가 너무 긴 경우"는 문자열이 많지 않으면 관련이 없습니다 '와 동일한 길이와 동일한 긴 접두어를 사용하십시오. (길이가 다르거 나 길이가 다를 경우 문자열 동일성 검사는 즉시 끝날 수 있습니다.) – Dougal
왜 공백 대신'\ x20'을 사용합니까? 나는 궁금하다 :-) –
오 예, 비교 시간은 배열 A의 문자열의 길이에 더 의존합니다. – jondinham