KR20070101288A - 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램 - Google Patents

트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램 Download PDF

Info

Publication number
KR20070101288A
KR20070101288A KR1020077017189A KR20077017189A KR20070101288A KR 20070101288 A KR20070101288 A KR 20070101288A KR 1020077017189 A KR1020077017189 A KR 1020077017189A KR 20077017189 A KR20077017189 A KR 20077017189A KR 20070101288 A KR20070101288 A KR 20070101288A
Authority
KR
South Korea
Prior art keywords
node
array
nodes
vertex
identifier
Prior art date
Application number
KR1020077017189A
Other languages
English (en)
Inventor
신지 후루쇼
Original Assignee
가부시키가이샤 터보 데이터 라보라토리
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가부시키가이샤 터보 데이터 라보라토리 filed Critical 가부시키가이샤 터보 데이터 라보라토리
Publication of KR20070101288A publication Critical patent/KR20070101288A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 트리형 데이터 구조의 데이터간의 관계를 효율적으로 트레이스할 수 있는 트리형 데이터 구조에 있어서, 효율적이고 또한 고속으로 트리를 검색, 집계, 소트한다. 트리형 데이터 구조의 토폴로지를 검색하는 방법에 있어서, 검색 키가 되는 트리를 표현하는 검색 키 배열로서, 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 메모리 중에 생성하고, 검색 키 배열 중의 노드 식별자에 오프셋을 부여하여 오프셋이 부여된 노드 식별자와, 오프셋에 따른, C-P배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하여 비교에 의해 모두가 일치한 C-P배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 나타내는 정점 노드 리스트를 기억 장치 중에 생성한다.
정보 처리 장치, 기억 장치, 컴퓨터

Description

