, 나는 다음과 같은 알고리즘의 시간 복잡도를 요청했다 : 그것은 단지되는 searchString의 길이를 통해 루프 나에게 나타나기 때문에이 알고리즘의 시간 복잡도가 기하 급수적 인 이유는 무엇입니까? 인터뷰하는 동안
static bool SetContainsString(string searchString, HashSet<string> setOfStrings)
{
for (int i = 0; i < searchString.Length; i++)
{
var segment = searchString.Substring(0, i + 1);
if (setOfStrings.Contains(segment))
{
var remainingSegment = searchString.Substring(segment.Length);
if (remainingSegment == "") return true;
return SetContainsString(remainingSegment, setOfStrings);
}
}
return false;
}
나는 "선형"대답했다. 예, 재귀 적입니다. 그러나 재귀 호출은 아직 반복되지 않은 문자열의 부분에만 있으므로 반복의 최종 결과는 문자열의 길이입니다.
나는 최악의 경우의 시간 복잡도가 기하 급수적이라고 내 인터뷰 담당자로부터 들었다.
누구든지 나를 명확히 할 수 있습니까? 내가 틀렸다면, 왜 그 이유를 이해해야합니다.
"재귀 호출은 아직 반복되지 않은 문자열의 부분에만 있으므로 최종 결과는 문자열의 길이입니다."-이 단계를 어떻게 정당합니까? – user2357112
"삼각형 n"처럼 보입니다. 길이가 5 인 문자열은 15 번 반복되는 것처럼 보입니다. 6 번 반복하면 20 번 반복됩니다. 지수 적으로 보이지 않습니다. – Carcigenicate
재귀 호출이 'true'를 반환 한 경우에만 해당 결과를 반환하는 대신 인터뷰의 코드에 무조건'return SetContainsString (remainingSegment, setOfStrings); – user2357112