엠트리

M-tree

컴퓨터 과학에서 M-treeR-treeB-tree와 유사한 나무 데이터 구조다.미터법을 사용하여 구성되며 효율적인 범위와 k-NN(k-near) 쿼리를 위해 삼각형 불평등에 의존한다.M-tree는 여러 조건에서 좋은 성능을 발휘할 수 있는 반면, 트리 역시 큰 겹침을 가질 수 있으며 중첩을 가장 잘 피할 수 있는 방법에 대한 명확한 전략이 없다.또한 삼각불평등을 만족시키는 거리함수에만 사용할 수 있는 반면, 정보 검색에 사용되는 많은 진보된 이종함수는 이를 만족시키지 못한다.[1]

개요

ELKI를 사용하여 시각화된 2D M-Tree.모든 푸른 구(리프)는 붉은 구(디렉토리 노드)에 담겨 있다.잎은 겹치지만 너무 많지는 않다; 여기서 디렉토리 노드는 훨씬 더 겹친다.

모든 트리 기반 데이터 구조에서와 같이, M-Tree는 노드와 리프로 구성되어 있다.각 노드에는 이를 고유하게 식별하는 데이터 개체와 하위 트리에 대한 포인터가 있다.모든 리프에는 여러 개의 데이터 개체가 있다.각 노드에 대해 원하는 메트릭 공간에서 볼(Ball)을 정의하는 반지름 이(가) 있다.따라서 특정 노드 에 있는 모든 노드 displaystyle n l 이(가) N 에서 최대 r r 있고 노드 N N}이(가 있음)인 모든 ndisplaystyp 그로부터의 거리를 측정하다

M-트리 건설

구성 요소들

M-Tree에는 다음과 같은 구성 요소와 하위 구성 요소가 있다.

  1. 잎이 아닌 노드
    1. 라우팅 개체 N의RO 집합.
    2. 노드의 상위 개체 O에p 대한 포인터.
  2. 리프 노드
    1. 개체O N의 집합.
    2. 노드의 상위 개체 O에p 대한 포인터.
  3. 라우팅 개체
    1. (특성 값) 라우팅 개체 Or.
    2. 커버 반지름 r(Or)
    3. 커버 트리 T(Or)에 대한 포인터.
    4. 상위 객체 d(Or,P(Or))로부터의 Or 거리
  4. 오브젝트
    1. (특징값:) 객체j O.
    2. 개체 식별자 oid(Oj).
    3. 상위 객체 d(Oj,P(Oj))로부터의 Oj 거리

삽입하다

주된 아이디어는 우선 새로운 객체 O가 속하는 리프 노드 N을 찾는 이다.N이 가득 차지 않으면 N에 연결하고, N이 가득 차면 메소드를 호출하여 N을 분할하십시오.알고리즘은 다음과 같다.

알고리즘 삽입 입력: M-Tree MT의 노드 N, 엔트리   출력:원본 MT +   의 모든 항목을 포함하는 MT의 새 인스턴스
's routing objects or objects   if N is not a leaf then   {        /* Look for entries that the new object fits into */        let  be routing objects from 's set of routing objects  such that  if  is not empty then        {           /* If there are one or more entry, then look for an entry such that is closer to the new object */                   }        else        {           /* If there are no such entry, then look for an object with minimal distance from */            /* its covering radius's edge to the new object */                      /* Upgrade the new radii of the entry */                   }        /* Continue inserting in the next level */        return insert(); else   {        /* If the node has capacity then just insert the new object */        if N is not full then        { store() }        /* The node is at full capacity, then it is needed to do a new split in this level */        else        { split() }}
  • "직접"은 할당을 의미한다.예를 들어, "가장 큰 ←항목"은 가장 큰 값이 항목의 가치를 변화시킨다는 것을 의미한다.
  • "return"은 알고리즘을 종료하고 다음 값을 출력한다.

분할

분할 방법이 트리의 루트에 도착하면, N에서 두 개의 라우팅 객체를 선택하고, 원본 N에 있는 모든 객체를 포함하는 두 개의 새로운 노드를 생성하여 새로운 루트에 저장한다.분할 방법이 트리의 루트가 아닌 노드 N에 도착하는 경우, 방법은 N에서 두 개의 새로운 라우팅 개체를 선택하고, N 1} 및 }}개의 새로운 노드에서 N의 모든 라우팅 개체를 다시 정렬하고 이러한 새 노드를 오리기나의 상위 노드 에 저장한다.L. (가) 2{\}}개를 저장할 용량이 충분하지 않을 경우 분할을 반복해야 한다알고리즘은 다음과 같다.