트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의 검색, 집계, 소트 프로그램{TREE SEARCH, TOTALIZING, SORT METHOD, INFORMATION PROCESSING DEVICE, AND TREE SEARCH, TOTALIZING, AND SORT PROGRAM}
본 발명은 기억 장치상에 구축된 트리형 데이터 구조를 표현하는 배열로부터 트리를 검색, 집계, 소트하는 방법, 그 방법을 실현하는 정보 처리 장치, 및 트리를 검색, 집계, 소트하기 위한 프로그램에 관한 것이다.
데이터베이스는 여러 가지의 용도로 이용되고 있는데, 중규모 내지 대규모 시스템에 있어서는 논리적인 모순을 배제할 수 있는 관계형 데이터베이스(RDB)의 사용이 주류로 되어 있다. 예를 들어, RDB는 비행기의 좌석 예약 등의 시스템에 이용되고 있다. 이 경우, 키 항목을 지정함으로써 (대부분의 경우 1건의) 타겟을 신속히 검색할 수도 있고, 혹은 예약의 확정, 취소 혹은 변경 등을 실시할 수 있다. 또한, 각 편의 좌석수는 겨우 수 백이기 때문에 특정 항공편의 빈 좌석수를 구하는 것도 가능하다.
이와 같은 RDB는 표 형식 데이터의 취급에 적합하지만, 트리 형식 데이터의 취급에는 적합하지 않은 것이 알려져 있다(예를 들면, 비특허문헌1을 참조.).
또한, 어플리케이션 중에는 표 형식에 의한 표현보다도 트리 형식에 의한 표 현이 적절한 것이 존재한다. 특히, 근년, 인트라넷이나 인터넷의 어플리케이션의 데이터 표준으로서 트리형 데이터 구조를 채용하는 XML이 보급되어 있다(XML의 상세한 것에 대해서는 예를 들면, 비특허문헌2를 참조.)
그러나, 트리형 데이터 구조의 취급, 예를 들면, 트리 형식 데이터의 검색은 일반적으로 효율이 매우 나쁘다. 이 효율이 나쁜 첫번째 이유는 데이터가 각처의 노드에 분산되어 존재하기 때문에 데이터가 존재해야 할 장소를 즉시 특정하는 것이 곤란한 점에 있다. RDB에서는 예를 들면, 「연령」이라는 데이터는 어느 테이블의 「연령」이라는 항목에만 격납되어 있다. 그러나, 트리형 데이터 구조에서는 「연령」이라는 데이터를 보관 유지하는 노드가 각처에 산재되어 있으므로 일반적으로는 트리형 데이터 구조의 전체를 조사하지 않으면 해당하는 데이터를 검색할 수 없다.
효율이 나쁜 두번째 이유는 검색의 결과를 표현하기 위해서 시간이 걸린다는 점에 있다. 검색에 히트된 노드군을 표현하고자 하면 자주 그 노드의 자손에 해당하는 노드도 표현해야 하는데, RDBMS와는 달리 데이터 구조가 비정형이기 때문에 자손 노드를 표현하기 위해서 시간이 걸린다.
그래서, 데이터베이스의 주류인 RDB의 이점을 살리기 위해 종래, 트리형 데이터 구조를 데이터베이스화할 때 트리 형식 데이터를 RDB화하는 방법(예를 들면, 특허문헌1을 참조.)이 제안되어 있다. RDB에서는 데이터는 테이블(표)로 분해하여 보관 유지된다. 그 때문에, 실제의 트리 형식 데이터를 RDB화하려면 트리 형식 데이터를 테이블에 집어넣을 필요가 있다. 그러나, 다양한 트리형 데이터 구조를 취 급하기 위해서는 그 구조마다 개별적으로 데이터를 테이블에 집어넣어 시스템 설계를 실시해야 한다. 따라서, RDB에 의거하는 시스템 구축은 매우 수고스러운 작업이다.
이에 반해, 트리 형식 데이터, 특히, XML 데이터를 그대로의 형태로 데이터베이스화하는 방법도 제안되어 있다. 트리형 데이터 구조인 경우 하나의 노드에 자손 노드를 매달 수 있어 다양한 표현이 가능하기 때문에 시스템 설계의 수고를 큰폭으로 삭감할 수 있다. 따라서, XML과 같은 트리 구조를 취급할 수 있는 기술을 핵으로 하여 트리 구조 데이터를 처리하는 것의 요구가 높아지고 있다.
XML 데이터를 그대로의 형태로 데이터베이스화하는 방법의 일례의 어프로치는 트리 구조에 기입되어 있는 데이터의 카피를 꺼내, 예를 들면, 「연령」이라는 항목이면 「연령」의 검색용 인덱스 테이터를 별도 보관 유지한다(예를 들면, 특허문헌2를 참조.). 이에 따라, 데이터 자체에 속성을 부가할 수 있다는 XML 데이터의 메리트를 십분 활용함과 아울러, 태그를 이용하여 표현된 각 항목의 관계 구조를 그대로 기억할 수 있도록 하고 있다.
특허문헌1: 일본 공개 특허 공보 2003-248615호
특허문헌2: 일본 공개 특허 공보 2001-195406호
비특허문헌1: 주식회사 섹, "Karearea WhitePaper" [online], [2004년 2월 19일 검색], 인터넷 <URL:http://www.sec.co.jp/products/karearea/>
비특허문헌2: W3C, "Extensible Markup Language(XML) 1.0(ThirdEdition)", [online], 2004년 2월 4일, [평성16년 2월 19일 검색], 인터넷< URL:http://www.w3.org/TR/2004/REC-xml-20040204/>
그러나, 검색용 인덱스 테이터를 별도 보관 유지하는 어프로치에서는 적어도 데이터는 이중으로 보관 유지되며, 또한, 인덱스를 작성하는 코스트 및 인덱스를 격납하기 위한 데이터 영역이 필요하게 되어, 대규모 데이터를 보관 유지하는데 있어서 불리하다.
실제, 이와 같은 메카니즘에 의해 실제로 검색을 실시하여 노드를 특정했다고 해도, 그 노드를 표현하기 위해서는 시간이 걸린다. 또한, 이 메카니즘은 노드간의 관계를 문제로 하는 검색(예를 들면, 조상에 「60세」라는 「연령」을 포함하고, 자손에 「1세」라는 「연령」을 포함하는 트리의 추출)에는 이용할 수 없다.
이와 같은 종래 기술의 근본적인 문제점은 개개의 데이터에만 주목하여 데이터를 축적한 노드간을 포인터로 접속함으로써 트리형 데이터 구조가 표현되어 있기 때문에 데이터간의 관계, 예를 들면, 부모 자식, 조상, 자손, 형제(시블링(sibling)), 세대 등의 관계를 효율적으로 트레이스하지 못하는 데에 있다. 바꾸어 말하면, 포인터는 그 값이 일정하지 않기 때문에 데이터의 격납 어드레스를 나타낸다는 용도로 밖에 사용할 수 없어, 노드간의 관계를 직접적으로 표현할 수 없다.
그래서, 본 발명은 트리형 데이터 구조의 데이터간의 관계를 효율적으로 트레이스할 수 있는 트리형 데이터 구조에 있어서 효율적이고 또한 고속으로 트리를 검색, 집계, 소트하는 방법을 제공하는 것을 목적으로 한다. 또한, 본 발명은 상기 트리형 데이터 구조에 있어서 트리를 검색, 집계, 소트하는 정보 처리 장치, 및 검색, 집계, 소트 프로그램을 제공하는 것을 목적으로 한다.
본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
각각이 특정 노드 및 그 자손 노드를 포함하는 1 이상의 노드군인 부분 트리를 표시하기 위해서 그 특정 노드를 정점 노드로 하여 상기 노드 식별자를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법에 의해 달성된다.
바람직한 실시형태에 있어서는 상기 제 1 배열 중의 부분을 특정하는 스텝이 정점 노드의 노드 식별자가 나타내는 상기 제 1 배열 중의 위치로부터 노드 식별자가 증대하는 방향으로 상기 제 1 배열 중의 값이 상기 정점 노드 식별자가 나타내는 상기 제 1 배열 중의 값보다 큰 범위를 특정하는 스텝을 포함한다.
또한, 바람직한 실시형태에 있어서는 상기 표준 형식의 제 2 배열을 생성하는 스텝이 상기 제 1 배열의 부분과 동일 사이즈의 배열의 영역으로서, 그 격납 위치 번호로서 상기 루트 노드의 노드 식별자를 초기값으로 하는 연속되는 정수가 부여된 영역을 상기 기억 장치 중에 확보하는 스텝과,
상기 제 1 배열의 부분에 격납된 값에서 정점 노드의 노드 식별자를 뺀 값을 각각 상기 영역에 격납하는 스텝을 포함한다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
상기 제 1 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하는 방법이며,
검색 키가 되는 트리를 표현하는 검색 키 배열로서 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 기억 장치 중에 생성하는 스텝과,
상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 제 1 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 나타내는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 검색 방법에 의해 달성된다.
바람직한 실시형태에 있어서는 상기 노드 식별자의 모두가 일치한 경우에 상기 제 1 배열 중의 부분 말미 다음의 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드에 의해 특정되는 부분 트리에 포함되는지의 여부를 판단하는 스텝과,
상기 부분 트리에 포함되지 않는 경우에 상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치에 생성하는 스텝을 구비하고 있다.
또 다른 바람직한 실시형태에 있어서는 상기 노드가 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와, 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
모든 실체 정보가 상기 키 배열에 관한 대응하는 실체 정보와 일치한 바와 같은 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 더 구비하고 있다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
제 1 배열에 의해 특정되는 트리의 부분 트리를 집계하는 방법이며,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
상기 생성된 제 2 배열을 참조하여 제 2 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 제 2 배열의 종별과 관련지어 상기 기억 장치 중에 기억하는 스텝을 구비한 것을 특징으로 하는 집계 방법에 의해 달성된다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
상기 제 1 배열에 의해 특정되는 트리의 부분 트리의 순서를 소트하는 방법이며,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
상기 생성된 제 2 배열을 참조하여 설정된 평가 기준에 따라 상기 정점 노드의 노드 식별자의 순서를 교체하는 스텝을 구비한 것을 특징으로 하는 소트 방법에 의해 달성된다.
또한, 본 발명의 목적은 트리형 데이터 구조를 기억 장치 중에 구축하는 방법이며,
동세대보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 노드 식별자로서 고유의 연속되는 정수를 부여하는 스텝과,
자식 노드를 갖는 노드에 대해서 각각의 노드 식별자와, 그 자식 노드를 갖는 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 트리형 데이터 구조의 구축 방법에 의해서도 달성된다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
상기 제 1 배열 중의 노드 식별자와, 상기 제 1 배열에 있어서 노드 식별자가 출현하는 수를 나타내는 출현수의 세트를 상기 제 1 배열 중의 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법에 의해서도 달성된다.
어느 바람직한 실시형태에 있어서, 상술한 집계 배열에 의거하여 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열을 생성하는 방법은,
상기 집계 배열 중의 출현수에 의거하여 노드 식별자를 격납 위치 번호로 하는 제 1 배열을 위한 영역을 상기 기억 장치 중에 확보하는 스텝과,
상기 집계 배열 및 제 1 배열의 각각에 있어서, 제 1 포인터 및 제 2 포인터를 초기 위치에 배치하는 스텝과,
상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하는 경우에 상기 제 1 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 1 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 1 포인터 및 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝과,
상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하지 않는 경우에 상기 집계 배열에 있어서 상기 제 1 포인터에 초기적으로 배치되는 제 3 포인터를 그 격납 위치 번호를 빼도록 이동시키고, 처음에, 집계 배열에 있어서 그 출현수가 「0」이 되지 않는 위치를 특정하여 그 제 3 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 3 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 2 포인터를 그 격납 위치 번호가 증가하도록 이동시키는 스텝을 구비하고 있다.
또한, 바람직한 실시형태에 있어서, 상술한 집계 배열로부터 정점 노드 및 그 자손 노드를 포함하는 부분 트리를 표시하는 부분 배열을 생성하는 방법은,
상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 상기 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝을 구비하고 있다.
보다 바람직한 실시형태에 있어서는, 또한, 상기 부분 배열에 있어서 상기 노드 식별자로부터 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝을 구비하고 있다.
또 다른 바람직한 실시형태에 있어서, 상술한 집계 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하는 방법은,
상기 검색 키가 되는 트리를 표현하는 검색 키 배열로서 자식 노드를 갖는 노드에 대해서 각각의 노드 식별자와 그 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝과,
상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와, 상기 오프셋에 따른 상기 집계 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
상기 비교에 의해 모두가 일치한 집계 배열의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 격납하는 스텝을 구비하고 있다.
바람직한 실시형태에 있어서는 상기 노드가 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와, 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 바와 같은 상기 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 더 구비하고 있다.
또한, 바람직한 실시형태에 있어서는, 상술한 집계 배열에 의거하여 그 집계 배열에 의해 특정되는 트리의 부분 트리를 집계하는 방법은,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝과,
상기 부분 배열에 있어서 상기 노드 식별자로부터 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝과,
상기 생성된 표준 형식의 부분 배열을 참조하여 상기 표준 형식의 부분 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 종별과 관련지어 상기 기억 장치 중에 기억하는 스텝을 구비하고 있다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서, 부분 트리를 표시하는 배열을 생성하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
각각이 특정 노드 및 그 자손 노드를 포함하는 1 이상의 노드군인 부분 트리를 표시하기 위해서 그 특정 노드를 정점 노드로 하여 상기 노드 식별자를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
바람직한 실시형태에 있어서는 상기 제 1 배열 중의 부분을 특정하는 스텝에 있어서,
정점 노드의 노드 식별자가 나타내는 상기 제 1 배열 중의 위치로부터 노드 식별자가 증대하는 방향으로 상기 제 1 배열 중의 값이 상기 정점 노드 식별자가 나타내는 상기 제 1 배열 중의 값보다 큰 범위를 특정하는 스텝을 상기 컴퓨터에 실행시킨다.
또 다른 바람직한 실시형태에 있어서는 상기 표준 형식의 제 2 배열을 생성하는 스텝에 있어서,
상기 제 1 배열의 부분과 동일 사이즈의 배열의 영역으로서, 그 격납 위치 번호로서 상기 루트 노드의 노드 식별자를 초기값으로 하는 연속되는 정수가 부여된 영역을 상기 기억 장치 중에 확보하는 스텝과,
상기 제 1 배열의 부분에 격납된 값에서 정점 노드의 노드 식별자를 뺀 값을 각각 상기 영역에 격납하는 스텝을 상기 컴퓨터에 실행시킨다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
상기 제 1 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
검색 키가 되는 트리를 표현하는 검색 키 배열로서, 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 기억 장치 중에 생성하는 스텝과,
상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 제 1 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
바람직한 실시형태에 있어서는 상기 컴퓨터에,
상기 노드 식별자의 모두가 일치한 경우에 그 배열의 부분의 말미의 다음의 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드에 의해 특정되는 부분 트리에 포함되는지의 여부를 판단하는 스텝과,
상기 부분 트리에 포함되지 않는 경우에 상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 실행시킨다.
또 다른 바람직한 실시형태에 있어서는 상기 노드가 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
상기 컴퓨터에,
상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와, 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 바와 같은 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치에 생성하는 스텝을 더 실행시킨다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
제 1 배열에 의해 특정되는 트리의 부분 트리를 집계하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
상기 생성된 제 2 배열을 참조하여 제 2 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 제 2 배열의 종별과 관련지어 상기 기억 장치 중에 기억하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
상기 제 1 배열에 의해 특정되는 트리의 부분 트리의 순서를 소트하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
상기 생성된 제 2 배열을 참조하여 설정된 평가 기준에 따라 상기 정점 노드의 노드 식별자의 순서를 교체하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
또한, 본 발명의 목적은 트리형 데이터 구조를 컴퓨터의 기억 장치 중에 구축하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
동세대보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 노드 식별자로서 고유의 연속되는 정수를 부여하는 스텝과,
자식 노드를 갖는 노드에 대하여 각각의 노드 식별자와 그 자식 노드를 갖는 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
또한, 본 발명의 목적은 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서, 상기 트리형 데이터 구조를 그 컴퓨터의 기억 장치 중에 구축하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램이며,
상기 컴퓨터에,
상기 제 1 배열 중의 노드 식별자와, 그 값이 출현하는 수인 출현수의 세트를 상기 제 1 배열 중의 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 생성하고, 그 집계 배열을 상기 기억 장치에 격납하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램에 의해서도 달성된다.
바람직한 실시형태에 있어서는 상기 집계 배열에 의거하여 노드간의 부모 자식 관계를 표현하는 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열을 생성하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램은,
상기 컴퓨터에,
상기 집계 배열 중의 출현수에 의거하여 노드 식별자를 격납 위치 번호로 하는 제 1 배열을 위한 영역을 상기 기억 장치 중에 확보하는 스텝과,
상기 집계 배열 및 제 1 배열의 각각에 있어서, 제 1 포인터 및 제 2 포인터를 초기 위치에 배치하는 스텝과,
상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하는 경우에 상기 제 1 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 1 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 1 포인터 및 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝과,
상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하지 않는 경우에 상기 집계 배열에 있어서 상기 제 1 포인터에 초기적으로 배치되는 제 3 포인터를 그 격납 위치 번호를 빼도록 이동시키고, 처음에, 집계 배열에 있어서 그 출현수가 「0」이 되지 않는 위치를 특정하여 그 제 3 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 3 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝을 실행시킨다.
다른 바람직한 실시형태에 있어서는 상기 집계 배열로부터 정점 노드 및 그 자손 노드를 포함하는 부분 트리를 표시하는 부분 배열을 생성하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램은,
상기 컴퓨터에,
상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
상기 집계 배열에 있어서 격납 위치 번호가 증가하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 상기 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝을 실행시킨다.
보다 바람직한 실시형태에 있어서는, 상기 컴퓨터에,
상기 부분 배열에 있어서 상기 노드 식별자에서 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝을 더 실행시킨다.
또 다른 바람직한 실시형태에 있어서, 상기 집계 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램은,
상기 컴퓨터에,
상기 검색 키가 되는 트리를 표현하는 검색 키 배열로서, 자식 노드를 갖는 노드에 대해서 각각의 노드 식별자와, 그 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝과,
상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 집계 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
상기 비교에 의해 모두가 일치한 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시킨다.
바람직한 실시형태에 있어서는 상기 노드가 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
상기 컴퓨터에,
상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와, 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 바와 같은 상기 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치에 생성하는 스텝을 더 실행시킨다.
또 다른 바람직한 실시형태에 있어서는 상기 집계 배열에 의거하여 그 집계 배열에 의해 특정되는 트리의 부분 트리를 집계하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램은,
상기 컴퓨터에,
상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝과,
상기 부분 배열에 있어서 상기 노드 식별자로부터 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝과,
상기 생성된 표준 형식의 부분 배열을 참조하여 상기 표준 형식의 부분 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 종별과 관련지어 상기 기억 장치 중에 기억하는 스텝을 실행시킨다.
본 발명에 의하면, 트리형 데이터 구조의 데이터간의 관계를 효율적으로 트레이스할 수 있는 트리형 데이터 구조에 있어서, 효율적이고 또한 고속으로 트리를 검색, 집계, 소트하는 방법을 제공하는 것을 목적으로 한다. 또한, 본 발명에 의하면, 상기 트리형 데이터 구조에 있어서, 트리를 검색, 집계, 소트하는 정보 처리 장치 및 검색, 집계, 소트 프로그램을 제공하는 것이 가능해진다.
도 1은 본 발명의 실시형태에 의한 트리형 데이터 구조를 취급하는 컴퓨터 시스템의 블록 다이어그램이다.
도 2A, B는 트리 형식 데이터의 일례인 POS 데이터의 설명도이고, 도 2A는 이 트리 형식 데이터의 데이터 구조(즉, 토폴로지) 및 데이터값을 시각적으로 표현한 예이며, 도 2B는 동일한 트리 형식 데이터를 XML 형식으로 표현한 예이다.
도 3A~C는 아크 리스트를 사용한 트리형 데이터 구조의 표현 형식의 예의 설명도이다.
도 4A~C는 본 발명의 일 실시예에 의한 「자식→부모」관계에 의거하는 트리형 데이터 구조의 표현 방법의 설명도이다.
도 5는 본 발명의 일 실시예에 의한 트리형 데이터 구조를 기억 장치상에 구축하는 방법의 플로우 차트이다.
도 6A~C는 본 발명의 일 실시예에 의해 ID 형식의 트리 구조형 데이터를 정수 일련번호 형식의 트리 구조형 데이터로 변환하는 처리의 설명도이다.
도 7A~C는 본 발명의 다른 일 실시예에 의해 ID 형식의 트리 구조형 데이터를 정수 일련번호 형식의 트리 구조형 데이터로 변환하는 처리의 설명도이다.
도 8은 본 발명의 일 실시예에 의한 깊이 우선에 의거하는 노드 정의 처리의 플로우 차트이다.
도 9는 본 발명의 일 실시예에 의해 작성된 「자식→부모」표현에 의거하는 부모 자식 관계의 배열의 설명도이다.
도 10은 도 6C에 나타낸 깊이 우선의 트리형 데이터 구조로 작성된 「부모→자식」표현에 의거하는 부모 자식 관계의 배열의 설명도이다.
도 11은 본 발명의 일 실시예에 의한 폭 우선에 의거하는 노드 정의 처리의 플로우 차트이다.
도 12는 본 발명의 일 실시예에 의해 작성된 「자식→부모」표현에 의거하는 부모 자식 관계의 배열의 설명도이다.
도 13은 도 7C에 나타낸 폭 우선의 트리형 데이터 구조로 작성된 「부모→자식」표현에 의거하는 부모 자식 관계의 배열의 설명도이다.
도 14A는 폭 우선 모드에 의거하는 트리형 데이터 구조, 도 14B는 그 트리형 데이터 구조를 「자식→부모」표현에 의거하는 부모 자식 관계의 배열을 나타내는 도면이다.
도 15A는 정점 노드 리스트의 예, 도 15B는 정점 노드 리스트에서 특정되는 부분 트리군의 예를 나타내는 도면이다.
도 16A는 검색 처리에 의해 얻어진 정점 노드 리스트의 예, 도 16B는 정점 노드 리스트에서 특정되는 부분 트리군의 예를 나타내는 도면이다.
도 17A는 집계 처리에 의해 얻어진 정점 노드 리스트 및 집계 결과를 표시하 는 배열의 예, 도 17B는, 정점 노드 리스트에서 특정되는 부분 트리군의 예를 나타내는 도면이다.
도 18A는, 노드수로 소트된 정점 노드 리스트 및 대응하는 노드수를 나타내는 배열의 예, 도 18B는, 정점 노드 리스트에서 특정되는 부분 트리의 예를 나타내는 도면이다.
도 19A, C는 각각 논리곱 연산의 대상이 되는 정점 노드 리스트의 예, 도 19B, D는 각각 정점 노드 리스트에서 특정되는 부분 트리군의 예를 나타내는 도면이다.
도 20A는 논리곱 연산의 결과를 나타내는 정점 노드 리스트의 예, 도 20B는 정점 노드 리스트에서 특정되는 부분 트리군을 표시하는 도면이다.
도 21은 어느 노드를 표현하는 C-P배열 및 부분 트리군을 특정하는 정점 노드 리스트의 예를 나타내는 도면이다.
도 22는 도 21의 정점 노드 리스트 중의 정점 노드에 의해 각각 특정되는 부분 트리를 나타내는 도면이다.
도 23A, B는 본 실시형태에 의한 부분 트리의 표준화의 개략을 나타내는 도면이다.
도 24는 본 실시형태에 의한 부분 트리의 표준화의 예를 나타내는 플로우 차트이다.
도 25는 부분 트리를 표시하는 표준화된 부분 배열의 예를 나타내는 도면이다.
도 26은 본 실시형태에 의한 오름차순 형식의 배열의 예를 설명하기 위한 도면이다.
도 27은 오름차순 형식의 집계 배열과 C-P배열의 사이의 상호 변환의 개략을 설명하는 도면이다.
도 28은 본 실시형태에 의한 집계 배열로부터 C-P배열로의 변환 처리의 예를 나타내는 플로우 차트이다.
도 29A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 30A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 31A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 32A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 33A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 34A, B는 집계 처리로부터 C-P배열로의 변환 처리의 구체 예를 나타내는 도면이다.
도 35A, B는 본 실시형태에 의한 토폴로지 검색의 개략을 설명하는 도면이다.
도 36은 본 실시형태에 의한 토폴로지 검색 처리의 예를 나타내는 플로우 차트이다.
도 37A, B는 토폴로지 검색 처리의 구체 예를 나타내는 도면이다.
도 38A, B는 토폴로지 검색 처리의 구체 예를 나타내는 도면이다.
도 39는 토폴로지 검색 처리의 구체 예를 나타내는 도면이다.
도 40A, B는 본 실시형태에 의한 제 1 토폴로지 집계의 개략을 설명하는 도면이다.
도 41은 본 실시형태에 의한 제 1 토폴로지 집계 처리의 예를 나타내는 플로우 차트이다.
도 42는 도 41의 스텝4102를 보다 상세하게 나타내는 플로우 차트이다.
도 43A~C는 제 1 토폴로지 집계 처리의 구체 예를 나타내는 도면이다.
도 44A, B는 본 실시형태에 의한 토폴로지 소트의 개략을 설명하는 도면이다.
도 45는 본 실시형태에 의한 토폴로지 소트 처리의 예를 나타내는 플로우 차트이다.
도 46A~E는, 본 실시형태에 의한 토폴로지 소트 처리의 구체 예를 나타내는 도면이다.
도 47은 본 발명의 실시형태에 의한 트리형 데이터 구조를 구축하여 정점 노드 리스트를 생성하고, 트리형 데이터 구조를 구축하는 여러 가지의 배열을 생성하여, 이것을 메모리에 기억하고, 또한, 토폴로지 검색, 토폴로지 집계 및 토폴로지 소트의 처리를 실행하는 정보 처리 장치의 예를 나타내는 기능 블록 다이어그램이다.
도 48A, B는 트리의 예 및 그 트리를 표시하는 오름차순 형식의 집계 배열을 나타내는 도면이다.
도 49는 오름차순 형식의 집계 배열에 의거하여 어느 정점 노드의 부분 트리를 특정하는 처리를 나타내는 플로우 차트이다.
도 50A~C는 정점 노드의 부분 트리를 특정하는 처리의 구체 예를 나타내는 도면이다.
도 51은 오름차순 형식의 집계 배열의 표준 형식을 나타내는 도면이다.
도 52는 오름차순 형식의 집계 배열의 표준 형식을 나타내는 도면이다.
도 53은 본 실시형태에 의한 오름차순 형식을 이용한 토폴로지 검색의 처리를 나타내는 플로우 차트이다.
도 54A, B는 본 실시형태에 의한 표준 형식을 이용한 토폴로지 검색의 구체 예를 나타내는 도면이다.
도 55A, B는 본 실시형태에 의한 표준 형식을 이용한 토폴로지 검색의 구체 예를 나타내는 도면이다.
도 56은 도 40A에 나타내는 트리를 표시하는 오름차순 형식의 집계 배열 및 정점 노드 리스트의 예를 나타내는 도면이다.
도 57은 오름차순 형식의 집계 배열을 이용한 토폴로지 집계의 처리를 나타내는 플로우 차트이다.
도 58A, B는 오름차순 형식의 집계 배열을 이용한 토폴로지 집계의 처리 결과를 표시하는 도면이다.
부호의 설명
10: 컴퓨터 시스템
12: CPU
14: RAM
16: ROM
18: 고정 기억 장치
20: CD-ROM 드라이버
22: I/F
24: 입력 장치
26: 표시 장치
4700: 정보 처리 장치
4701: 기억부
4702: 노드 정의부
4703: 부모 자식 관계 정의부
4704: 표준화 처리부
4705: 오름차순 형식 처리부
4706: 토폴로지 검색 처리부
4707: 토폴로지 집계 처리부
4708: 토폴로지 소트 처리부
이하, 첨부 도면을 참조하여 본 발명의 실시형태에 대해서 설명한다.
[컴퓨터 시스템 구성]
도 1은 본 발명의 실시형태에 의한 트리형 데이터 구조를 취급하는 컴퓨터 시스템의 하드웨어 구성을 나타내는 블록 다이어그램이다. 도 1에 나타내는 바와 같이, 이 컴퓨터 시스템(10)은 통상의 것과 동일한 구성이며, 프로그램을 실행함으로써 시스템 전체 및 개개의 구성 부분을 제어하는 CPU(12), 워크 데이터 등을 기억하는 RAM(Random Access Memory)(14), 프로그램 등을 기억하는 ROM(Read Only Memory)(16), 하드 디스크 등의 고정 기억매체(18), CD-ROM(19)를 액세스하기 위한 CD-ROM 드라이버(20), CD-ROM 드라이버(20)나 외부 네트워크(도시하지 않음)와 접속된 외부 단자의 사이에 설치된 인터페이스(I/F)(22), 키보드나 마우스로 이루어지는 입력 장치(24), CRT 표시 장치(26)를 구비하고 있다. CPU(12), RAM(14), ROM(16), 외부기억매체(18), I/F(22), 입력 장치(24) 및 표시 장치(26)는 버스(28)를 통하여 서로 접속되어 있다.
본 실시형태에 의한 트리형 데이터 구조를 기억 장치상에 구축하는 프로그램 및 트리형 데이터 구조를 기억 장치상에서 변환하는 프로그램은 CD-ROM(19)에 수용되어 CD-ROM 드라이버(20)에 판독되어도 되고, ROM(16)에 미리 기억되어 있어도 된다. 또한, 일단 CD-ROM(19)으로부터 읽어낸 것을 외부기억매체(18)의 소정의 영역에 기억해 두어도 된다. 혹은, 상기 프로그램은 네트워크(도시하지 않음), 외부 단 자 및 I/F(22)를 거쳐 외부로부터 공급되는 것이어도 된다.
또한, 본 발명의 실시형태에 의한 정보 처리 장치는 컴퓨터 시스템(10)에 트리형 데이터 구조를 기억 장치상에 구축하는 프로그램 및 트리형 데이터 구조를 기억 장치상에서 변환하는 프로그램을 실행시킴으로써 실현된다.
[트리형 데이터 구조]
도 2A는 트리 형식 데이터의 일례인 POS 데이터의 설명도이고, 도 2A는 이 트리 형식 데이터의 데이터 구조(즉, 토폴로지) 및 데이터값을 시각적으로 표현한 일례이며, 도 2B는 동일한 트리 형식 데이터를 XML 형식으로 표현한 일례이다. 도 2에 나타나는 바와 같이, 트리형 데이터 구조는 루트 노드(본 예에서는 POS 데이터)에서 시작하여, 각 노드에서 분기되어 리프 노드(끝점)에 이르는 노드와 아크의 조합에 의해 표현된다. 각 노드에는 항목명 정보, 즉 노드의 타입과, 항목값 정보, 즉 노드의 값이 관련지어지고, 도 2A, B의 예에서는 XML 형식의
<shopName>프랑스점포</shopName>에 대응한 노드는 "shopName(=점포명)"이라는 노드 타입과 "프랑스점포"라는 노드값이 관련지어져 있다. 이 관련짓기는 예를 들면, 노드 타입 및 노드값을 기술하는 정보가 격납된 노드 정보 격납 영역으로의 포인터를 노드 식별자에 수반시킴으로써 실현할 수 있다. 그러나, 본 발명은 트리형 데이터 구조의 실체적인 값의 취급법에 의해 한정되지 않는 것에 주의할 필요가 있다.
이에 대해, 트리형 데이터 구조의 데이터의 검색, 집계, 소트를 효율적으로 실행하기 위해서는 트리형 데이터 구조의 토폴로지를 표현하는 수법, 즉 기억 장치 에 전개하는 수법이 매우 중요한 역할을 한다. 그래서, 이하에서는 주로 트리형 데이터 구조의 토폴로지에 관해서 설명한다.
종래, 이와 같은 트리형 데이터 구조는 데이터를 축적한 노드간을 포인터로 접속함으로써 표현되어 있다. 그러나, 포인터 표현은 포인터값에 필연성이 없다는 결점이 있다. 즉 어느 경우에는 특정 노드A가 어느 번지(예를 들면, 100번지)에 격납되고, 다른 경우에는 같은 노드A가 다른 번지(예를 들면, 200번지)에 격납되므로, 포인터값이 일정하지 않고, 포인터값은 본질적으로 노드의 격납 어드레스를 표현하는 것에 지나지 않는다. 그 때문에, 예를 들면, 노드가 깊이 우선의 규칙에 따라 포인터로 접속되어 있는 경우, 이들의 노드를 폭 우선의 규칙에 따라 포인터로 재접속하는 것은 곤란하다.
이에 대해, 본 발명자는 트리형 데이터 구조의 토폴로지가 아크 리스트에 의해 기술 가능한 것에 주목했다. 아크 리스트란 노드간의 부모 자식 관계를 표시하는 아크의 리스트이다. 도 3A~C는 아크 리스트를 사용한 트리형 데이터 구조의 표현 형식의 일례의 설명도이다. 도 3A의 예에서는 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 및 110의 노드 식별자(ID)가 부여된 12개의 노드로 이루어지는 트리형 데이터 구조가 나타나 있다. 도 3A는 트리형 데이터 구조의 전체를 나타내고 있다. 도 3A에 있어서, 원형, 하트형 등의 도형 중앙에 기재된 숫자는 노드 ID를 표시하고, 화살표와 화살표의 곁에 기재된 <0, 10> 등의 숫자의 쌍은 아크를 표시하고 있다. 또한, 노드 ID는 문자열에는 한정되지 않고, 수치, 특히, 정수여도 된다. 도 3B는 부모 노드(From-ID)로부터 자식 노드(To-ID)로의 아크 리스트를 나타내고, 도 3C는 노드 ID와 노드 Type의 쌍의 리스트로 이루어지는 노드 리스트를 나타낸다. 또한, 트리형 데이터 구조를 표현하기만 하는 목적을 위해서는 노드 리스트가 없어도 상관없다. 원리적으로는 이와 같은 아크 리스트를 사용함으로써 노드간의 관계를 포인터에 의하지 않고 직접적으로 기술하는 것이 가능하다.
[「자식→부모」관계에 의거하는 표현]
도 3A~C의 예에서는 아크 리스트는 부모 노드에 자식 노드를 대응짓는 「부모→자식」관계에 의거하여 기술되어 있다. 그 때문에, 1개의 부모 노드, 예를 들면, 루트 노드 0에는 3개의 자식 노드 10, 60 및 80이 존재하기 때문에 아크 리스트의 From-ID에는 동일한 노드 ID인 0이 3회 출현하고 있다. 즉 부모 노드를 특정해도 자식 노드를 특정할 수 없기 때문에, 아크 리스트는 요소 From-ID의 배열과 요소 To-ID의 배열에 의해 구성된다. 아크 리스트를 사용하는 경우 어느 노드는 From-ID의 배열과 To-ID의 배열의 양쪽 배열에 출현한다.
이에 대해, 부모 자식 관계는 「자식→부모」관계에 의해서도 표현하는 것이 가능하다. 이 경우, 노드간의 부모 자식 관계는 루트 노드 이외의 노드인 비루트 노드의 각각과, 관련지어진 부모 노드의 세트의 배열에 의해 표현된다. 이 「자식→부모」관계에 의해 부모 자식 관계를 표현하는 경우, 「부모→자식」관계인 경우에는 얻어지지 않았던 중요한 성질이 있다. 즉 1개의 자식 노드에는 반드시 유일한 부모 노드가 대응하므로 자식 노드를 특정함으로써 이 자식 노드에 대응하는 유일한 부모 노드를 즉시 특정할 수 있다. 즉 아크 리스트는 실제로는 요소 To-ID의 배열만 준비하면 된다. 이 결과로서, 아크 리스트를 격납하기 위한 기억용량이 삭 감된다. 이 기억용량의 삭감은 메모리로의 액세스 횟수가 저감된다는 효과가 있으므로 결과적으로 처리의 고속화를 실현할 수 있다.
도 4A~C는 본 발명의 일 실시예에 의한 「자식→부모」관계에 의거하는 트리형 데이터 구조의 표현 방법의 설명도이다. 도 4A는 트리 전체의 설명도이며, 도 4B는 「자식→부모」관계에 의거하는 아크 리스트이다. 도 4B의 아크 리스트는 루트 노드에 대한 부모 노드의 격납 영역을 포함하고 있으므로 루트 노드의 부모 노드로서, 편의적으로 "-"가 설정되어 있다. 단, 루트 노드에 대응하는 부모 노드는 존재하지 않으므로, 도 4C에 나타나는 바와 같이, 「자식→부모」관계에 의거하는 아크 리스트에서 루트 노드에 대한 부모 노드의 격납 영역을 제외해도 상관없다. 이와 같이 본 발명의 일 실시예에서는 루트 노드 이외의 노드인 비루트 노드의 각각에 대해서, 비루트 노드의 부모 노드를 관련지음으로써 노드간의 부모 자식 관계를 표현한다. 그리고, 「자식→부모」표현된 자식의 노드로부터 부모의 노드의 리스트를 찾아감으로써 트리의 토폴로지를 표현할 수 있다.
이와 같은 「자식→부모」관계에 의거하는 트리형 데이터 구조는, 본 발명의 일 실시예에 의하면, 도 5에 나타나는 바와 같이, 도 1에 나타난 컴퓨터 시스템(10)에 루트 노드를 포함하는 노드에 고유의 노드 식별자를 부여하는 노드 정의 스텝501과, 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 비루트 노드의 각각의 부모 노드에 부여된 노드 식별자를 관련짓는 부모 자식 관계 정의 스텝502를 실행시킴으로써 RAM(14)상에 구축된다. 이와 같이, 처음에 문자열, 부동(浮動) 소수, 정수 등의 임의의 식별 정보에 의해 노드에 노드 식별자를 부여 하고, 다음에, 「자식→부모」표현에 의거하여 부모 자식 관계를 정의함으로써 자식 노드의 노드 식별자로부터 부모 노드의 노드 식별자를 찾아냄으로써(룩업(lookup)함으로써) 트리의 토폴로지를 표현할 수 있다.
[노드 식별자]
바람직한 일 실시예에 의하면, 노드 정의 스텝은 노드 식별자로서 수치를 사용하고, 보다 바람직하게는 연속되는 정수를 사용하며, 더욱 바람직하게는 0 또는 1부터의 정수 일련번호를 사용한다. 이에 따라, 노드 식별자로부터 그 노드에 대응하는 부모 노드의 노드 식별자가 격납되어 있는 어드레스를 간단히 취득할 수 있으므로 자식 노드의 노드 식별자로부터 부모 노드의 노드 식별자를 찾아내는 처리를 고속화할 수 있다.
트리형 데이터 구조의 노드에 노드 식별자로서 순서대로 번호를 부여하여 노드간의 부모 자식 관계를 표현하는 경우 번호의 부여 순서에 규칙을 정함으로써 그 후의 트리형 데이터 구조의 취급이 용이해진다는 이점이 있다. 본 발명에 의하면, 이 번호 부여 순서의 규칙으로서, 동세대의 노드보다도 자식 노드를 우선하는 깊이 우선 모드와 자식 노드보다도 동세대의 노드를 우선하는 폭 우선 모드가 이용된다.
도 6A~C는 본 발명의 일 실시예에 의해 ID 형식의 트리 구조형 데이터를 정수 일련번호 형식의 트리 구조형 데이터로 변환하는 처리의 설명도이다. 도 6A에는 각 노드에 ID번호가 부여된 트리 구조형 데이터가 나타나고, 도 6B에는 변환 규칙이 나타나고, 도 6C에는 각 노드에 정수 일련번호가 부여된 트리 구조형 데이터가 나타나 있다. 본 예의 변환 규칙은 깊이 우선으로 연속번호를 부여하는 규칙이며, 구체적으로는 복수의 자식 노드가 존재하는 경우, 맏형(가장 위의 형) 노드에 가장 작은 번호를 부여하고, 막내(가장 아래의 동생) 노드에 큰 번호를 부여하며, 또한, 형제 노드보다도 자식 노드를 우선하여 번호를 부여한다. 본 예에서는 오름차순으로 번호를 붙이고 있지만, 내림차순으로 번호를 붙여도 된다.
또한, 도 7A~C는 본 발명의 다른 일 실시예에 의해 ID 형식의 트리 구조형 데이터를 정수 일련번호 형식의 트리 구조형 데이터로 변환하는 처리의 설명도이다. 도 7A에는 각 노드에 ID번호가 부여된 트리 구조형 데이터가 나타나고, 도 7B에는 변환 규칙이 나타나고, 도 7C에는 각 노드에 정수 일련번호가 부여된 트리 구조형 데이터가 나타나 있다. 본 예의 변환 규칙은 폭 우선으로 연속번호를 부여하는 규칙이며, 구체적으로는 복수의 자식 노드가 존재하는 경우, 맏형(가장 위의 형) 노드에 가장 작은 번호를 부여하고, 막내(가장 아래의 동생) 노드에 큰 번호를 부여하며 또한, 자식 노드보다도 형제 노드를 우선하여 번호를 부여한다. 본 예에서는 오름차순으로 번호를 붙이고 있지만, 내림차순으로 번호를 붙여도 된다.
이와 같이 노드 식별자로서 번호를 사용하면 노드 번호로부터 즉시, 즉 O(1)의 오더로 그 노드에 관한 격납값이 격납되어 있는 어드레스를 찾아낼 수 있다. 또한, 부모 자식 관계를 「자식→부모」표현함으로써 자식 노드로부터 부모 노드를 즉시, 즉 O(1)의 오더로 찾아낼 수 있다.
[깊이 우선 모드]
본 발명의 일 실시예에 의하면, 도 6C에 나타나는 바와 같은 깊이 우선에 의거하는 트리형 데이터 구조는 도 1에 나타난 컴퓨터 시스템(10)에,
동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수를 부여하는 노드 정의 스텝과,
루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 정수의 순서로 비루트 노드의 각각의 부모 노드에 부여된 정수를 나열함으로써 형성되는 배열을 기억 장치에 격납하는 부모 자식 관계 정의 스텝을 실행시킴으로써 기억 장치상에 구축된다. 이에 따라, 노드는 깊이 우선으로 연속 정수가 부여되고, 노드간의 부모 자식 관계는 「자식→부모」관계의 배열에 의해 표현된다.
도 8은 본 발명의 일 실시예에 의한 깊이 우선에 의거하는 노드 정의 처리의 플로우 차트이다. 이 노드 정의 처리는 컴퓨터 시스템(10)에
처음에 루트 노드에 번호를 부여하는 스텝801과,
이미 번호가 부여된 어느 노드에 유일한 자식 노드가 존재하는 경우에는 그 자식 노드에 대해서 그 어느 노드에 부여된 번호의 다음 번호를 부여하는 스텝802와,
이미 번호가 부여된 어느 노드에 복수의 자식 노드가 존재하는 경우에는 그 복수의 자식 노드 사이의 형제관계에 따라 동생 노드는 바로 위의 형 노드의 모든 자손 노드에 번호가 부여된 후에 다음 번호가 부여되도록 가장 위의 형 노드에서 가장 아래의 동생 노드까지 번호를 부여하는 스텝803,을 실행시킨다. 이에 따라, 깊이 우선 모드로 동일한 부모 노드로부터 파생된 복수의 자식 노드 사이에 형제관계가 정의된다.
도 9는 본 발명의 일 실시예에 의해 도 6C에 나타난 깊이 우선의 트리형 데 이터 구조로 작성된 「자식→부모」표현에 의거하는 부모 자식 관계의 배열의 설명도이다. 동 도에 서브 트리1 또는 서브 트리2로서 나타나 있는 바와 같이, 깊이 우선으로 연속번호가 부여된 노드의 부모 자식 관계를 「자식→부모」관계에 의거하여 배열 표현하면 어느 노드의 자손 노드가 연속 영역에 출현한다는 뛰어난 성질이 얻어진다.
본 발명의 일 실시예에서는 깊이 우선 모드의 뛰어난 성질을 이용함으로써 배열로부터 어느 노드에 부여된 정수 이상의 값이 격납되어 있는 연속 영역을 추출함으로써 어느 노드의 모든 자손 노드를 특정한다. 이에 따라, 어느 노드의 자손 노드를 표시하는 노드군을 배열내의 연속 블록으로서 획득할 수 있다. 예를 들면, 연속 블록의 사이즈를 「m」으로 하면 어느 노드의 모든 자손 노드를 특정하기 위한 처리 속도는 O(m)의 오더가 된다.
이미 설명한 바와 같이, 노드간의 부모 자식 관계는 「자식→부모」관계의 배열 외에 「부모→자식」관계의 배열에 의해서도 표현할 수 있다. 도 10은 도 6C에 나타난 깊이 우선의 트리형 데이터 구조로부터 작성된 「부모→자식」표현에 의거하는 부모 자식 관계의 배열의 설명도이다. 하나의 부모 노드에 대해서 복수의 자식 노드가 존재할 수 있으므로 부모 자식 관계의 배열은 각 노드에 대한 자식 노드의 번호가 격납되어 있는 영역을 나타내기 위한 배열Aggr와 자식 노드의 번호가 격납되어 있는 배열P→C의 2개의 배열에 의해 구성된다. 예를 들면, 배열Aggr의 선두로부터 2번째 요소Aggr[1]의 값은 "3"이고, 이것은 노드[1]에 대한 자식 노드의 번호는 배열P→C의 요소P→C[3] 이후에 격납되어 있는 것을 표시하고 있다. 이에 따라, 노드[0], 즉 루트 노드에 대한 자식 노드는 배열P→C의 선두로부터 3개의 요소, P→C[0]의 1, P→C[1]의 6, 및 P→C[2]의 8인 것을 알 수 있다.
이 「부모→자식」표현에 의거하는 부모 자식 관계의 배열을 구하는 방법을 설명한다.
(1) 노드의 번호가 배열P→C의 최대 첨자(=11)와 일치하는 경우 이 노드에 속하는 자식 노드는 존재하지 않는다. 따라서, 처리는 계속되지 않는다.
(2) 동 도에 굵은 글씨로 표시된 부모 노드의 번호로부터 Aggr값을 구한다. 이 Aggr값은 배열P→C의 개시점을 표시한다.
(3) 굵은 글씨로 표시된 부모 노드 번호+1에 대응하는 Aggr값을 구한다. 이 Aggr값-1이 배열P→C의 종료점이다.
예를 들면, 노드0의 자식 노드의 개시점은 Aggr[0], 즉 0이며, 종료점은 Aggr[1]-1, 즉 3-1=2이다. 따라서, 노드0의 자식 노드는 배열P→C의 0~2번째 요소, 즉 1, 6 및 8이다.
혹은, 「부모→자식」표현에 의거하는 부모 자식 관계는 보다 단순하게, 부모 노드 번호의 배열과 대응하는 자식 노드 번호의 배열의 2개의 배열에 의해 표현하는 것도 가능하다. 그러나, 이 배열을 이용하여 부모 자식 관계를 발견하기 위해서는 부모 노드의 번호를 검색해야 하기 때문에, 즉 log(n)의 액세스 시간을 필요로 하기 때문에 효율이 나쁘다.
[폭 우선 모드]
본 발명의 일 실시예에 의하면, 도 7C에 나타나는 바와 같은 폭 우선에 의거 하는 트리형 데이터 구조는 도 1에 나타난 컴퓨터 시스템(10)에,
자식 노드보다도 동세대의 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수를 부여하는 노드 정의 스텝과,
루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 정수의 순서로 비루트 노드의 각각의 부모 노드에 부여된 정수를 나열함으로써 형성되는 배열을 기억 장치에 격납하는 부모 자식 관계 정의 스텝을 실행시킴으로써 기억 장치상에 구축된다. 이에 따라, 노드는 폭 우선 모드로 연속 정수가 부여되고, 노드간의 부모 자식 관계는 「자식→부모」관계의 배열에 의해 표현된다.
도 11은 본 발명의 일 실시예에 의한 폭 우선에 의거하는 노드 정의 처리의 플로우 차트이다. 이 노드 정의 처리는 컴퓨터 시스템(10)에,
각 노드가 루트 노드로부터 몇 세대째의 노드인지 및 각 세대에 포함되는 노드수를 산출하는 스텝1101과,
처음에 루트 노드에 번호를 부여하는 스텝1102와, 어느 세대에 포함되는 모든 노드에 번호가 부여되었다면 그 어느 세대의 다음 세대에 노드가 존재하지 않을 때까지, 그 다음 세대에 포함되는 모든 노드에 대해서 부모 노드가 다른 경우에는 그 부모 노드에 번호가 부여된 순번으로 그 노드에 번호를 부여하고, 그 부모 노드가 동일한 경우에는, 그 부모 노드로부터 파생된 복수의 자식 노드 사이에 형제관계를 정의하여 가장 위의 형 노드에서 가장 아래의 동생 노드까지 직전에 부여된 번호의 다음 번호부터 연속적으로 변화하는 고유의 정수를 순서대로 부여하는 스텝1013을 실행시킨다. 이에 따라, 폭 우선 모드로 동일한 부모 노드로부터 파생된 복 수의 자식 노드 사이에 형제관계가 정의된다.
도 12는 본 발명의 일 실시예에 의해 도 7C에 나타난 폭 우선의 트리형 데이터 구조로부터 작성된 「자식→부모」표현에 의거하는 부모 자식 관계의 배열의 설명도이다. 동 도에 나타나 있는 바와 같이, 폭 우선으로 연속번호가 부여된 노드의 부모 자식 관계를 「자식→부모」관계에 의거하여 배열 표현하면 어느 노드의 자식 노드는 연속 영역에 출현한다는 뛰어난 성질이 얻어진다. 이것은 폭 우선 모드로 연속번호가 부여된 노드의 부모 자식 관계를 「자식→부모」관계에 의거하여 배열 표현하면 부모 노드에 부여된 번호가 배열 중에 순서대로(오름차순 또는 내림차순) 출현하는 것에 의한다.
따라서, 본 발명의 일 실시예에서는 폭 우선 모드의 뛰어난 성질을 이용함으로써 배열로부터 어느 노드에 부여된 정수와 동일한 값이 격납되어 있는 연속 영역을 추출함으로써 어느 노드의 모든 자식 노드를 특정한다. 이에 따라, 어느 노드의 자식 노드를, 예를 들면 이분 탐색 등의 수법을 이용하여 검색하는 것이 가능하며, 즉 O(log(n))의 오더로 검색하는 것이 가능해진다.
이미 설명한 바와 같이, 노드간의 부모 자식 관계는 「자식→부모」관계의 배열 외에, 「부모→자식」관계의 배열에 의해서도 표현할 수 있다. 도 13은 도 7C에 나타난 폭 우선의 트리형 데이터 구조로부터 작성된 「부모→자식」표현에 의거하는 부모 자식 관계의 배열의 설명도이다. 도 13에 나타내는 바와 같이, 하나의 부모 노드에 대해서 복수의 자식 노드가 존재할 수 있으므로, 부모 자식 관계의 배열은 각 노드에 대한 자식 노드의 번호가 격납되어 있는 영역을 나타내기 위한 배 열Aggr와 자식 노드의 번호가 격납되어 있는 배열P→C의 2개의 배열에 의해 구성된다. 예를 들면, 배열Aggr의 선두로부터 2번째 요소Aggr[1]의 값은 "3"이고, 이것은 노드[1]에 대한 자식 노드의 번호는 배열P→C의 요소P→C[3] 이후에 격납되어 있는 것을 표시하고 있다. 이에 따라, 노드[0], 즉 루트 노드에 대한 자식 노드는 배열P→C의 선두로부터 3개의 요소, P→C[0]의 1, P→C[1]의 2 및 P→C[2]의 3인 것을 알 수 있다.
이 「부모→자식」표현에 의거하는 부모 자식 관계의 배열을 구하는 방법을 설명한다.
(1) 노드의 번호가 배열P→C의 최대 첨자(=11)와 일치하는 경우, 이 노드에 속하는 자식 노드는 존재하지 않는다. 따라서, 처리는 계속되지 않는다.
(2) 동 도에 굵은 글씨로 표시된 부모 노드의 번호로부터 Aggr값을 구한다. 이 Aggr값은 배열P→C의 개시점을 표시한다.
(3) 굵은 글씨로 표시된 부모 노드 번호+1에 대응하는 Aggr값을 구한다. 이 Aggr값 -1이 배열P→C의 종료점이다.
예를 들면, 노드0의 자식 노드의 개시점은 Aggr[0], 즉 0이며, 종료점은 Aggr[1]-1, 즉 3-1=2이다. 따라서, 노드0의 자식 노드는 배열P→C의 0~2번째 요소, 즉 1, 2 및 3이다.
[정점 노드 및 부분 트리군]
트리형 데이터 구조의 데이터를 검색, 집계, 소트할 때에 트리 데이터의 전체 중에서 특정한 부분을 처리의 대상, 예를 들면, 검색의 대상 범위로 하는 경우 가 있다. 본 발명자는 복수의 노드를 포함하는 특정한 부분을 대표하는 1개의 노드를 도입함으로써 여러 가지의 처리를 효율화하는 수법을 제안했다. 다음에, 이 수법에 대해서 상세히 기술한다.
트리형 데이터 구조를 갖는 트리 데이터에 있어서, 루트 노드에 가장 가까운 노드의 값으로 그 노드 및 그 노드에서 분기되어 리프 노드(끝점)에 이를 때까지의 모든 노드를 표현하는 것을 생각한다. 여기서, 어느 노드 및 그 노드에서 분기되어 리프 노드에 이를 때까지의 노드군을 부분 트리라고 칭한다. 또한, 상기 노드 (루트 노드)에 가장 가까운 노드를 정점 노드라고 칭한다.
도 14A는 전술한 폭 우선 모드에 의거하는 트리형 데이터 구조, 도 14B는 그 트리형 데이터 구조를 「자식→부모」표현에 의거하는 부모 자식 관계의 배열을 나타내는 도면이다. 예를 들어, 정점 노드[4]는 노드 식별자{4, 8, 9}를 포함하고, 정점 노드[6]은 노드 식별자{6}을 포함하며, 또한, 정점 노드[3]은 노드 식별자{3, 7, 10, 11}을 포함한다. 이와 같은, 복수의 정점 노드로 이루어지는 배열을 정점 노드 리스트라고 칭한다. 정점 노드 리스트에 의해 복수의 부분 트리를 지정할 수 있으며, 지정된 복수의 부분 트리를 부분 트리군이라고 칭한다.
이하, 정점 노드 리스트를 [a, b, ㆍㆍㆍ]으로 표시한다. 여기에, 「a」, 「b」, ㆍㆍㆍ은 정점 노드에 대응하는 노드 식별자이다. 정점 노드 리스트를 구성하는 정점 노드의 각각을 전개하여 그 정점 노드를 정점으로 하는 부분 트리에 포함되는 모든 노드의 노드 식별자를 구하는 것을 생각한다. 구해진 노드 식별자의 리스트에 있어서, 어느 노드 식별자는 하나밖에 존재하지 않는 경우, 즉 노드 식별자 가 중복해서 출현하지 않는 경우, 이와 같은 부분 트리군을 「정규 부분 트리군」이라고 칭한다. 그렇지 않은 것 같은 부분 트리군을 「비정규 부분 트리군」이라고 칭한다.
정규 부분 트리군이어도, 비정규 부분 트리군이어도, 정점 노드 리스트에 의해, 정점 노드 및 그 자손 노드로 이루어지는 부분 트리군을 특정할 수 있다. 예를 들어, 도 15A에 나타내는 바와 같이, 정점 노드 리스트 [4, 6, 3]에 의해 도 15B에 나타내는 바와 같은 부분 트리군(부분 트리{4, 8, 9}, {6}, {3, 7, 10, 11})이 특정된다.
정점 노드 리스트에 의해 특정되는 부분 트리군은 검색, 집계, 소트, 집합 연산의 대상으로 할 수 있다.
예를 들어, 도 15A, B의 예에서 「하트형」의 노드를 포함하는 부분 트리를 검색하면 도 16B에 나타내는 바와 같은 부분 트리군이 얻어진다. 도 16A는 이 부분 트리군을 표시하는 정점 노드 리스트이다.
또한, 각 부분 트리에 속하는 노드수를 집계하면, 도 17B에 나타내는 바와 같이 된다. 도 17A에 있어서, 배열1701은 정점 노드 리스트, 배열1702는 각 정점 노드에 의해 특정되는 부분 트리에 속하는 노드수를 나타내는 배열이다.
예를 들어, 소트로서 각 부분 트리에 속하는 노드수에 의한 소트를 생각할 수 있다. 도 18A 중, 배열1801은 소트된 정점 노드 리스트, 배열1802는 정점 노드 리스트에 의해 특정되는 부분 트리에 속하는 노드수를 나타내는 배열이다. 또한, 도 18B는 부분 트리가 노드수에 따라 소트된 상태를 나타낸다.
또한, 복수의 부분 트리군 사이의 집합 연산으로서 논리곱에 대해서 설명한다. 도 14A, B에 나타내는 트리에 있어서, 도 19B에 나타내는 부분 트리군(대응하는 정점 노드 리스트를 도 19A에 나타냄)과, 도 19D에 나타내는 부분 트리군(대응하는 정점 노드 리스트를 도 19C에 나타냄)의 논리곱을 생각한다.
도 19B에 있어서의 노드 식별자 「4」의 정점 노드에서 특정되는 부분 트리1901과 도 19D에 있어서의 노드 식별자 「1」의 정점 노드 식별자에서 특정되는 부분 트리1911을 비교하면, 부분 트리1901은 부분 트리1902에 포함된다. 도 19B에 있어서의 부분 트리1902와 포함관계를 갖는 것 같은 부분 트리는 도 19D에 나타내는 부분 트리군에는 존재하지 않는다. 또한, 도 19B에 있어서의 노드 식별자 「3」의 정점 노드에서 특정되는 부분 트리1903과, 도 19D에 있어서의 노드 식별자 「7」에서 특정되는 부분 트리1913을 비교하면, 부분 트리1913은 부분 트리1903에 포함된다. 그 결과, 논리곱 연산의 결과를 나타내는 정점 노드 리스트는, 도 20A에 나타내는 바와 같이 [4, 7]이 된다. 도 20B는 논리곱 연산의 결과에 대응하는 부분 트리군이다.
도 16A~도 20B에 의해 이해할 수 있는 바와 같이, 정점 노드 리스트(집계에 있어서는 이것에 더하여 정점 노드 리스트와 동일 사이즈의 집계 결과(노드수)를 격납하는 배열)에 의해, 각각의 처리나 연산의 결과를 나타낼 수 있다.
[표준 형식]
어느 노드 및 그 노드에서 분기되어 리프 노드에 이르는 부분 트리군에 있어서의 노드 및 그 사이의 접속관계를 본 명세서에 있어서 「토폴로지」라고 칭한다. 예를 들어, 도 21에 나타내는 트리가 있으며, 이 트리2100의 구조는 깊이 우선 모드인 「자식→부모」표현에 의거하는 부모 자식 관계의 배열(부호2101 참조: 도면에 있어서는, 「C->P」라고 표기하지만, 명세서에 있어서는, 이하, 「C-P배열」이라고 칭한다.)에 의해 표시된다고 생각한다.
정점 노드 리스트2102에 의해 특정되는 부분 트리를 생각한다. 도 22에 있어서, 부분 트리A~C(부호2201~2203)가 각각 도 21의 정점 노드 리스트2102에 의해 특정되는 부분 트리에 상당한다. 이들 부분 트리군에 있어서, 부분 트리A(부호2201 참조) 및 부분 트리B(부호2202 참조)는 그 노드 및 노드간의 접속관계에 있어서 동일, 즉 토폴로지가 동일하다고 할 수 있다. 또한, 정점 노드2102에서 표시되는 부분 트리군에는 2종류의 토폴로지가 포함된다고 할 수 있다.
이와 같이 토폴로지를 비교하여 토폴로지의 동일성을 판단하기 위해서는 상기 부분 트리의 토폴로지를 표준화하여 표현하는 것이 바람직하다. 이하, 부분 트리의 토폴로지의 표준화에 대해서 설명한다. 여기에, 표준화된 토폴로지의 표현을 본 명세서에 있어서 「표준 형식」이라고 칭한다.
도 23A에 나타내는 바와 같이, 부분 트리A(부호2201 참조)와 부분 트리B(부호2202 참조)는 분명히 동일한 토폴로지를 가지고 있다. 그렇지만, C-P배열2103을 참조하면 부분 트리A를 표현하는 부분의 요소는 [1, 2, 2]이고, 그 한편, 부분 트리B를 표현하는 부분의 요소는 [7, 8, 8]로, 이들은 일치하지 않는다. 그래서, 부분 트리를 그 정점 노드를 루트 노드로 하여, 깊이 우선 모드의 「자식→부모」표현에 의거하는 부모 자식 관계의 배열로서 표현하면(도 23B의 부호2301, 2302 참 조) 배열의 요소를 비교함으로써 쌍방의 토폴로지가 동일하다고 판단할 수 있다. 이와 같이 부분 트리를 그 정점 노드를 루트 노드로 하여 깊이 우선 모드의 「자식→부모」표현에 의거하는 부모 자식 관계의 배열로서 표현하는 것을 표준화라고 칭한다.
이하, 표준화할 때에 실행되는 처리에 대해서 설명한다. 표준화는 개략적으로는 각각이 특정 노드 및 그 자손 노드를 포함하는 1 이상의 노드군인 부분 트리를 표시하기 위해서 그 특정 노드를 정점 노드로 하여 상기 노드 식별자를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 제 1 배열 중의 부분을 특정하는 스텝과,
제 1 배열 중의 부분의 각각에 대해서 부분 트리의 정점 노드가 루트 노드가 되도록 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 기억 장치 중에 생성하는 스텝을 구비한다. 여기서, 제 1 배열이란 C-P배열을 말한다.
보다 상세하게는 도 24에 나타내는 바와 같이, CPU(12)는 RAM(14) 등의 메모리에 격납된 C-P배열을 참조하여 그 C-P배열 중, 처리 대상이 되는 부분 트리에 상당하는 부분 배열을 특정한다(스텝2401). 보다 구체적으로는 C-P배열에 있어서, 부분 트리의 정점 노드가 나타내는 위치를 초기 위치로 한 포인터를 하나씩 아래쪽(노드 식별자가 증대하는 방향)으로 이동시켜 포인터가 나타내는 C-P배열의 값 이 정점 노드에 대응하는 C-P배열의 값보다도 크면 그 포인터가 나타내는 노드 식별자에 대응하는 노드는 부분 트리에 포함된다(도 25의 부호2501 참조).
이어서, CPU(12)는 부분 배열에 있어서 정점 노드의 부모의 노드 식별자를 나타내는 선두의 요소를 「-1」로 변환한다(스텝2402).
이어서, CPU(12)는 2번째 이후의 요소의 값에서 각각 정점 노드의 노드 식별자의 값을 오프셋으로서 차감한 값을 산출하고, 이것을 그 요소의 값으로서 부분 배열에 격납한다(스텝2403). 스텝2403의 처리는 부분 배열에 있어서 2번째 이후의 모든 요소에 대해서 실행된다(스텝2404, 2405 참조). 이에 따라, 도 25의 예에서는 [7, 8, 8]이라는 요소를 갖고 있던 부분 배열이 표준화에 의해 [-1, 0, 0]이라는 부분 배열로 변환된다(부호2510 참조). CPU(12)는 표준화된 부분 배열을 RAM(14) 등의 메모리에 격납한다.
또한, 도 24의 처리에 있어서, 스텝2402를 생략하고, 스텝2403에 있어서, 부분 배열의 선두의 요소로부터, 순차적으로, 그 값에 정점 노드의 노드 식별자를 감산해도 된다.
[오름차순 형식]
또한, 각각의 부모 노드가 몇개의 자식 노드를 갖는지를 나타내는 배열을 생각할 수 있다. 이 배열을 오름차순 형식의 배열이라고 칭한다. 오름차순 형식의 배열에는 이하와 같은 이점이 있다.
(1) 오름차순 형식의 배열에 있어서는, 부모 노드의 번호순으로 오름차순으로 나열되어 있기 때문에, 루트 노드에 가까운 측부터 부모 노드의 노드 식별자가 출현하고, 오름차순 형식 상호의 비교에서는 보다 루트 노드에 가까운 측부터 비교된다.
2개의 오름차순 형식의 배열을 선두에서부터 비교하면 보다 루트에 가까운 측부터 비교되게 된다.
(2) 비교를 효율적으로 실시할 수 있다.
첫째로, 1개의 부모 노드에 2개 이상의 자식 노드가 부속되는 일이 많은 경우에 배열의 사이즈를 작게 할 수 있기 때문이다.
둘째로, 오름차순의 배열은 비교하기 쉬운 것에 의한다.
이 때문에, 오름차순 형식은 후술하는 토폴로지의 소트를 실시하는데 적합하다. 특히, 토폴로지의 소트에 적합한 최대의 이유는 오름차순 형식은 루트 노드에 가까운 측부터 기술되기 때문에 보다 중요한 루트 노드에 가까운 측의 특징이 우선되어 토폴로지의 대소가 결정되기 때문이다.
상술한 오름차순 형식의 배열을 기억 장치 중에 구축하기 위해서는,
동세대보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 노드 식별자로서 고유의 연속되는 정수를 부여하는 스텝과,
자식 노드를 갖는 노드에 대해서 각각의 노드 식별자와, 그 자식 노드를 갖는 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝을 구비하는 것으로 실현할 수 있다.
또한, C-P배열(제 1 배열)로부터 오름차순 형식의 배열을 생성하기 위해서 는 제 1 배열 중의 노드 식별자와 제 1 배열에 있어서 노드 식별자가 출현하는 수를 나타내는 출현수의 세트를 제 1 배열 중의 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝을 구비함으로써 실현할 수 있다.
도 26은 오름차순 형식의 배열을 설명하기 위한 도면이다. 도 26에 있어서, 표준화된 부분 트리(도 22에 있어서의 부분 트리C에 상당)2601의 「자식→부모」표현을 표시하는 부모 자식 관계의 배열(표준화된 C-P배열)은 부호2602에 나타내는 바와 같은 것이 된다. CPU(12)는 C-P배열의 요소를 참조하여 출현값(노드 식별자)과 출현 횟수의 세트로 이루어지는 집계 배열을 작성한다(스텝2611). 여기서, 집계 배열에 있어서, 출현값은 오름차순으로 격납된다. 이에 따라, 집계 배열2603이 생긴다. 「출현값=-1」에 대해서는 항상 그 출현수는 「1」이기 때문에 CPU(12)는 「출현값=-1」과 「출현수=1」의 세트를 배열에서 삭제한다(스텝2622). 이와 같은 처리의 결과, 집계 배열2604를 얻을 수 있다. CPU(12)는 얻어진 집계 배열2604를 RAM(14) 등의 메모리에 격납한다.
표준화된 C-P배열과 오름차순 형식의 집계 배열은 1대 1로 대응하며, 서로 변환할 수 있다. 표준화된 C-P배열로부터 집계 배열로의 변환(집계 배열의 생성)은 상술한 바와 같다. 집계 배열로부터 표준화된 C-P배열로의 변환(집계 배열에 의거하는 C-P배열의 생성)에 대해서 이하에 기술한다.
도 27에 있어서, 트리2701은 출현값과 출현 횟수의 세트로 이루어지는 오름차순 형식의 집계 배열2702를 사용하여 표현될 수 있다. 또한, 이것은 C-P배열 2703을 이용해도 표현될 수 있다. 집계 배열로부터 C-P배열로의 변환 처리에 있어서는 「주류(主流)」라는 개념을 도입한다. 「주류」란, C-P배열에 있어서, 선두의 요소(노드 식별자에 상당하는 격납 위치 번호=0의 요소)를 제외하고, 자기의 격납 위치 번호보다 「1」만 적은 격납값을 갖는 것 같은 연속된 블록을 말한다. 예를 들어, C-P배열에 있어서, 부호2711, 2712로 나타내는 블록이 주류가 된다. 트리2701에 있어서, 상기 부호2711, 2712로 나타내는 블록을 구성하는 노드를 연결하는 아크를 파선으로 나타내고 있다. 또한, 자기의 격납 위치 번호보다 「1」만 적은 격납값을 갖는 노드가 아닌 경우는, 주류의 선두 노드라고 생각할 수 있다.
집계 배열로부터 C-P배열(제 1 배열)로의 변환은 개략적으로는,
집계 배열 중의 출현수에 의거하여 노드 식별자를 격납 위치 번호로 하는 제 1 배열을 위한 영역을 기억 장치 중에 확보하는 스텝과,
집계 배열 및 제 1 배열의 각각에 있어서 제 1 포인터 및 제 2 포인터를 초기 위치에 배치하는 스텝과,
집계 배열 중 제 1 포인터가 나타내는 노드 식별자와 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하는 경우에 제 1 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 제 1 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 1 포인터 및 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝과,
집계 배열 중 제 1 포인터가 나타내는 노드 식별자와 제 2 포인터가 나타내 는 격납 위치 번호에서 「1」을 뺀 값이 일치하지 않는 경우에 집계 배열에 있어서 제 1 포인터에 초기적으로 배치되는 제 3 포인터를 그 격납 위치 번호를 빼도록 이동시키고, 처음에, 집계 배열에 있어서 그 출현수가 「0」이 되지 않는 위치를 특정하여 그 제 3 포인터가 나타내는 노드 식별자를 제 1 배열에 있어서 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 제 3 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝을 구비하고 있다.
도 28은 집계 배열로부터 C-P배열로의 변환 처리를 나타내는 플로우 차트이다. 도 28에 나타내는 바와 같이, CPU(12)는 RAM(14) 등의 메모리상에 C-P배열을 위한 영역을 확보하고, C-P배열의 선두의 요소로서 「-1」을 격납한다(스텝2801). 이어서, CPU(12)는 오름차순 형식의 집계 배열의 선두에 제 1 포인터를 세트함과 아울러, C-P배열의 2번째의 격납 위치(격납 위치 번호=1)에 제 2 포인터를 세트한다(스텝2802). 도 29A는 스텝2801 및 스텝2802의 처리가 종료한 상태를 나타내는 도면이다. 도 29A 및 이후 설명에 인용하는 도면에 있어서, 제 1 포인터는 「화살표1」로 표기되고, 또한, 제 2 포인터는 「화살표2」로 표기된다. 또한, 후술하는 제 3 포인터는 「화살표3」으로 표기된다. 또한, C-P배열의 선두의 요소로서 「-1」이 격납된다.
CPU(12)는 C-P배열에 있어서 제 2 포인터가 나타내는 격납 위치 번호(노드 식별자)로부터 「1」을 뺀 값이 제 1 포인터가 나타내는 집계 배열 중의 출현값과 동등한지 여부를 판단한다(스텝2803). 스텝2803에서 예스(Yes)로 판단된 경우에는 CPU(12)는 제 1 포인터가 나타내는 집계 배열 중의 출현값을 C-P배열 중 제 2 포인터가 나타내는 위치에 격납한다(스텝2804). 이어서, CPU(12)는 제 1 포인터가 나타내는 집계 배열 중의 출현 횟수를 「1」만 뺌과 아울러(스텝2805), 제 1 포인터 및 제 2 포인터를 하나만 아래쪽으로 이동시킨다(즉, 포인터가 나타내는 격납 위치 번호가 「1」만 증대하도록 이동한다)(스텝2806). 제 2 포인터의 위치가 C-P배열의 말미를 넘지 않으면(스텝2807에서 노우(No)), 스텝2803으로 되돌아간다.
도 29B에 나타내는 바와 같이, 제 2 포인터(화살표2)가 나타내는 C-P배열의 격납 위치 번호는 「1」이며, 그 값으로부터 「1」을 빼면 제 1 포인터가 나타내는 집계 배열 중의 출현값 「0」과 동등하다. 따라서, 스텝2803에서 예스(Yes)로 판단되어 제 1 포인터가 나타내는 집계 배열 중의 출현값 「0」이 C-P배열 중 제 2 포인터가 나타내는 위치에 격납되고, 또한, 집계 배열 중 제 1 포인터가 나타내는 출현 횟수가 「1」만 줄어든다. 그 후, 제 1 포인터 및 제 2 포인터가 각각 격납 위치 번호가 「1」만 증대하도록 아래쪽으로 이동된다.
도 30A, B는 도 29B에 나타내는 C-P배열로의 값의 격납에 계속되는 처리의 상황을 나타낸다. 이들의 경우에 있어서도, 스텝2804~2806의 처리가 실행된다.
도 31A의 경우에는 제 2 포인터가 나타내는 C-P배열의 격납 위치 번호는 「4」이며, 그 값으로부터 「1」을 빼면 「3」이 된다. 그 한편, 제 1 포인터가 나타내는 집계 배열 중의 출현값은 「7」이기 때문에, 이들은 일치하지 않는다(스텝2803에서 노우(No)).
이 경우에는 CPU(12)는 집계 배열의 위치를 특정하는 제 3 포인터를 생성하 고, 그 포인터를 제 1 포인터의 위치로부터 역행시켜(즉, 격납 위치 번호를 빼는 방향으로 이동시키고), 처음에, 「출현 횟수?0」이 되는 것 같은 위치를 특정한다(스텝2808). 도 31A의 예에서는 제 3 포인터를 제 1 포인터의 위치로부터 하나만 격납 위치 번호를 빼는 방향으로 이동시키면 그 제 3 포인터가 나타내는 출현 횟수는 「2」가 되기 때문에, 제 3 포인터는 이 위치에서 정지한다.
이어서, CPU(12)는 제 3 포인터가 나타내는 집계 배열 중의 출현값을 C-P배열 중 제 2 포인터가 나타내는 위치에 격납한다(스텝2809). CPU(12)는 제 3 포인터가 나타내는 집계 배열 중의 출현 횟수를 「1」만 뺌과 아울러(스텝2810), 제 2 포인터를 하나만 아래쪽으로 이동시킨다(즉, 포인터가 나타내는 격납 위치 번호가 「1」만 증대하도록 이동시킨다)(스텝2811).
도 31B, 도 32A, B에 나타내는 경우에는 스텝2803에서 노우(No)로 판단되어 스텝2808~2811이 실행되고, C-P배열 중 제 2 포인터가 나타내는 위치에 제 3 포인터가 나타내는 집계 배열 중의 출현값이 격납된다.
계속되는 도 33A, B에 나타내는 경우에는 스텝2803에서 예스(Yes)로 판단되어 스텝2804~2806이 실행되고, C-P배열 중 제 2 포인터가 나타내는 위치에 제 1 포인터가 나타내는 집계 배열 중의 출현값이 격납된다. 또한, 계속되는 도 34A, B에 나타내는 경우에는, 스텝2803에서 노우(No)로 판단되어 스텝2808~2811이 실행되고, C-P배열 중 제 2 포인터가 나타내는 위치에 제 3 포인터가 나타내는 집계 배열 중의 출현값이 격납된다. 예를 들어, 도 34B에 관해서, 스텝2808~2811의 처리 후, 제 2 포인터는 C-P배열의 말미를 넘은 위치로 이동한다. 이 때문에, 이 시점 에서 처리는 종료된다.
이와 같이 해서, 오름차순 형식의 집계 배열에 의거하여 표준화된 C-P배열을 생성하는 것이 가능해진다. 또한, 오름차순 형식의 집계 배열과 표준화된 C-P배열은 표현 형태가 다를 뿐, 동일한 정보(트리의 구조의 정보)를 포함하는 것을 알 수 있다. 따라서, 이하에 설명하는 검색, 집계, 소트 처리에 있어서 사용하기 쉬운 방법을 채용하여 처리를 진행시키는 것이 가능해진다.
[오름차순 형식의 부분 트리]
상술한 오름차순 형식의 집계 배열에 있어서는 말단의 노드(리프 노드)의 노드 식별자는 출현값으로서 출현하지 않는다. 예를 들어, 도 48A에 나타내는 트리는 오름차순 형식의 집계 배열을 이용하여 도 48B와 같이 표시된다(부호4800 참조). 도 48A로부터 이해할 수 있는 바와 같이, 이 트리에 있어서 리프 노드의 노드 식별자는 「3」, 「5」, 「6」, 「10」 및 「11」이 된다. 도 48B에 나타내는 부분 배열의 출현값의 항목을 참조하면 상기 노드 식별자 「3」, 「5」, 「6」, 「10」 및 「11」은 출현하지 않았다. 또한, 도 48B에 나타내는 부분 배열을 참조하면 이해할 수 있는 바와 같이, 출현 횟수의 총화는 「모든 노드수-1」과 동등하다.
이하, 오름차순 형식의 부분 트리의 범위의 특정 및 오름차순 형식의 부분 트리의 표준 형식에 대해서 설명한다.
오름차순 형식의 배열에 있어서 부분 트리를 특정하는 방법은 개략적으로,
집계 배열에 있어서 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으 로 산출하는 스텝과,
집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하고 노드 식별자에 대응하는 노드가 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 자손 노드의 노드 식별자를 갱신하는 스텝과,
정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝을 구비한다.
도 49는 오름차순 형식의 집계 배열에 의거하여 어느 정점 노드의 부분 트리를 특정하는 처리를 나타내는 플로우 차트이다. 도 49에 나타내는 바와 같이, CPU(12)는 RAM(14) 등 메모리에 기억된 정점 노드 리스트에서 정점 노드를 꺼낸다(스텝4901). 이어서, CPU(12)는 집계 배열에 있어서, 꺼낸 정점 노드가 나타내는 출현값 및 출현 횟수를 참조하여 초기적인 산출값 「출현값+출현 횟수+1」을 산출한다(스텝4902). 이 산출값은 이하와 같은 의미를 가진다.
오름차순 형식의 집계 배열에 있어서 출현값은 노드 식별자에 상당하고, 또한, 출현 횟수는 C-P배열에 있어서, 상기 노드 식별자가 몇개 출현했는지를 나타낸다. 따라서, 적어도 정점 노드 리스트에 있어서 다음의 정점 노드의 노드 식별자는(바꾸어 말하면 다음의 부분 트리의 정점 노드의 노드 식별자는), 적어도 산출값 이상인 것을 알 수 있다.
또한, 후술하는 스텝4908에서 알 수 있는 바와 같이, 집계 배열에 있어서 그 출현값의 다음의 행의 출현값(노드 식별자)이 이 산출값 이상의 번호를 갖지 않는 경우 추가로 다음 행의 출현 횟수를 가산함으로써 그 행에서의 산출값을 보정할 수 있다. 이와 같이 다음 행의 출현값이 산출값 미만인 경우 산출값에 다음 행의 출현 횟수를 가산하고 또한 그 다음의 행의 출현값과 비교하는 것을 반복하는 동안에, 산출값 이상의 출현값을 발견함으로써 부분 트리를 특정할 수 있다.
도 50A~C는 도 48A에 나타내는 트리에 있어서, 어느 정점 노드(노드 식별자=2)의 부분 트리를 특정하는 처리의 구체 예를 설명하는 도면이다. 도 50A는 집계 배열에 있어서 정점 노드에 대응하는 격납 위치 번호를 포인터가 가리키고 있는 상태를 나타낸다. 도 50A~C에 있어서, 검은 화살표는 정점 노드에 대응하는 격납 위치 번호를 가리키고 있다. 또한, 흰 화살표는 후술하는 이동 포인터를 나타낸다.
이 상태에 있어서, 상술한 산출값은 「2+2+1=5」가 된다. 따라서, 다음의 부분 트리의 정점 노드의 노드 식별자는 「5」 이상인 것을 알 수 있다.
이어서, CPU(12)는 이동 포인터를 정점 노드가 나타내는 격납 위치 번호에 배치한다(스텝4903). 이 위치가 이동 포인터의 초기 위치가 된다. CPU(12)는 이동 포인터를 다음의 격납 위치 번호로 이동시키고(스텝4904), 집계 배열에 있어서 이동 포인터가 나타내는 출현값을 참조한다(스텝4905). CPU(12)는 스텝4902에서 산출한 산출값과 스텝4903에서 참조한 출현값을 비교하여 「산출값>출현값」이면(스텝4906에서 예스(Yes)), 이동 포인터가 나타내는 격납 위치 번호의 출현값에 관한 노드가 정점 노드에 속하는 것을 나타내는 정보를 생성하여 메모리 중에 기억한다(스텝4907). 예를 들어, 상기 정보를 격납하기 위해서 상기 출현값을 격납한 배열을 메모리 중에 생성해도 되고, 혹은 집계 배열에 있어서, 상기 정보로서 격납 위치 번호에 관련지어 플래그를 세트해도 된다.
그 후, CPU(12)는 산출값을 「원래의 산출값+포인터가 나타내는 출현 횟수」로 갱신한다(스텝4908).
도 50B에 나타내는 바와 같이, 이동 포인터가 격납 위치 번호「3」을 나타내는 상태에서는 그 출현값은 「4」가 된다. 산출값 「5」와 출현값 「4」를 비교하면, 「산출값5>출현값4」이기 때문에, 스텝4904에서 예스(Yes)로 판단되어, 출현값 「4」, 즉 노드 식별자가 「4」인 노드는 노드 식별자가 「2」인 정점 노드에 속하며, 그 정보가 메모리 중에 기억된다. 또한, 산출값은 「5(원래의 산출값)+1(포인터가 나타내는 출현 횟수)=6」으로 갱신된다.
스텝4906에서 노우로 판단된 경우에는 그 정점 노드에 관한 부분 트리의 특정 처리는 종료된다. 도 50C에 나타내는 바와 같이, 이동 포인터가 격납 위치 번호 「4」를 나타내는 상태에서는 그 출현값은 「7」이 된다. 갱신된 산출값 「6」과 출현값 「7」을 비교하면 「산출값6<출현값7」이기 때문에 스텝4906에서 노우(No)로 판단된다. 따라서, 정점 노드 「2」의 부분 트리는 부호5001로 나타나는 범위로 특정된다.
다음에, 오름차순 형식의 집계 배열에 의해 표시되는 트리나 부분 트리의 표준 형식에 대해서 설명한다. 이것은 집계 배열에 있어서 모든 출현값에서 선두의 격납 위치 번호의 출현값을 빼면 된다. 도 51은 도 50A~C에 나타내는 처리에서 특정된 부분 트리의 오름차순 형식의 집계 배열을 나타내는 도면이다. 여기에서는 오름차순 형식의 집계 배열(부호5101 참조)의 출현값의 각각에서 선두의 격납 위치 번호의 출현값 「2」를 뺀다(부호5102 참조). 이에 따라, 표준화된 오름차순 형식의 집계 배열을 얻을 수 있다(부호5103 참조).
말단 노드에 있어서의 오름차순 형식의 집계 배열을 생각한다. 도 48A에 나타내는 예에 있어서 말단 노드의 노드 식별자는 「3」, 「5」, 「6」, 「10」 및 「11」이 된다. 따라서, 말단 노드의 각각을 오름차순 형식의 집계 배열로 표시하면 도 51의 부호5201과 같이 된다. 예를 들어, 처음의 집계 배열은 출현값 「3」에 대해서는(말단 노드이기 때문에) 그 출현 횟수가 「0(제로)」인 것이 나타난다. 여기에서도, 표준화에 있어서는 각각의 배열에 있어서 출현값으로부터 출현값을 빼는, 즉 출현값을 「0(제로)」으로 하면 된다(부호5202 참조).
[토폴로지 검색]
트리 전체에 있어서, 혹은 어느 정점 노드에 의해 특정되는 부분 트리에 있어서, 트리 혹은 부분 트리와 동일한 접속 형태, 즉 동일한 토폴로지를 가지는 부분 트리를 발견하는 것을 생각한다. 예를 들어, 도 35B에 나타내는 트리에 있어서, 도 35A에 나타내는 트리와 동일한 토폴로지를 가지는 부분 트리를 찾으면 도 35B에 있어서 점선으로 나타내는 부분 트리를 특정할 수 있다. 이것을 토폴로지 검색이라고 칭한다. 토폴로지 검색에 있어서 그 검색 결과는 검색에 의해 특정된 부분 트리의 정점 노드의 노드 식별자를 포함하는 배열(정점 노드 리스트)로 나타낼 수 있다. 도 35A, B의 예에서는 검색 결과는 [7]이 된다.
트리 전체로부터, 검색 키가 되는 트리와 동일 토폴로지의 부분 트리를 발견하는 경우도 정점 노드 리스트에 의해 특정되는 부분 트리군으로부터 검색 키가 되 는 트리와 동일 토폴로지의 부분 트리를 발견하는 경우도 알고리즘으로서는 동일하기 때문에, 이하의 설명에서는 구별하지 않고 취급한다.
또한, 이하의 설명에 있어서 검색 키가 되는 트리를 검색 토폴로지라고도 칭한다. 토폴로지의 검색은 개략적으로는,
검색 키가 되는 트리를 표현하는 검색 키 배열로서, 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 기억 장치 중에 생성하는 스텝과,
검색 키 배열 중의 노드 식별자에 오프셋을 부여하여 오프셋이 부여된 노드 식별자와, 오프셋에 따른 제 1 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
비교에 의해 모두가 일치한 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 기억 장치 중에 생성하는 스텝을 구비한다.
도 36은 본 실시형태에 의한 토폴로지 검색 처리를 나타내는 플로우 차트이다. 도 36에 나타내는 바와 같이, CPU(12)는 RAM(14) 등의 메모리에 격납된 검색 토폴로지를 표시하는 C-P배열을 참조하여 선두의 요소를 삭제한 검색 키 배열을 생성한다(스텝3601). 이어서, CPU(12)는 검색 키 배열의 값에 가산하는 오프셋값을 「0(제로)」으로 초기화하고(스텝3602), 또한, 검색 키 배열과 검색 대상이 되는 C-P배열의 사이의 비교해야 할 위치를 나타내는 포인터를 초기 위치에 배치한다(스 텝3603). 스텝3603에 있어서는, 포인터는 C-P배열 중 오프셋값에 「1」을 더한 위치에 초기적으로 위치한다. 예를 들어, 도 37A에 나타내는 바와 같이, 초기적으로는 비각 위치를 나타내는 포인터는 C-P배열 중 「오프셋값(0)+1=1」을 나타낸다. 이 때문에, 후술하는 바와 같이, 검색 키 배열의 선두의 요소가 포인터가 나타내는 C-P배열의 격납 위치 번호 「1」의 요소와 비교되게 된다.
CPU(12)는 검색 키 배열의 요소의 각각에 오프셋값을 가산하고, 또한, 오프셋값이 가산된 검색 키 배열의 요소와, 포인터로 나타나는 C-P배열의 부분 중 그 검색 키 배열의 요소에 대응하는 요소를 비교하여(스텝3604) 각각의 요소가 일치하는지의 여부를 판단한다(스텝3605). 스텝3605에서 예스(Yes)로 판단된 경우에는 CPU(12)는 비교 대상이 된 C-P배열의 부분 말미의 그 다음, 즉 말미의 격납 위치 번호에 「1」을 더한 격납 위치 번호의 요소를 참조하여 그 요소가 비교 대상이 된 C-P배열의 부분에 의해 특정되는 트리와 동일 블록에 속하는지 여부를 판단한다(스텝3606). 구체적으로는 CPU(12)는 비교 대상이 된 C-P배열의 부분 말미의 그 다음의 요소가 오프셋값 이상인지 여부를 조사하여 오프셋값 이상이면 동일 블록에 속한다고 판단한다.
스텝3606에서 노우(No)로 판단된 경우에는 오프셋값을 검색 결과를 격납하기 위한 메모리상에 생성한 정점 노드 리스트에 격납한다(스텝3607). 그 후, CPU(12)는 포인터를 하나만 하측, 즉 격납 위치 번호가 「1」만 증대하도록 이동함과 아울러(스텝3608), 오프셋값을 「1」만 증대시킨다(스텝3609). 포인터의 이동에 따라 다시 C-P배열에 있어서 비교 대상이 되는 부분이 존재하는지 여부를 판단하여(스 텝3610) 존재하는 경우(스텝3610에서 예스(Yes))에는 스텝3604로 되돌아간다.
도 37A의 예(오프셋값=0의 예)에서는 검색 키 배열의 요소와 비교 대상이 된 C-P배열의 부분의 요소(격납 위치 번호 「1」~「4」의 요소)는 부분적으로 일치하지 않기 때문에 스텝3605에서 노우(No)로 판단된다. 도 37B의 예(오프셋값=1의 예)에서는 검색 키 배열의 요소와 비교 대상이 된 C-P배열의 부분의 요소(격납 위치 번호 「2」~「5」의 요소)는 모두 일치한다. 그렇지만, 비교 대상이 된 C-P배열의 말미(격납 위치 번호=5)의 그 다음(격납 위치 번호=6)의 요소가 「1」이며, 오프셋 「1」 이상이다. 따라서, 스텝3606에서 예스(Yes)로 판단된다. 도 38A, B의 예(각각 오프셋값=2, 3의 예)에 있어서도, 스텝3605에서 노우(No)로 판단된다. 도 39의 예(오프셋값=7)의 예에서는 스텝3605에서 예스(Yes), 스텝3606에서 노우(No)로 판단되고, 그 결과 오프셋값 「7」이 정점 노드 리스트에 격납된다. 또한, 도 39의 예에서는 비교 대상이 된 C-P배열의 말미(격납 위치 번호=11)의 그 다음의 요소가 존재하지 않기 때문에, 블록의 계속되는 체크(즉, 다음의 요소와 오프셋과의 비교)는 불필요하다.
[다른 토폴로지 검색]
예를 들어, 토폴로지에 더하여 그 노드의 타입(도 2A, B를 참조하여 설명한 노드의 항목명 정보)의 일치도 검색 조건으로 하는 경우도 생각할 수 있다. 이 경우에는 상기 처리에 있어서 상기 스텝3606 후에 비교된 각 요소에 대응하는 노드의 타입을 비교하여 그 타입이 일치한 경우에는 오프셋값을 정점 노드 리스트에 격납하면 된다.
[오름차순 형식의 집계 배열을 이용한 토폴로지 검색]
토폴로지 검색은 오름차순 형식의 집계 배열을 이용해도 실현할 수 있다. 기본적으로는 검색 키가 되는 트리(검색 토폴로지)를 표현한 표준화된 오름차순 형식의 집계 배열과 트리의 오름차순 형식의 집계 배열을 비교한다. 도 53은 본 실시형태에 의한 오름차순 형식을 이용한 토폴로지 검색의 처리를 나타내는 플로우 차트이다. 도 53의 처리는 도 36의 처리(C-P배열을 이용한 토폴로지 검색 처리)와 거의 동일하다. 도 36의 처리에 있어서는, 비교 대상 부분의 다음의 요소가 그 비교 대상 부분과 동일 블록에 속하는지 여부의 판단(스텝3606)이 되고 있었지만, 오름차순 형식의 집계 배열을 이용하면 이 스텝을 생략할 수 있다.
오름차순 형식의 집계 배열을 이용한 토폴로지 검색은 개략적으로는,
검색 키가 되는 트리를 표현하는 검색 키 배열로서, 자식 노드를 갖는 노드에 대해서 각각의 노드 식별자와, 그 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝과,
검색 키 배열 중의 노드 식별자에 오프셋을 부여하여 오프셋이 부여된 노드 식별자와, 오프셋에 따른 집계 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
비교에 의해 모두가 일치한 집계 배열의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 기억 장치 중에 격납하는 스텝을 구비한다.
보다 상세하게는 CPU(12)는 RAM(14) 등의 메모리에 격납된 검색 토폴로지를 나타내는 오름차순 형식의 집계 배열을 참조하여 검색 키 배열을 생성한다(스텝5301). 이 검색 키 배열은 표준화된 오름차순 형식의 집계 배열이다. 이어서, CPU(12)는 검색 키 배열과 검색 대상이 되는 집계 배열의 사이의 비교해야 할 위치를 나타내는 포인터를 초기 위치에 배치한다(스텝5302). 스텝5303에 있어서는 포인터는 집계 배열의 격납 위치 번호 「0(제로)」의 위치에 배치된다. 또한, CPU(12)는 검색 키 배열의 출현값에 가산하는 오프셋값을 검색 키 배열의 선두의 출현값 및 오프셋값의 합계와 비교 대상 부분의 선두의 출현값이 일치하도록 초기화된다(스텝5303). 도 54A의 경우, 검색 키 배열의 선두의 출현값은 「0(제로)」이며, 또한, 비교 대상 부분의 선두의 출현값은 「0(제로)」이기 때문에 오프셋값도 「0(제로)」이 된다.
이어서, CPU(12)는 검색 키 배열과 포인터로 나타나는 집계 배열의 비교 대상 부분을 비교한다(스텝5304). 여기에서는 포인터로 나타나는 위치가 비교 대상 부분의 선두가 된다.
예를 들어, 도 55A에 나타내는 바와 같이, 초기적으로는 검색 키 배열의 격납 위치 번호 「0(제로)」과, 집계 배열의 격납 위치 번호 「0+0(후자의 0(제로)은 오프셋값)」을 맞추도록 비교 위치가 결정된다.
이어서, CPU(12)는 검색 키 배열의 출현값의 각각에 오프셋값을 가산하고, 또한, 오프셋값이 가산된 검색 키 배열의 출현값 및 출현 횟수의 세트와 비교 대상 부분이 대응하는 위치의 출현값 및 출현 횟수의 세트를 비교한다(스텝5304). 각각 의 요소의 모두가 일치한 경우에는(스텝5305에서 예스(Yes)), 오프셋값을 검색 결과를 격납하기 위해서 메모리상에 생성한 정점 노드 리스트에 격납한다(스텝5306). 그 후, CPU(12)는 포인터를 하나만 하측, 즉 격납 위치 번호가 「1」만 증대하도록 이동함과 아울러(스텝5307), 오프셋값을 검색 키 배열의 선두의 출현값 및 오프셋값의 합계가 포인터 이동 후의 비교 대상 부분의 선두의 출현값과 일치하도록 증분한다(스텝5308). 포인터의 이동에 따라 다시 집계 배열에 있어서 비교 대상이 되는 부분이 존재하는지 여부를 판단하여(스텝5309) 존재하는 경우(스텝5309에서 예스(Yes))에는 스텝5304로 되돌아간다.
도 54A의 예(오프셋값=0의 예)에서는 검색 키 배열에 있어서 오프셋값이 더해진 출현값과 비교 대상 부분의 출현값은 일치하지만, 출현 횟수가 일치하지 않는다. 따라서, 스텝5305에서 노우(No)로 판단된다. 도 54B의 예(오프셋값=1의 예)에 있어서도 출현값은 일치하지만, 출현 횟수가 일치하지 않는다. 또한, 도 55A의 예(오프셋값=2의 예)에서는 출현값이 일치하지 않게 된다.
이에 대해, 도 55B의 예에서는 출현값 및 출현 횟수가 모두 일치한다. 따라서, 검색 결과를 표시하는 정점 노드 리스트는 [7]이 된다.
오름차순 형식의 집계 배열을 이용하면 검색 키 배열과 비교 대상 부분과의 사이의 비교처리의 횟수를 줄일 수 있다. 또한, 비교 처리에 있어서 동일 블록의 판단처리(도 36의 스텝3606)를 생략할 수 있다.
[토폴로지 집계]
다음에, 토폴로지 집계에 대해서 설명한다. 토폴로지 집계란 이하와 같은 2 개의 형태를 생각할 수 있다.
(1) 토폴로지를 차원으로 하여 트리에 있어서 그 토폴로지 종(種)의 건 수를 구한다.
(2) 토폴로지를 차원으로 하여 트리에 있어서 그 토폴로지 종에 속하는 지정된 측도(예를 들어, 연령, 체중 등)의 건 수, 최대값, 최소값, 합계값, 평균값 등을 구한다.
기본적으로, (1)의 집계(「제 1 토폴로지」라고 칭한다.)를 실행하면 (2)의 집계(「제 2 토폴로지 집계」라고 칭한다.), 즉 그 토폴로지 종에 속하는 측도의 연산은 용이하다. 따라서, 우선, 제 1 토폴로지 집계에 대해서 설명한다.
여기서, 측도에 대해서 간단하게 설명한다. 도 2A, B를 참조하여 설명한 바와 같이, 실제의 노드에 있어서 항목명 정보, 즉 노드의 타입과 항목값 정보, 즉 노드의 값이 관련지어져 있다. 상기 노드에 있어서의 항목명 정보(노드의 타입) 및 항목값 정보(노드의 실제의 값)가 상기 측도가 되는 경우가 있다.
[제 1 토폴로지 집계]
도 40A에 나타내는 트리를 생각한다. 여기서, 정점 노드 리스트 [2, 7, 8]에서 특정되는 부분 트리군에 있어서 토폴로지 종마다의 건 수를 구하는 것을 생각한다. 그 결과, 토폴로지4011이 정점 노드 리스트 [2, 8]에서 나타나는 2개의 부분 노드로서 나타난다. 또한, 토폴로지4012는 정점 노드 리스트 [7]에서 나타나는 1개의 부분 노드로서 나타난다. 따라서, 토폴로지4011이 2건, 토폴로지4012가 1건이라는 토폴로지 집계 결과가 얻어진다(도 40B 참조).
토폴로지 집계는 개략적으로는,
부분 트리의 정점 노드를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 제 1 배열 중의 부분을 특정하는 스텝과,
제 1 배열 중의 부분의 각각에 대해서 부분 트리의 정점 노드가 루트 노드가 되도록 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 기억 장치 중에 생성하는 스텝과,
생성된 제 2 배열을 참조하여 제 2 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 제 2 배열의 종별과 관련지어 기억 장치 중에 기억하는 스텝을 구비한다.
보다 구체적으로, 본 실시형태에 의한 정보 처리 장치에 있어서의 제 1 토폴로지 집계 처리에 대해서 설명한다. 도 41에 나타내는 바와 같이, CPU(12)는 RAM(14) 등의 메모리에 기억된 정점 노드 리스트를 참조하여 그 값(정점 노드의 노드 식별자)을 꺼낸다(스텝4101). 이어서, CPU12는 C-P배열 중, 정점 노드에서 지정되는 부분 트리의 범위를 특정한다(스텝4102). 이것은 예를 들어, 도 42에 나타내는 처리에 의해 실현할 수 있다.
도 42에 나타내는 바와 같이, CPU(12)는 우선, C-P배열 중, 정점 노드의 노 드 식별자에 「1」을 더한 격납 위치 번호가 나타내는 요소를 참조한다(스텝 4201). 이어서, 참조된 C-P배열 중의 요소가 정점 노드의 노드 식별자 이상인지의 여부가 판단된다(스텝4202). 스텝4202에서 예스(Yes)로 판단된 경우에는 이 요소에 관한 격납 위치 번호에 상당하는 노드는 정점 노드에서 특정되는 부분 트리에 속하기 때문에 CPU(12)는 이 격납 위치 번호를 메모리 중에 일시적으로 기억한다(스텝4203). 이어서, CPU(12)는 C-P배열 중의 참조해야 할 격납 위치 번호를 「+1」하고, 그 격납 위치 번호가 C-P배열의 말미의 격납 위치 번호를 넘지 않는 한(스텝4205에서 노우(No)), CPU(12)는 스텝4202~4204의 처리를 반복한다. 이에 따라, 정점 노드의 부분 트리에 속하는 노드의 노드 식별자에 대응하는 격납 위치 번호를 취득할 수 있다.
이어서, CPU(12)는 C-P배열 중, 정점 노드에서 지정되는 부분 트리에 상당하는 부분 배열을 표준 형식으로 변환한다(스텝4103). 표준 변환은 도 24에 나타내는 처리를 실행함으로써 실현된다.
CPU(12)는 모든 정점 노드에 대해서 스텝4102 및 4103의 처리를 실행하여(스텝4104 참조) 각 정점 노드에 대해서 표준화된 부분 배열을 얻어 둔다. 얻어진 부분 배열은 RAM(14) 등 메모리에 기억해 두면 된다. 이어서, CPU(12)는 표준 형식의 부분 배열을 비교하여 부분 배열마다 몇 개 존재했는지를 카운트한다(스텝4105). 이 부분 배열 및 카운트값이 제 1 토폴로지 집계에 의한 집계 결과가 된다.
또한, 트리 전체를 처리 대상으로 하여 제 1 토폴로지 집계를 실시하는 경우에는 정점 노드 리스트에 모든 노드 식별자를 격납하면 된다.
도 43A~C는 제 1 토폴로지 집계 처리의 예를 나타내는 도면이다. 도 43A~C의 각각에 있어서 정점 노드에서 지정되는 부분 트리의 범위(부호4301, 4311, 4321 참조)의 특정, 표준 형식에 의한 부분 배열(부호4302, 4312, 4322 참조)의 취득에 의해 표준 형식에 의한 부분 배열 [-1, 1, 0]이 2건, 부분 배열 [-1, 0, 1, 1, 0]이 1건만 존재한다는 결과가 얻어진다.
[제 2 토폴로지 집계]
제 2 토폴로지 집계에 있어서는 제 1 토폴로지 집계의 결과로부터 분류된 부분 배열마다 추가로 지정된 측도의 건 수나, 지정된 값에 관한 연산값(최대값, 최소값, 합계값, 평균값 등)을 구하면 된다.
[오름차순 형식의 집계 배열을 이용한 토폴로지 집계]
토폴로지 집계는 오름차순 형식의 집계 배열을 이용해도 실현할 수 있다. 도 40A에 나타내는 트리는 오름차순 형식의 집계 배열을 이용하면 도 56과 같이 나타낼 수 있다. 도 40A에 나타내는 예와 마찬가지로, 정점 노드 리스트 [2, 7, 8]에서 특정되는 부분 트리군에 있어서 토폴로지 종마다의 건 수를 구하는 것을 생각한다.
오름차순 형식의 집계 배열을 이용한 토폴로지 집계는 개략적으로는,
부분 트리의 정점 노드를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
집계 배열에 있어서 정점 노드의 노드 식별자와, 상기 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 노드 식별자에 대응하는 노드가 정점 노드의 자손 노드가 되는지의 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여 자손 노드의 노드 식별자를 갱신하는 스텝과,
정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝과,
부분 배열에 있어서 상기 노드 식별자에서 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝과,
생성된 표준 형식의 부분 배열을 참조하여 표준 형식의 부분 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 종별과 관련지어 기억 장치 중에 기억하는 스텝을 구비한다.
도 57은 오름차순 형식의 집계 배열을 이용한 토폴로지 집계의 처리를 나타내는 플로우 차트이다. 도 57에 나타내는 바와 같이, CPU(12)는 RAM(14) 등의 메모리에 기억한 정점 노드 리스트를 참조하여 그 값(정점 노드의 노드 식별자)을 꺼낸다(스텝5701). 이어서, CPU(12)는 처리 대상이 된 집계 배열 중 꺼내진 정점 노드의 부분 트리의 범위를 특정한다(스텝5702). 이것은 도 49의 처리를 실행함으로써 실현된다. 스텝5702에 의해, 부분 트리의 범위를 나타내는 집계 배열이 생성된다.
CPU(12)는 스텝5702에서 얻어진 부분 트리의 범위를 나타내는 집계 배열을 표준 형식으로 변환한다(스텝5703). 이것은 도 51 및 도 52를 참조하여 설명한 바와 같이, 집계 배열에 있어서 모든 출현값에서 선두의 격납 위치 번호의 출현값을 뺌으로써 실현할 수 있다.
스텝5701~5703의 처리를 모든 정점 노드에 대해서 실행한 후(스텝5704 참조), 각 정점 노드에 대해서 표준화된(즉 표준 형식의) 집계 배열을 얻어 둔다. 얻어진 집계 배열은 RAM(14) 등의 메모리에 기억해 두면 된다. 이어서, CPU(12)는 집계 배열을 비교하여 집계 배열마다 몇 개 존재 했는지를 카운트한다(스텝5705). 이 부분 트리의 범위를 나타내는 집계 배열 및 그 카운트값이 토폴로지 집계의 집계 결과가 된다.
도 56의 예에 있어서는 상기 처리의 결과, 도 58A에 나타내는 바와 같이, 각각의 정점 노드에 대해서 3개의 부분 트리의 범위를 나타내는 집계 배열을 얻을 수 있다. 도 58A에 있어서, 부호5801~5803은 각각 정점 노드 「2」, 「7」, 「8」에 관한 부분 트리의 범위를 나타내는 집계 배열이다. 따라서, 도 58B에 나타내는 바와 같은 집계 결과를 얻을 수 있다.
[토폴로지 소트]
예를 들어, 상기 집계 결과에 대해서 건 수를 오름차순 혹은 내림차순으로 하여 나열해서 표시하는 것이 요망되는 경우가 있다. 추이률을 만족하는 대소의 척도에 의거하여 최소의 것으로부터 최대의 것(혹은 그 역)으로 연속하여 액세스할 수 있는 배열을 생성하는 것이 요망되는 경우가 있다. 이와 같이 상기 대소의 척도에 의거하는 배열을 생성하는 것을 소트라고 칭한다.
도 44A에 나타내는 트리군에 있어서 정점 노드 리스트를 각 정점 노드에 나타나는 부분 트리의 노드수로 오름차순으로 소트하는 것을 생각한다. 이 경우, 도 44B에 나타내는 바와 같이, 소트후의 정점 노드 리스트는 [2, 8, 7]이 된다. 이것은 정점 노드 「2」, 「8」로 나타나는 부분 노드의 노드수가 「3」이 되고, 그 한편, 정점 노드 「7」에서 나타나는 부분 노드의 노드수는 「5」가 되기 때문이다. 물론, 소트 순서는 이것에 한정되는 일 없이 집계에 관해서 설명한 측도를 채용해도 된다.
토폴로지 소트의 처리는 개략적으로는,
제 1 배열에 의해 특정되는 트리의 부분 트리의 순서를 소트하는 방법으로서,
부분 트리의 정점 노드를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 제 1 배열 중의 부분을 특정하는 스텝과,
제 1 배열 중의 부분의 각각에 대해서 부분 트리의 정점 노드가 루트 노드가 되도록 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 기억 장치 중에 생성하는 스텝과,
생성된 제 2 배열을 참조하여 설정된 평가 기준에 따라 정점 노드의 노드 식별자의 순서를 교체하는 스텝을 구비한다.
도 45는 본 실시형태에 의한 토폴로지 소트의 일례를 나타내는 도면이다. 도 45에 나타내는 바와 같이, 이 예에 관련되는 토폴로지 소트 처리는 제 1 토폴로지 집계 처리와 유사하며, 도 45의 스텝4501~4504는 도 41의 스텝4101~4104와 동일하다. 따라서, 도 46A에 나타내는 예(도 43A의 것과 동일하다)에서는 정점 노드 리스트 중의 모든 정점 노드에 대해서 스텝4501~4503의 처리를 실행하면 정점 노드 「2」, 「7」 및 「8」에 대해서 각각 도 46B~D에 나타내는 표준 형식의 배열을 얻을 수 있다. 도 44B에 나타내는 소트의 대소 비교 기준(노드수로 소트)에 따르면, 도 46E에 나타내는 바와 같이, 정점 노드의 순서가 교체된 정점 노드 리스트를 얻는 것이 가능해진다.
[정보 처리 장치]
도 47은 본 발명의 실시형태에 의한 트리형 데이터 구조를 구축하여 정점 노드 리스트를 생성하고, 트리형 데이터 구조를 구축하는 여러 가지의 배열을 생성하여, 이것을 메모리에 기억하고, 또한, 토폴로지 검색, 토폴로지 집계 및 토폴로지 소트의 처리를 실행하는 정보 처리 장치의 예를 나타내는 기능 블록 다이어그램이다. 이 정보 처리 장치(4700)은 실제로는, 도 1에 나타내는 컴퓨터 시스템(10)에 필요한 프로그램을 인스톨함으로써 실현된다.
도 47에 나타내는 바와 같이, 정보 처리 장치(4700)은 트리형 데이터 구조를 표현하는 데이터, 정점 노드 리스트를 포함하는 여러 가지의 배열을 기억하는 기억부(4701)과, 루트 노드를 포함하는 노드에 고유의 노드 식별자를 부여하여 노드 식별자를 기억부 3501에 격납하는 노드 정의부(4702)와, 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 비루트 노드의 각각의 부모 노드에 부여 된 노드 식별자를 관련지어 그 관련지어 나타내는 배열인 C-P배열을 기억부(4701)에 격납하는 부모 자식 관계 정의부(4703)와, 기억부(4701)에 격납된 노드 식별자 및 C-P배열에 의거하여 부분 트리를 표현하는 표준화된 부분 배열을 생성하는 표준화 처리부(4704)와, C-P배열이나 부분 배열을 오름차순 형식의 집계 배열로 변환하는 오름차순 형식 처리부(4705)와, 토폴로지 검색 처리를 실행하는 토폴로지 검색 처리부(4706)와, 토폴로지 집계 처리를 실행하는 토폴로지 집계 처리부(4707)와, 토폴로지 소트 처리를 실행하는 토폴로지 소트 처리부(4708)를 가지고 있다. 표준화 처리부(4704), 오름차순 형식 처리부(4705), 토폴로지 검색 처리부(4706), 토폴로지 집계 처리부(4707) 및 토폴로지 소트 처리부(4708)에 의한 처리 결과나 생성된 배열은 기억부(4701)에 기억된다.
바람직하게는 노드 정의부(4702)는 노드 식별자로서 수치를 사용하고, 보다 바람직하게는 노드 식별자로서 연속되는 정수를 사용한다. 또한, 부모 자식 관계 정의부(4703)는 비루트 노드의 각각에 부여된 노드 식별자와, 관련지어진 부모 노드에 부여된 노드 식별자의 세트의 배열을 기억부(4701)에 격납한다.
또한, 입력 장치(도 1의 부호24 참조)로부터의 지시 등에 의해 노드가 지정되면 정점 노드 리스트 생성부(4704)는 지정된 노드의 노드 식별자를 정점 노드 리스트 중에 격납한다. 또한, 입력 장치로부터의 지시에 따라 토폴로지 검색 처리부(4706), 토폴로지 집계 처리부(4707), 토폴로지 소트 처리부(4708)는 전술한 바와 같은 토폴로지 검색 처리, 토폴로지 집계 처리 및 토폴로지 소트 처리를 각각 실행한다. 그 때에, 필요에 따라 표준화 처리부(4704) 및 오름차순 형식 처리 부(4705)도 처리를 실행하여 소정의 배열을 생성하고, 그 배열을 기억부(4701)에 기억한다.
본 발명은 이상의 실시형태에 한정되는 일 없이, 특허 청구범위에 기재된 발명의 범위내에서 여러 가지의 변경이 가능하며, 그들도 본 발명의 범위내에 포함되는 것임은 말할 필요도 없다.

