예를 들어 문자열이 주어졌습니다. "acdfdcqqc"
이고 가장 큰 회문 하위 문자열을 찾으려면 알고리즘을 만들어야합니다.이 경우 "cdfdc"
입니다. 2n 개의 가능한 시작 각각에 대해가장 큰 회문색 부분 문자열 찾기, 알고리즘 복잡도
a - c - d - f - d - c - q - q - c
1 0 1 0 1 0 5 0 1 0 1 0 1 4 1 0 1
: 그것은 크기 2N의 배열과 중심 즉 대 그 시점에 가장 회문의 길이를 산출 할 때마다 작성하여 O (N^2) 알고리즘을 고안 쉽게 포인트 나는 그 위치에서 시작하는 가장 큰 회상의 길이를 찾는 양방향으로 움직입니다. 따라서 2n 작업 각각에 대해 대부분의 O (n) 작업을 수행하므로 O (n^2) 시간의 복잡성이 발생합니다.
내가 알기 좋아하는 것을 사용하여 선형 시간으로 수행 할 수 있음을 알고 있습니다 : https://en.wikipedia.org/wiki/Longest_palindromic_substring.
그러나 처리중인 문자열이 자연어 텍스트에서 추출되었다고 가정합니다. 영어 텍스트에서 임의로 위치를 선택하면 예상되는 대칭이 매우 낮습니다. 나는 예상되는 공산주의가 각면에서 한 캐릭터보다 적다고 말할 것이다. 따라서, 제 알고리즘이 2n 배의 예상 상수 시간 연산을 수행하여 알고리즘 O (n)을 평균적으로 수행한다고 말할 수 있습니까? O(n)
시간은 모든 가능한 입력 위해 이렇게 않는다는 것을 의미 예상
"예상 한"시간이란 의미가 아닙니다. 당신은 최악의 경우를 묘사하고 있습니다. Quicksort가 예상됩니다. O (n log n); 해시 테이블 조회가 예상됩니다. O (n); 둘 다 일반적으로 들립니다. (최악의 경우는 각각 O (n²)와 O (n)입니다. 사용 사례에 더 유용합니까?) – rici
@rici Quicksort의 최악의 시간은 O (n²)이지만 예상 실행 시간은 O n) * 모든 입력에 *. 나쁜 입력은 드물지 않으며 존재하지 않습니다. 반면에 질문에 설명 된 알고리즘은 대부분의 입력이 "양호"하다고 가정하므로 일반적으로 O (n)에서 실행됩니다. 그러나 기대에 못 미치는 것입니다. Quicksort는 입력이 분산되어 있기 때문에 내부의 임의성 때문에 빠릅니다. – snakile
평균적인 복잡성을 찾기 위해 Eurler 공식 (평면 그래프에서만 작동)을 사용하여 평면 그래프에 대한 모든 알고리즘에 대해 생각해 보았습니다. 그들은 가장 일반적인 그래프 사례를 다루지 않습니다. 성명서에서 우리가 사례의 하위 집합에만 관심이 있다는 것이 분명하다면, 평균 시간 복잡성 계산에 사전 지식을 포함시키는 것이 좋습니다. 아니 ? – user3091275