알고리즘 분할 입력: M-Tree MT의 노드 N, 엔트리   출력:새 파티션을 포함하는 MT의 새 인스턴스. 
/* 이제 새로운 라우팅 개체는 노드에 있는 모든 개체와 새로운 라우팅 개체 N이 루트가 아닌 경우 { /*노드와 상위 라우팅 개체 */ p {\ N 상위 라우팅 개체 경우 Nlet O {\ O_p}가 상위 라우팅 개체로  be the parent node of N   }   /* This node will contain part of the objects of the node to be split */   Create a new node N'   /* Promote two routing objects from the node to be split, to be new routing objects */   Create new objects  and .   Promote()   /* Choose which objects from the node being split will act as new routing objects */   Partition()   /* Store entries in each new routing object */   Store 's entries in N and 's entries in N' if N is the current root then   {       /* Create a new node and set it as new root and store the new routing objects */       Create a new root node  Store  and  in    }   else   {       /* Now use the parent routing object to store one of the new objects */       Replace entry  with entry  in  if  is no full then{ /* 두 번째 라우팅 개체는 여유 용량이 있는 경우에만 상위 항목에 저장된다 */ N p 에 O      {\p} 다른 /*사용 가능한 용량이 없는 경우 레벨을 위로 분할*/ 분할( p, O   ) )}}
  • "직접"은 할당을 의미한다.예를 들어, "가장 큰 ←항목"은 가장 큰 값이 항목의 가치를 변화시킨다는 것을 의미한다.
  • "return"은 알고리즘을 종료하고 다음 값을 출력한다.

M-트리 쿼리

범위 쿼리

범위 쿼리는 최소 유사성/최대 거리 값이 지정된 곳이다.For a given query object and a maximum search distance , the range query range(Q, r(Q)) selects all the indexed objects such that .[2]

알고리즘 범위검색(RangeSearch)은 루트 노드에서 시작하여 적격 객체로 이어지는 것에서 제외할 수 없는 모든 경로를 재귀적으로 통과시킨다.

알고리즘 범위검색 입력: M-Tree MT의 노드 N, Q: 쿼리 개체, ( )  r: 검색 반지름
: d(  j, )  ( )  r과 같은 모든 DB 개체
{    let  be the parent object of node N; if N is not a leaf then {      for each entry() in N do {           if  then {Compute ; if  then RangeSearch(*ptr()),Q,);            }     }   }   else {      for each entry() in N do {           if  then {              Compute ; if  then add   (  )  결과: } } } }
  • "직접"은 할당을 의미한다.예를 들어, "가장 큰 ←항목"은 가장 큰 값이 항목의 가치를 변화시킨다는 것을 의미한다.
  • "return"은 알고리즘을 종료하고 다음 값을 출력한다.
  • ( O ) 별도의 데이터 파일에 있는 개체의 식별자다.
  • ( ) 트리 – r 의 피복 트리.

k-NN 쿼리

K 가장 가까운 이웃(k-NN) 쿼리는 입력 세트의 카디널리티를 입력 매개 변수로 사용한다.주어진 쿼리 객체 Q ∈ D와 정수 k ≥ 1에 대해 k-NN 쿼리 NN(Q, k)은 거리 함수 d에 따라 Q로부터 최단 거리를 가지는 k-N 인덱싱 객체를 선택한다.[2]

참고 항목

참조

  1. ^ Ciaccia, Paolo; Patella, Marco; Zezula, Pavel (1997). "M-tree An Efficient Access Method for Similarity Search in Metric Spaces" (PDF). Proceedings of the 23rd VLDB Conference Athens, Greece, 1997. IBM Almaden Research Center: Very Large Databases Endowment Inc. pp. 426–435. p426. Retrieved 2010-09-07.
  2. ^ a b P. Ciaccia; M. Patella; F. Rabitti; P. Zezula. "Indexing Metric Spaces with M-tree" (PDF). Department of Computer Science and Engineering. University of Bologna. p. 3. Retrieved 19 November 2013.