Claims (32)

  1. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    각각이 특정 노드 및 그 자손 노드를 포함하는 1 이상의 노드군인 부분 트리를 표시하기 위해서, 그 특정 노드를 정점 노드로 하여 그 노드 식별자를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법.
  2. 제 1 항에 있어서,
    상기 제 1 배열 중의 부분을 특정하는 스텝이, 정점 노드의 노드 식별자가 나타내는 상기 제 1 배열 중의 위치로부터 노드 식별자가 증대하는 방향으로 상기 제 1 배열 중의 값이 상기 정점 노드 식별자가 나타내는 상기 제 1 배열 중의 값보다 큰 범위를 특정하는 스텝을 포함하는 것을 특징으로 하는 배열의 생성 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 표준 형식의 제 2 배열을 생성하는 스텝이, 상기 제 1 배열의 부분과 동일 사이즈의 배열의 영역으로서, 그 격납 위치 번호로서, 상기 루트 노드의 노드 식별자를 초기값으로 하는 연속되는 정수가 주어진 영역을 상기 기억 장치 중에 확보하는 스텝과,
    상기 제 1 배열의 부분에 격납된 값에서, 정점 노드의 노드 식별자를 뺀 값을 각각 상기 영역에 격납하는 스텝을 포함하는 것을 특징으로 하는 배열의 생성 방법.
  4. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비 한 컴퓨터에 있어서,
    상기 제 1 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하는 방법으로서,
    검색 키가 되는 트리를 표현하는 검색 키 배열로서 노드간의 부모 자식 관계를 표현하기 위한 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 기억 장치 중에 생성하는 스텝과,
    상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 제 1 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
    상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 검색 방법.
  5. 제 4 항에 있어서,
    상기 노드 식별자 모두가 일치한 경우에 그 제 1 배열 중의 부분 말미의 다음의 노드 식별자를 참조하여 그 노드 식별자에 대응하는 노드가 상기 정점 노드에 의해 특정되는 부분 트리에 포함되는지 여부를 판단하는 스텝과,
    상기 부분 트리에 포함되지 않는 경우에 상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노 드 리스트를 상기 기억 장치에 생성하는 스텝을 구비한 것을 특징으로 하는 검색 방법.
  6. 제 4 항 또는 제 5 항에 있어서,
    상기 노드가, 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
    상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
    모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 것 같은, 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 더 구비한 것을 특징으로 하는 검색 방법.
  7. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    제 1 배열에 의해 특정되는 트리의 부분 트리를 집계하는 방법으로서,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
    상기 생성된 제 2 배열을 참조하여 제 2 배열의 종별마다, 생성된 배열수를 카운트하고 배열수를 상기 제 2 배열의 종별과 관련지어, 상기 기억 장치 중에 기억하는 스텝을 구비한 것을 특징으로 하는 집계 방법.
  8. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    상기 제 1 배열에 의해 특정되는 트리의 부분 트리의 순서를 소트하는 방법으로서,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
    상기 생성된 제 2 배열을 참조하여, 설정된 평가 기준에 따라, 상기 정점 노드의 노드 식별자의 순서를 교체하는 스텝을 구비한 것을 특징으로 하는 소트 방법.
  9. 트리형 데이터 구조를 기억 장치 중에 구축하는 방법으로서,
    동세대보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 노드 식별자로서, 고유의 연속되는 정수를 부여하는 스텝과,
    자식 노드를 갖는 노드에 대해서, 각각의 노드 식별자와, 그 자식 노드를 갖 는 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 트리형 데이터 구조의 구축 방법.
  10. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    상기 제 1 배열 중의 노드 식별자와 상기 제 1 배열에 있어서 노드 식별자가 출현하는 수를 나타내는 출현수의 세트를 상기 제 1 배열 중의 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법.
  11. 청구항 9에 기재된 집계 배열에 의거하여 노드간의 부모 자식 관계를 표현하기 위한, 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열을 생성하는 방법으로서,
    상기 집계 배열 중의 출현수에 의거하여 노드 식별자를 격납 위치 번호로 하 는 제 1 배열을 위한 영역을 상기 기억 장치 중에 확보하는 스텝과,
    상기 집계 배열 및 제 1 배열의 각각에 있어서, 제 1 포인터 및 제 2 포인터를 초기 위치에 배치하는 스텝과,
    상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하는 경우에 상기 제 1 포인터가 나타내는 노드 식별자를, 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 1 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 1 포인터 및 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝과,
    상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하지 않는 경우에 상기 집계 배열에 있어서 상기 제 1 포인터에 초기적으로 배치되는 제 3 포인터를 그 격납 위치 번호를 빼도록 이동시키고, 처음에, 집계 배열에 있어서 그 출현수가 「0」이 되지 않는 위치를 특정하여 그 제 3 포인터가 나타내는 노드 식별자를, 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 3 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법.
  12. 청구항 9에 기재된 집계 배열로부터 정점 노드 및 그 자손 노드를 포함하는 부분 트리를 표시하는 부분 배열을 생성하는 방법으로서,
    상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 그 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
    상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여, 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
    상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 상기 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝을 구비한 것을 특징으로 하는 배열의 생성 방법.
  13. 제 12 항에 있어서,
    상기 부분 배열에 있어서 상기 노드 식별자로부터 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝을 더 구비한 것을 특징으로 하는 배열의 생성 방법.
  14. 청구항 9에 기재된 집계 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하는 방법으로서,
    상기 검색 키가 되는 트리를 표현하는 검색 키 배열로서 자식 노드를 갖는 노드에 대해서, 각각의 노드 식별자와 그 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝과,
    상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 집계 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
    상기 비교에 의해 모두가 일치한 집계 배열의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 격납하는 스텝을 구비한 것을 특징으로 하는 검색 방법.
  15. 제 14 항에 있어서,
    상기 노드가, 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
    상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와, 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
    모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 것 같은, 상기 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 더 구비한 것을 특징으로 하는 검색 방법.
  16. 청구항 9에 기재된 집계 배열에 의거하여 그 집계 배열에 의해 특정되는 트리의 부분 트리를 집계하는 방법으로서,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 그 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
    상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여, 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
    상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝과,
    상기 부분 배열에 있어서, 그 노드 식별자에서 선두의 노드 식별자를 빼, 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝과,
    상기 생성된 표준 형식의 부분 배열을 참조하여, 상기 표준 형식의 부분 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 종별과 관련지어, 상기 기억 장치 중에 기억하는 스텝을 구비한 것을 특징으로 하는 집계 방법.
  17. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고 유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서, 부분 트리를 표시하는 배열을 생성하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    각각이 특정 노드 및 그 자손 노드를 포함하는 1 이상의 노드군인 부분 트리를 표시하기 위해서, 그 특정 노드를 정점 노드로 하여 그 노드 식별자를 격납한 정점 노드 리스트를 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  18. 제 17 항에 있어서,
    상기 제 1 배열 중의 부분을 특정하는 스텝에 있어서,
    정점 노드의 노드 식별자가 나타내는 상기 제 1 배열 중의 위치로부터 노드 식별자가 증대하는 방향으로 상기 제 1 배열 중의 값이 상기 정점 노드 식별자가 나타내는 상기 제 1 배열 중의 값보다 큰 범위를 특정하는 스텝을 상기 컴퓨터에 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  19. 제 17 항 또는 제 18 항에 있어서,
    상기 표준 형식의 제 2 배열을 생성하는 스텝에 있어서,
    상기 제 1 배열의 부분과 동일 사이즈의 배열의 영역으로서, 그 격납 위치 번호로서, 상기 루트 노드의 노드 식별자를 초기값으로 하는 연속되는 정수가 주어진 영역을 상기 기억 장치 중에 확보하는 스텝과,
    상기 제 1 배열의 부분에 격납된 값에서 정점 노드의 노드 식별자를 뺀 값을 각각 상기 영역에 격납하는 스텝을 상기 컴퓨터에 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  20. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비 한 컴퓨터에 있어서,
    상기 제 1 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    검색 키가 되는 트리를 표현하는 검색 키 배열로서, 노드간의 부모 자식 관계를 표현하기 위한, 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 배열을 기억 장치 중에 생성하는 스텝과,
    상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 제 1 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
    상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  21. 제 20 항에 있어서,
    상기 컴퓨터에,
    상기 노드 식별자 모두가 일치한 경우에 그 배열의 부분 말미의 다음의 노드 식별자를 참조하여 그 노드 식별자에 대응하는 노드가 상기 정점 노드에 의해 특정 되는 부분 트리에 포함되는지 여부를 판단하는 스텝과,
    상기 부분 트리에 포함되지 않는 경우에 상기 비교에 의해 모두가 일치한 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  22. 제 20 항 또는 제 21 항에 있어서,
    상기 노드가, 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
    상기 컴퓨터에,
    상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
    모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 것 같은, 상기 제 1 배열 중의 부분의 노드 식별자를 포함하는 검색 결과를 표시하는 정점 노드 리스트를 상기 기억 장치에 생성하는 스텝을 더 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  23. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    제 1 배열에 의해 특정되는 트리의 부분 트리를 집계하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가, 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
    상기 생성된 제 2 배열을 참조하여 제 2 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 제 2 배열의 종별과 관련지어, 상기 기억 장치 중에 기억하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  24. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서,
    상기 제 1 배열에 의해 특정되는 트리의 부분 트리의 순서를 소트하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 정점 노드 리스트에 격납된 노드 식별자에 대응하는 정점 노드의 각각에 의해 특정되는 부분 트리를 표시하는 상기 제 1 배열 중의 부분을 특정하는 스텝과,
    상기 제 1 배열 중의 부분의 각각에 대해서 상기 부분 트리의 정점 노드가 루트 노드가 되도록 상기 노드간의 부모 자식 관계가 정점 노드 이외의 노드인 비정점 노드의 각각에 부여된 노드 식별자에 대응하는 비정점 노드의 각각에 관련지어진 부모 노드의 노드 식별자에 의해 표현된 표준 형식의 제 2 배열을 상기 기억 장치 중에 생성하는 스텝과,
    상기 생성된 제 2 배열을 참조하여, 설정된 평가 기준에 따라 상기 정점 노 드의 노드 식별자의 순서를 교체하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  25. 트리형 데이터 구조를 컴퓨터의 기억 장치 중에 구축하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    동세대보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 노드 식별자로서 고유의 연속되는 정수를 부여하는 스텝과,
    자식 노드를 갖는 노드에 대하여 각각의 노드 식별자와, 그 자식 노드를 갖는 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  26. 동세대의 노드보다도 자식 노드를 우선하여 루트 노드를 포함하는 노드에 고유의 연속되는 정수가 되는 노드 식별자가 부여되고,
    노드간의 부모 자식 관계가 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열에 의해 표현된 트리형 데이터 구조의 데이터를 구비한 컴퓨터에 있어서, 상기 트리형 데이터 구조를 그 컴퓨터의 기억 장치 중에 구축하기 위해서 상기 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 제 1 배열 중의 노드 식별자와 그 값이 출현하는 수인 출현수의 세트를 상기 제 1 배열 중의 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 생성하고, 그 집계 배열을 상기 기억 장치에 격납하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  27. 청구항 25에 기재된 집계 배열에 의거하여 노드간의 부모 자식 관계를 표현하는 루트 노드 이외의 노드인 비루트 노드의 각각에 부여된 노드 식별자에 대응하는 비루트 노드의 각각에 관련지어진 부모 노드의 노드 식별자를 가지는 제 1 배열을 생성하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 집계 배열 중의 출현수에 의거하여 노드 식별자를 격납 위치 번호로 하는 제 1 배열을 위한 영역을 상기 기억 장치 중에 확보하는 스텝과,
    상기 집계 배열 및 제 1 배열의 각각에 있어서, 제 1 포인터 및 제 2 포인터를 초기 위치에 배치하는 스텝과,
    상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하는 경우에 상기 제 1 포인터가 나타내는 노드 식별자를, 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 1 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 1 포인터 및 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝과,
    상기 집계 배열 중 상기 제 1 포인터가 나타내는 노드 식별자와 상기 제 2 포인터가 나타내는 격납 위치 번호에서 「1」을 뺀 값이 일치하지 않는 경우에 상기 집계 배열에 있어서 상기 제 1 포인터에 초기적으로 배치되는 제 3 포인터를 그 격납 위치 번호를 빼도록 이동시키고, 처음에, 집계 배열에 있어서 그 출현수가 「0」이 되지 않는 위치를 특정하여 그 제 3 포인터가 나타내는 노드 식별자를, 제 1 배열에 있어서 상기 제 2 포인터가 나타내는 격납 위치 번호에 대응하는 값으로서 격납함과 아울러, 집계 배열 중 상기 제 3 포인터가 나타내는 출현수를 「1」만 빼고, 또한, 제 2 포인터를 그 격납 위치 번호가 증대하도록 이동시키는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  28. 청구항 25에 기재된 집계 배열로부터 정점 노드 및 그 자손 노드를 포함하는 부분 트리를 표시하는 부분 배열을 생성하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 그 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
    상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여, 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
    상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 상기 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  29. 제 28 항에 있어서,
    상기 컴퓨터에,
    상기 부분 배열에 있어서 상기 노드 식별자에서 선두의 노드 식별자를 빼서 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝을 더 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  30. 청구항 25에 기재된 집계 배열에 의해 특정되는 트리 중 검색 키가 되는 트리와 동일한 토폴로지를 가지는 부분 트리를 검색하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로서,
    상기 컴퓨터에,
    상기 검색 키가 되는 트리를 표현하는 검색 키 배열로서, 자식 노드를 갖는 노드에 대해서, 각각의 노드 식별자와, 그 노드를 부모 노드로 하는 자식 노드의 출현수의 세트를 상기 노드 식별자의 순서로 배치한 오름차순 형식의 집계 배열을 기억 장치 중에 생성하는 스텝과,
    상기 검색 키 배열 중의 노드 식별자에 오프셋을 부여하고, 상기 오프셋이 부여된 노드 식별자와 상기 오프셋에 따른 상기 집계 배열 중의 부분에 포함되는 대응하는 노드 식별자를 비교하는 스텝과,
    상기 비교에 의해 모두가 일치한 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치 중에 생성하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  31. 제 30 항에 있어서,
    상기 노드가 데이터를 표시하는 적어도 하나의 실체 정보가 관련지어지고,
    상기 컴퓨터에,
    상기 비교에 의해 모두가 일치한 부분의 노드 식별자에 의해 특정되는 노드에 관련지어진 실체 정보와 검색 키 배열의 노드 식별자에 의해 특정된 노드에 관련지어진 실체 정보를 각각 비교하는 스텝과,
    모든 실체 정보가 상기 키 배열에 관해서 대응하는 실체 정보와 일치한 것 같은, 상기 집계 배열 중의 부분의 노드 식별자와 그 출현수를 포함하는 검색 결과를 표시하는 집계 배열을 상기 기억 장치에 생성하는 스텝을 더 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
  32. 청구항 25에 기재된 집계 배열에 의거하여 그 집계 배열에 의해 특정되는 트리의 부분 트리를 집계하기 위해서 컴퓨터에 의해 판독가능한 컴퓨터 프로그램으로 서,
    상기 컴퓨터에,
    상기 부분 트리의 정점 노드를 격납한 정점 노드 리스트를 상기 기억 장치 중에 생성하는 스텝과,
    상기 집계 배열에 있어서 상기 정점 노드의 노드 식별자와, 그 노드 식별자에 관련지어진 출현수에 의거하여 적어도 자손 노드가 되는 노드의 노드 식별자를 초기적으로 산출하는 스텝과,
    상기 집계 배열에 있어서 격납 위치 번호가 증대하도록 노드 식별자를 참조하여 상기 노드 식별자에 대응하는 노드가 상기 정점 노드의 자손 노드가 되는지 여부를 판단함과 아울러, 그 집계 배열의 노드 식별자에 관련지어진 출현수를 참조하여, 상기 자손 노드의 노드 식별자를 갱신하는 스텝과,
    상기 정점 노드의 자손 노드가 된다고 판단된 노드의 노드 식별자와 관련지어진 출현수의 세트를 부분 배열로서 기억 장치 중에 생성하는 스텝과,
    상기 부분 배열에 있어서, 그 노드 식별자에서, 선두의 노드 식별자를 빼, 표준 형식의 부분 배열을 기억 장치 중에 생성하는 스텝과,
    상기 생성된 표준 형식의 부분 배열을 참조하여, 상기 표준 형식의 부분 배열의 종별마다 생성된 배열수를 카운트하고, 배열수를 상기 종별과 관련지어, 상기 기억 장치 중에 기억하는 스텝을 실행시키는 것을 특징으로 하는 컴퓨터 프로그램.
