또 다른 가능성은 두 번의 시도를 만드는 것입니다.
첫 번째 이름은 T1
이되고, 마지막 이름은 두 번째 이름입니다 (T2
).
당신이 (보통 $
기호로 표시) T1
각 단어 터미네이터에서의 트라이를 구성
는
T2
의 관련 항목에 대한 포인터의 목록을 추가하고, 그 반대.
I.E.
T1:
J
|
O
|
H
|
N
|
$1
T2:
D
|
O
|
E
|
$2
$ 1 $ 1 포함, 목록을 개최한다 $ 2 $ 2로 포인터를 포함하는 목록을 개최한다 : 존 도우는 입장 인 경우.
각 접두사 검색은 자동 완성을 얻은 다음 포인터를 사용하여 전체 이름을 가져옵니다 (부분 검색은 성/이름 만 입력하면 포인터를 사용하여 두 번째 정보를 얻음). 이름을 검색
이 모두 시도에서 검색하면됩니다, 당신은 포인터의 일치 여부를 확인해야합니다 (T1
과 T2
의 마지막 이름의 이름을 찾아, 각각 관련 $1
및 $2
를 얻을 수) (목록 l1
in $1
은 $2
이고 목록 l2
은 $2
에 $1
을 포함합니다. 그들이하는 경우 - 이름은 사전에 있습니다.
$
노드에 대한 포인터가 있으면 루트가되어 $
기호가 나타내는 단어를 얻을 때까지 간단히 트라이로 돌아갈 수 있습니다.(각 노드의 상위 노드에 대한 포인터가 필요함)
참고 : 간단한 시도에 대해 설명했지만, patricia를 사용하지 않는 이유는 없습니다. 동일한 접근 방식을 사용합니다.
답변 해 주셔서 감사합니다. 그러나 문자열을 검색 할 때 동일한 사람을 나타내는 두 개의 레코드를 얻는 것이 가능합니다! 예를 들면 marco marchi. 그래서 내가 마르크를 찾으면 나는 마르코 마르치와 마르크 마르코의 두 기록을 얻습니다. 그래서 뭐 할까? – Mapo
균형 잡힌 나무가 어떻게 부분 일치를 줄 수 있습니까? 또한 균형 잡힌 나무는 덜 효율적입니다. 즉, 현존하는 문자열을 찾아내는 것입니다. – amit
주소 나 생년월일의 일부를 키에 추가 할 수도 있습니다. 사용자가 올바른 항목을 선택하는 데 도움이되는 것이 이상적입니다. 고유 키가 있는지 확인하고 값 목록을 필요로하지 않으려면 고유 한 레코드 ID를 추가하십시오. 사용자로부터 ID를 숨길 수 있습니다. –