트라이

정의

우리가 여러 문자열을 가지고 있을 때, 그문자열이 어떤 문자열중 하나인지 어떻게 알 수 있을까요?

 

컴퓨터는 효율적이지 않으며 비교만 합니다. 예를 들어, 최대 길이가 mm인 nns 세트에서, 같은 방식으로, 최대 길이가 mm인 문자열이 문자열 세트에 포함되어 있는지 여부를 변경하면, 우리는 전처리가 필요하지 않지만 최악의 경우 O (nm)O (nm)의 비교 수가 필요합니다.

 

이 문자열을 정렬 한 후 이진 탐색이라는 강력한 알고리즘을 사용하여 O (m log n)O (mlogn)로 단축 할 수 있지만 정렬 프로세스 자체에는 O (n m log)가 있습니다. n)O (nmlogn) [1]에 시간이 걸리기 때문에 사양이없는 컴퓨터 인 경우 비효율적이지만 위에서 설명한 시간 복잡성을 압도합니다. 그것은 존재합니다. 프레드킨이 명명한 트리라는 재료의 구조를 설명하는 가장 효율적인 문자열 검색 방법은 이제입니다.

 

구조

 

 

기본적으로 영어 사전을 고려할 때 쉬운 K-jintrees의 구조가 있으며 접두사에서 c의 지수를 찾아 c라는 단어를 발견한 다음 a, n을 순서대로 검색합니다. 컴퓨터에 논리적으로 적용된 구조는 삼중 구조입니다. 예를 들어, tea라고 불리는 문자열이 입력되고 다음 e가 등록되면 초기 t가 순서대로 등록되고 다음 a가 끝에 발견되면 위치가 여기 문자열이 있다고합니다. 이것은 라고 불리며, 그러한 시작 문자열을 접두사라고합니다.

 

이러한 3 구조는 그들이 찾고 있는 많은 문자열 공간을 사용하는 대신 문자열의 길이에 따라 빠른 검색을 허용합니다.

 

일반적으로 동적 할당을 통해 생성되지만 배열을 통해 구현하는 방법을 설명합니다.

트리에 등록하려는 문자열 p를 처음 갖는 것입니다 (편의를 위해이 문자열이 알파벳 소문자로만 구성되었다고 가정 함).

그리고 항상 0의 트리의 루트이며,이 0으로 시작하여 다음 노드로 이동할 수 있는지 여부는 p [i]-a에 대해 결정됩니다.

이동할 수 있고 이동할 수 없는 경우 시도에 1을 추가한 다음 새 노드를 만든 다음 이 항목에서 가르칩니다.

동적 할당을 사용할 수 있는 전문가는 할당 후 그렇게 말할 수 있습니다.

 

시간 복잡도

 

문자열 길이가 시간 복잡화되면 문자열 길이가 mm이면 시간 복잡도가 O (m)O (m)입니다. 이유는 간단합니다. nn과 mm가 상대적으로 작으면 구현할 때 배열이 사용됩니다.현재 노드 위치가 i, j 문자인 경우 O (1)O (1)에서 트리 [i] [j]의 위치를 조회할 수 있습니다. 여기서 mm 숫자를 수행하면 O (m)O (m)에 시간이 걸릴 수 있지만 nn과 mm가 크면 메모리를 확보하는 데 시간을 낭비하더라도 std : : : : map으로 시도할 수 있습니다. 시간 n)O (mlogn)를 소비합니다.

 

'PC 와 IT' 카테고리의 다른 글

해시  (0) 2020.07.07
그래프  (0) 2020.07.07
트리  (0) 2020.07.07
  (0) 2020.07.06
스택  (0) 2020.07.06

+ Recent posts