KR1020077017189A 2005-01-25 2006-01-23 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램 KR20070101288A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2005-00016373 2005-01-25
JP2005016373 2005-01-25

Publications (1)

Publication Number Publication Date
KR20070101288A true KR20070101288A (ko) 2007-10-16

Family

ID=36740299

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077017189A KR20070101288A (ko) 2005-01-25 2006-01-23 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램

Country Status (7)

Country Link
US (1) US7937399B2 (ko)
EP (1) EP1857945A1 (ko)
JP (1) JP4653157B2 (ko)
KR (1) KR20070101288A (ko)
CN (1) CN101128825A (ko)
CA (1) CA2593118A1 (ko)
WO (1) WO2006080268A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188202A1 (en) * 2020-02-26 2022-06-16 Huawei Technologies Co., Ltd. Device and a Method for Indexing Snapshots of Multiple File Systems

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943045B2 (en) * 2009-01-28 2015-01-27 Oracle International Corporation Mechanisms for efficient autocompletion in XML search applications
WO2010106681A1 (ja) * 2009-03-19 2010-09-23 富士通株式会社 データベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法
EP2256660B1 (en) * 2009-05-28 2015-08-12 Sap Se Computer-implemented method, computer system, and computer program product for optimization of evaluation of a policy specification
US8370394B2 (en) * 2009-07-17 2013-02-05 International Business Machines Corporation Parallel processing of data organized in a tree structure
CN102402545B (zh) * 2010-09-14 2015-09-02 腾讯科技(深圳)有限公司 一种存储数据的方法及装置
US8713056B1 (en) 2011-03-30 2014-04-29 Open Text S.A. System, method and computer program product for efficient caching of hierarchical items
CN102681975B (zh) * 2012-05-10 2013-06-19 江苏省电力公司电力科学研究院 一种基于链表的pqdif文件树形结构比较方法
US10073857B2 (en) 2012-05-15 2018-09-11 Nec Corporation Distributed data management device and distributed data operation device
CN103020273B (zh) * 2012-12-27 2016-08-17 福建榕基软件股份有限公司 树形结构数据的展示及相关索引表生成的方法与装置
US9465523B2 (en) * 2013-06-27 2016-10-11 Sap Se Visual exploration of multidimensional data
US9495418B2 (en) 2013-08-07 2016-11-15 International Business Machines Corporation Scalable acceleration of database query operations
US9251218B2 (en) 2013-08-07 2016-02-02 International Business Machines Corporation Tunable hardware sort engine for performing composite sorting algorithms
US9830354B2 (en) 2013-08-07 2017-11-28 International Business Machines Corporation Accelerating multiple query processing operations
US9619499B2 (en) * 2013-08-07 2017-04-11 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm
WO2016067471A1 (ja) * 2014-10-31 2016-05-06 株式会社東芝 通信制御装置、通信制御方法およびプログラム
US10310813B2 (en) 2014-12-29 2019-06-04 International Business Machines Corporation Hardware implementation of a tournament tree sort algorithm using an external memory
US9323644B1 (en) 2015-09-30 2016-04-26 Semmle Limited Query-based software dependency analysis
GB201810392D0 (en) * 2015-11-25 2018-08-08 Teamifier Inc Methods for the augmentation, exploration, and maintenance of project hierarchies
CN105930514B (zh) * 2016-05-16 2019-05-24 珠海格力电器股份有限公司 配套关系检索方法和系统
CN110889022A (zh) * 2018-08-17 2020-03-17 迈普通信技术股份有限公司 数据查询方法、装置及电子设备
US11734243B2 (en) * 2021-11-04 2023-08-22 Google Llc Sparse mapping of hierarchical subset

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS648448A (en) * 1987-07-01 1989-01-12 Hitachi Ltd Expression system for tree structure data
JP2789618B2 (ja) * 1988-11-30 1998-08-20 富士ゼロックス株式会社 木構造図作成システム
JPH10240741A (ja) * 1997-02-28 1998-09-11 Nippon Telegr & Teleph Corp <Ntt> 木構造型データの管理方法
US6301583B1 (en) * 1997-05-16 2001-10-09 Paul Zellweger Method and apparatus for generating data files for an applet-based content menu using an open hierarchical data structure
US6029170A (en) * 1997-11-25 2000-02-22 International Business Machines Corporation Hybrid tree array data structure and method
US6397214B1 (en) * 1998-11-03 2002-05-28 Computer Associates Think, Inc. Method and apparatus for instantiating records with missing data
US6381605B1 (en) * 1999-05-29 2002-04-30 Oracle Corporation Heirarchical indexing of multi-attribute data by sorting, dividing and storing subsets
JP2000348038A (ja) * 1999-06-02 2000-12-15 Fujitsu Ltd 半構造データベースのためのデータ格納装置および方法
JP2001167087A (ja) * 1999-12-14 2001-06-22 Fujitsu Ltd 構造化文書検索装置,構造化文書検索方法,構造化文書検索用プログラム記録媒体および構造化文書検索用インデックス作成方法
US6981040B1 (en) * 1999-12-28 2005-12-27 Utopy, Inc. Automatic, personalized online information and product services
JP2001195406A (ja) 2000-01-06 2001-07-19 Media Fusion Co Ltd データベース管理システム
JP3513562B2 (ja) * 2000-04-20 2004-03-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 形状解析システム、3次元形状モデルの差分検出システム、類似形状検索システム、形状解析方法及び記憶媒体
JP4165086B2 (ja) 2002-02-25 2008-10-15 日本電気株式会社 Xmlデータのrdbへの格納装置及び方法、rdbからのxmlデータの取得装置及び方法並びにプログラム
JP4537391B2 (ja) * 2004-03-16 2010-09-01 株式会社ターボデータラボラトリー ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
WO2005119516A1 (ja) * 2004-06-03 2005-12-15 Turbo Data Laboratories Inc. 配列の生成方法、情報処理装置、及び、プログラム
WO2006001241A1 (ja) * 2004-06-23 2006-01-05 Turbo Data Laboratories Inc. ノードを挿入する方法、装置及びプログラム
US20060053122A1 (en) * 2004-09-09 2006-03-09 Korn Philip R Method for matching XML twigs using index structures and relational query processors
JP4712718B2 (ja) * 2004-10-01 2011-06-29 株式会社ターボデータラボラトリー 配列の生成方法、及び、配列生成プログラム
JP4886693B2 (ja) * 2005-08-12 2012-02-29 株式会社ターボデータラボラトリー 情報処理方法、情報処理装置および情報処理プログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220188202A1 (en) * 2020-02-26 2022-06-16 Huawei Technologies Co., Ltd. Device and a Method for Indexing Snapshots of Multiple File Systems
US11989103B2 (en) * 2020-02-26 2024-05-21 Huawei Technologies Co., Ltd. Device and a method for indexing snapshots of multiple file systems

Also Published As

Publication number Publication date
JP4653157B2 (ja) 2011-03-16
US7937399B2 (en) 2011-05-03
CA2593118A1 (en) 2006-08-03
WO2006080268A9 (ja) 2007-06-14
CN101128825A (zh) 2008-02-20
US20090106194A1 (en) 2009-04-23
EP1857945A1 (en) 2007-11-21
WO2006080268A1 (ja) 2006-08-03
JPWO2006080268A1 (ja) 2008-08-07

Similar Documents

Publication Publication Date Title
KR20070101288A (ko) 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램
KR101095377B1 (ko) 배열의 생성방법, 정보처리장치, 및, 프로그램
JP4796970B2 (ja) ツリーデータの検索・集計・ソート方法及びプログラム
JP4537391B2 (ja) ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
KR101254544B1 (ko) 배열의 생성방법 및 이를 실행하는 컴퓨터 프로그램을 수록한 기록 매체
US7080067B2 (en) Apparatus, method, and program for retrieving structured documents
JP5407169B2 (ja) クラスタリングプログラム、検索プログラム、クラスタリング方法、検索方法、クラスタリング装置および検索装置
JP5262864B2 (ja) 記憶媒体、検索方法および検索装置
CN115982390B (zh) 一种产业链构建和迭代扩充开发方法
Wellenzohn et al. Dynamic interleaving of content and structure for robust indexing of semi-structured hierarchical data (extended version)
KR101052220B1 (ko) 검색어를 포함하는 스카이라인 질의 수행장치 및 방법
JP3842574B2 (ja) 情報抽出方法および構造化文書管理装置およびプログラム
JP5434500B2 (ja) 木構造処理装置及びプログラム
JP2006018584A (ja) 構造化文書管理システム、値索引生成方法及びプログラム
JP5191441B2 (ja) インデクス構築方法及び装置及び情報検索方法及び装置及びプログラム

Legal Events

Date Code Title Description
A201 Request for examination
E601 Decision to refuse application