排列的生成方法以及排列生成程序
技术领域
本发明涉及表示树型数据构造的排列的生成方法,特别是涉及表现树型数据构造,构筑在存储装置上的方法。另外,本发明涉及实施这种方法的信息处理装置。进而,本发明涉及用于执行这种方法的程序。
背景技术
数据库在各种用途中使用,而在中规模到大规模的***中,使用能够排除逻辑矛盾的关系型数据库(RDB)成为主流。例如,RDB在飞机的坐席预订等***中被利用。这种情况下,通过指定关键字项目,能够迅速地检索(大多情况下是一件)目标,或者能够进行预订的确定、清除或者变更等。另外,由于各航班的坐席数充其量是几百个,因此还能够寻求特定航班的空坐席数。
已知这样的RDB适合于表形式数据的处理,但并不适合于树形式数据的处理(例如,参照非专利文献1。)。
进而,在应用中,存在与表形式的表现相比较树形式的表现更适合的情况。特别是,近年来,作为内部网或者互联网的应用的数据标准,正在普及采用树型数据构造的XML(关于XML的详细情况例如参照非专利文献2。)。
然而,对树型数据构造的处理,例如,对树形式数据的检索一般效率非常差。导致该效率差的第1理由在于由于数据分散存在于各处的节点,因此难以立即特定数据应该存在的位置。在RDB中,例如,“年龄”这样数据只保存在某个表的“年龄”这样的项目中。然而,在树型数据构造中,由于保持“年龄”这样数据的节点分散存在于各处,因此一般如果不检查树型数据构造的整体,就不能检索该数据。
效率差的第2理由在于为了表现检索的结果而花费时间这一点。如果要表现在检索中击中的节点群,还必须屡次表现与其节点的子孙相当的节点,由于与RDBMS不同,数据构造是非定型的,因此为了表现子孙节点需要花费时间。
因此,为了发挥作为数据库的主流的RDB的优点,当前提出了在把树型数据构造做成数据库时,把树形式数据做成RDB的方法(例如,参照专利文献1。)。在RDB中,数据被分解保持在表中。为此,为了把实际的树形式数据做成RDB,需要把树形式数据塞进到表中。然而,为了处理各种树型数据构造,必须对每种构造单独地把数据塞进表中来进行***设计。从而,基于RDB的***构筑将是非常麻烦的作业。
对此,还提出了把树形式数据特别是XML数据以原来的形式构成数据库的方法。在树型数据构造的情况下,由于能够在一个节点悬挂子孙节点,进行多样的表现,因此能够大幅度减少***设计的手续。从而,以能够处理XML这样的树构造的技术为核心,处理树构造数据的需求正在高涨。
把XML数据以原有的形式构成数据库的方法的一个例子的方法是取出记入在树构造中的数据的拷贝,例如,如果是“年龄”这样的项目,则分开地保持“年龄”的检索用索引数据(例如,参照专利文献2。)。由此,在充分地灵活运用在数据自身中能够添加属性这样的XML数据优点的同时,能够原样对使用标签表现出的各项目的关系构造进行存储。
专利文献1:特开2003-248615号公报
专利文献2:特开2001-195406号公报
非专利文献1:セツク株式会社“Karearea White Paper”,[online],[平成16年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岁”这样的“年龄”的树进行抽取)中利用。
这种现有技术的根本的问题点在于由于仅着眼一个个数据,通过用指针把存储了数据的节点之间连接起来,来表现树型数据构造,因此不能够有效地跟踪数据之间的关系,例如,父子、祖先、子孙、兄弟(シブリング)、代等的关系。换句话讲,由于指针的值不是恒定的,因此仅能够在表示数据的保存地址这样的用途中使用,不能够直接表现节点之间的关系。
因此,本发明的目的在于提供与能够有效地跟踪树型数据构造的数据之间的关系的树型数据构造的表现以及构筑有关的方法。
进而,本发明的目的在于提供与能够有效地跟踪树型数据构造的数据之间的关系的树型数据构造的构筑有关的信息处理装置。
进而,本发明的目的在于提供与能够有效地跟踪树型数据构造的数据之间的关系的树型数据构造的表现以及构筑有关的程序。
另外,在处理树型数据构造时,还产生移动成为追寻定位路径的基准点、成为顶点的节点(顶点节点)的需要。因此,本发明的目的还特别在于提供使树型数据构造中的顶点节点移动的方法、信息处理装置以及程序。
本发明的目的根据以下的排列生成方法来实现,该排列生成方法的特征是,在具备了由第1排列所表现的树型数据构造的数据的计算机中,具备以下步骤:
为了分别表现包括特定的节点以及其子孙节点的、1个以上的节点群,把该特定的节点作为顶点节点,设置保存了该节点识别符的第2排列的步骤;
参照上述第1排列,使在上述第2排列中保存了节点识别符的顶点节点的每一个移动到
a)用弧线直接连接该顶点节点,而且该弧线从顶点节点延伸的子节点,
b)用弧线直接连接该顶点节点,而且该弧线从那里延伸到顶点节点的父节点,
c)与该顶点节点同代的节点,且是从该顶点节点的父节点对于顶点节点连接弧线以前,连接有弧线的兄节点,
d)与该顶点节点同代的节点,且是从该顶点节点的父节点对于顶点节点连接了弧线以后,连接有弧线的弟节点
中的某一个,生成保存了移动后的新的顶点节点的节点识别符的第3排列的步骤,
其中上述第1排列是向节点中提供固有的节点识别符,且节点之间的父子关系是由向作为路由节点以外的节点的、非路由节点的每一个上提供的节点识别符和与非路由节点的每一个相关联起来的父节点的节点识别符的组构成。
在本发明中,在新的第3排列中,在父节点、子节点、兄节点或者弟节点的某一个上保存移动后的顶点节点的识别符。由此,能够恰当地变更探索定位路径的基准点,能够容易地进行树型数据构造的数据的跟踪等。
在优选的实施方式中,使同代的节点比子节点优先,向包含路由节点的节点提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到子节点,而生成上述第3排列的步骤具有:
特定上述第1排列中保存了顶点节点的节点识别符的保存位置的步骤;以及
把移动后的顶点节点的节点识别符决定为与该保存位置相对应的节点识别符的步骤。
另外,在优选实施方式中,使同代的节点比子节点优先,对包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数形成上述第1排列,
为了使上述顶点节点的每一个移动到父节点,生成上述第3排列的步骤具有:
特定上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的节点识别符的步骤;
把移动后的顶点节点的节点识别符决定为保存到上述相对应的位置的节点识别符的步骤。
在其它的实施方式中,使同代的节点比子节点优先,向包括路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到兄节点,生成上述第3排列的步骤具有:
特定上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的第1节点识别符的步骤;
特定在上述第1排列中保存在仅比上述顶点节点识别符相对应的位置的值小1的值的保存位置上的第2节点识别符的步骤;
在上述第1节点识别符与上述第2节点识别符一致的情况下,把上述移动后的顶点节点识别符决定为与上述第2节点识别符的保存位置相对应的节点识别符的步骤。
进而,在其它的实施方式中,使同代的节点比子节点优先,对包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到弟节点,生成上述第3排列的步骤具有:
特定在上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的第1节点识别符的步骤;
特定在上述第1排列中保存在仅比上述顶点节点识别符相对应的位置的值大1的值的保存位置上的第3节点识别符的步骤;
在上述第1节点识别符与第3节点识别符一致的情况下,把上述移动后的顶点节点识别符决定为与上述第3节点识别符的保存位置相对应的节点识别符的步骤。
进而,在其它的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到子节点,生成上述第3排列的步骤具有:
特定在上述第1排列中保存了顶点节点的节点识别符的保存位置的步骤;
把移动后的顶点节点的节点识别符决定为与该保存位置相对应的节点识别符的步骤。
在其它的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到父节点,生成上述第3排列的步骤具有:
特定在上述第1排列中保存在与顶点节点的节点识别符相对应的位置的节点识别符的步骤;
把移动后的顶点节点的节点识别符决定为保存在上述相对应的位置的节点识别符的步骤。
另外,在其它的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到兄节点,生成上述第3排列的步骤具有:
特定在上述第1排列中保存在顶点节点的节点识别符的保存位置上的第1节点识别符的步骤;
检索在上述第1排列中保存在比顶点节点的节点识别符的保存位置的值小的值的保存位置上、并且与该第1节点识别符相同的第4节点识别符的步骤;
特定上述第4节点识别符的保存位置中的最大保存位置的步骤;
把上述移动后的顶点节点的节点识别符决定为与上述最大保存位置相对应的节点识别符的步骤。
另外,在其它的实施方式中,使子节点比同代的节点优先,向包括路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到弟节点,生成上述第3排列的步骤具有:
特定在上述第1排列中保存在顶点节点的节点识别符的保存位置的第1节点识别符的步骤;
检索在上述第1排列中保存在比顶点节点的节点识别符的保存位置的值大的值的保存位置上、并且与该第1节点识别符相等的第5节点识别符的步骤;
特定上述第5节点识别符的保存位置中的最小保存位置的步骤;
把上述移动后的顶点节点的节点识别符决定为与上述最大保存位置相对应的节点识别符的步骤。
另外,本发明的目的还通过排列生成程序实现,该排列生成程序是能够由具备了由第1排列所表现的树型数据构造的数据的计算机读取的计算机程序,且使该计算机执行以下步骤:
为了分别表现包括特定的节点以及其子孙节点的、1个以上的节点群,把该特定的节点作为顶点节点,设置保存了该节点识别符的第2排列的步骤;
参照上述第1排列,使在上述第2排列中保存了节点识别符的顶点节点的每一个移动到
a)用弧线直接连接该顶点节点,而且该弧线从顶点节点延伸的子节点,
b)用弧线直接连接该顶点节点,而且该弧线从那里延伸到顶点节点的父节点,
c)与该顶点节点同代的节点,且是从该顶点节点的父节点对于顶点节点连接弧线以前,连接有弧线的兄节点,
d)与该顶点节点同代的节点,且是从该顶点节点的父节点对于顶点节点连接了弧线以后,连接有弧线的弟节点
中的某一个,生成保存了移动后的新的顶点节点的节点识别符的第3排列的步骤,
其中上述第1排列是向节点中提供固有的节点识别符,且节点之间的父子关系是由向作为路由节点以外的节点的、非路由节点的每一个上提供的节点识别符和与非路由节点的每一个相关联起来的父节点的节点识别符的组构成。
在优选的实施方式中,使同代的节点比子节点优先,向包含路由节点的节点提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到子节点,而在生成上述第3排列的步骤上使上述计算机执行
特定上述第1排列中保存了顶点节点的节点识别符的保存位置的步骤;以及
把移动后的顶点节点的节点识别符决定为与该保存位置相对应的节点识别符的步骤。
另外,在优选的实施方式中,使同代的节点比子节点优先,对包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数形成上述第1排列,
为了使上述顶点节点的每一个移动到父节点,在生成上述第3排列的步骤上使上述计算机执行
特定上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的节点识别符的步骤;
把移动后的顶点节点的节点识别符决定为保存到上述相对应的位置的节点识别符的步骤。
在其它的实施方式中,使同代的节点比子节点优先,向包括路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到兄节点,在生成上述第3排列的步骤上使上述计算机执行
特定上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的第1节点识别符的步骤;
特定在上述第1排列中保存在仅比上述顶点节点识别符相对应的位置的值小1的值的保存位置上的第2节点识别符的步骤;
在上述第1节点识别符与上述第2节点识别符一致的情况下,把上述移动后的顶点节点识别符决定为与上述第2节点识别符的保存位置相对应的节点识别符的步骤。
进而,在其它的实施方式中,使同代的节点比子节点优先,对包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到弟节点,在生成上述第3排列的步骤上使上述计算机执行
特定在上述第1排列中保存在与顶点节点的节点识别符相对应的位置上的第1节点识别符的步骤;
特定在上述第1排列中保存在仅比上述顶点节点识别符相对应的位置的值大1的值的保存位置上的第3节点识别符的步骤;
在上述第1节点识别符与第3节点识别符一致的情况下,把上述移动后的顶点节点识别符决定为与上述第3节点识别符的保存位置相对应的节点识别符的步骤。
进而,在优选的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到子节点,在生成上述第3排列的步骤上使上述计算机执行
特定在上述第1排列中保存了顶点节点的节点识别符的保存位置的步骤;
把移动后的顶点节点的节点识别符决定为与该保存位置相对应的节点识别符的步骤。
另外,在优选的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到父节点,在生成上述第3排列的步骤上使上述计算机执行
特定在上述第1排列中保存在与顶点节点的节点识别符相对应的位置的节点识别符的步骤;
把移动后的顶点节点的节点识别符决定为保存在上述相对应的位置的节点识别符的步骤。
另外,在其它优选的实施方式中,使子节点比同代的节点优先,向包含路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到兄节点,在生成上述第3排列的步骤上使上述计算机执行
特定在上述第1排列中保存在顶点节点的节点识别符的保存位置上的第1节点识别符的步骤;
检索在上述第1排列中保存在比顶点节点的节点识别符的保存位置的值小的值的保存位置上、并且与该第1节点识别符相同的第4节点识别符的步骤;
特定上述第4节点识别符的保存位置中的最大保存位置的步骤;
把上述移动后的顶点节点的节点识别符决定为与上述最大保存位置相对应的节点识别符的步骤。
另外,在其它优选的实施方式中,使子节点比同代的节点优先,向包括路由节点的节点上提供固有的连续的整数,
按照提供给作为上述路由节点以外的节点的非路由节点的每一个上的整数的顺序,通过排列提供给上述非路由节点的每一个父节点上的整数而形成上述第1排列,
为了使上述顶点节点的每一个移动到弟节点,在生成上述第3排列的步骤上使上述计算机执行
特定在上述第1排列中保存在顶点节点的节点识别符的保存位置的第1节点识别符的步骤;
检索在上述第1排列中保存在比顶点节点的节点识别符的保存位置的值大的值的保存位置上、并且与该第1节点识别符相等的第5节点识别符的步骤;
特定上述第5节点识别符的保存位置中的最小保存位置的步骤;
把上述移动后的顶点节点的节点识别符决定为与上述最大保存位置相对应的节点识别符的步骤。
依据本发明,能够提供与可以有效地跟踪树型数据构造的数据之间的关系的树型数据构造的表现以及构筑有关的方法。
进而,依据本发明,能够提供与可以有效地跟踪树型数据构造的数据之间的关系的树型数据构造的构筑有关的信息处理装置。
进而,依据本发明,能够提供与可以有效地跟踪树型数据构造的数据之间的关系的树型数据构造的表现以及构筑有关的程序。
特别是,依据本发明,能够提供用于表现包括特定的节点及其子孙节点在内的1个以上的节点群的排列的生成以及处理该排列的方法、信息处理装置以及程序。
附图说明
图1是处理本发明实施方式的树型数据构造的计算机***的框图。
图2A、B是作为树形式数据的一个例子的POS数据的说明图,图2是视觉上表现出了该树形式数据的数据构造(即拓扑)以及数据值的例子,图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表示在顶点节点列表中特定的部分树群。
图21A表示本实施方式的顶点节点列表,图21B表示用箭头示出了顶点节点的树的例子,图21C表示当把顶点节点向相当于孩子的节点移动了时的顶点节点列表,图21D表示用箭头示出了移动了的顶点节点的树的例子。
图22A表示本实施方式的顶点节点列表,图22B表示用箭头示出了顶点节点的树的例子,图22C表示当把顶点节点向相当于父亲的节点移动了时的顶点节点列表,图22D表示用箭头示出了移动了的顶点节点的树的例子。
图23A表示本实施方式的顶点节点列表,图23B表示用箭头示出了顶点节点的树的例子,图23C表示当把顶点节点向相当于弟的节点移动了时的顶点节点列表,图23D表示用箭头示出移动了的顶点节点的树的例子。
图24是表示在把顶点节点向相当于孩子的节点移动时,在计算机***中所执行的处理的流程图。
图25B是表示树的例子的图,图25B是说明把顶点节点向相当于孩子的节点移动的处理的图。
图26是表示在把顶点节点向相当于父亲的节点移动时,在计算机***中所执行的处理的流程图。
图27A是表示树的例子的图,图27B是说明把顶点节点向相当于父亲的节点移动的处理的图。
图28是表示在把顶点节点向相当于弟的节点移动时,在计算机***中执行的处理的流程图。
图29A是表示树的例子的图,图29B是说明把顶点节点向相当于弟的节点移动的处理的图。
图30是表示在检索相当于孩子的节点时,在计算机***中执行的处理的流程图。
图31A是表示树的例子的图,图31B是说明把顶点节点向相当于孩子的节点移动的处理的图。
图32A是表示树的例子的图,图32B说明把顶点节点向相当于父亲的节点移动的处理的图。
图33是表示在把顶点节点向相当于弟的节点移动时,在计算机***中所执行的处理的流程图。
图34A是表示树的例子的图,图34b说明把顶点节点向相当于弟的节点移动的处理的图。
图35是在存储装置上构筑本实施方式的树型数据构造以及顶点节点列表的信息处理装置的功能框图。
具体实施方式
以下,参照附图说明本发明的实施方式。
[计算机***结构]
图1是表示处理本发明实施方式的树型数据构造的计算机***的硬件结构的框图。如图1所示,该计算机***10是与通常的***同样的结构,具备通过执行程序控制***整体以及各个结构部分的CPU12、存储工作数据等RAM(随机访问存储器:Random AccessMemory)14、存储程序等ROM(只读存储器:Read Only Memory)15、硬盘等固定存储介质18、用于访问CD-ROM19的CD-ROM驱动器20、在与CD-ROM驱动器20或者外部网络(未图示)连接的外部端子之间设置的接口(I/F)22、由键盘或鼠标构成的输入装置24、CRT显示装置26。CPU12、RAM14、ROM16、外部存储介质18、I/F22、输入装置24以及显示装置26经由总线28相互连接。
本实施方式的、在存储装置上构筑树型数据构造的程序以及在存储装置上变换树型数据构造的程序可以收容在CD-ROM19中,由CD-ROM驱动器20读取,也可以预先存储在ROM16中。另外,还可以把一旦从CD-ROM19读出的内容存储到外部存储介质18的规定区域中。或者也可以经过网络(未图示)、外部端子以及I/F22从外部提供上述程序。
另外,本发明的实施方式的信息处理装置通过使计算机***10执行在存储装置上构筑树型数据构造的程序以及在存储装置上变换树型数据构造的程序来实现。
[树型数据构造]
图2A、B是作为树形式数据的一个例子的POS数据的说明图。图2A是视觉上表现出该树形式数据的数据构造(即,拓扑)以及数据值的一个例子,图2B是以XML形式表现出相同的树形式数据的一个例子。如图2A、B所示,树型数据构造由从路由节点(在本例中是POS数据)开始,在各节点分支,到达叶子节点(端点)的节点与弧线的组合来表现。各节点的实际的值,例如店名节点的值=“法式店”的保存位置用与店名节点关联的指针指定。
本发明由于以树型数据构造的拓扑为对象,因此在以下的说明中,主要对于树型数据构造的拓扑进行说明。
当前,这种树型数据构造通过用指针把存储了数据的节点之间连接起来表现。然而,指针表现具有在指针值中没有必然性的缺点。即,在某种情况下,由于特定的节点A被保存在某个地址(例如100地址),在其它的情况下,相同的节点A被保存在其它的地址(例如200地址),因此指针值不恒定,指针值本质上只不过表现节点的保存地址。因此,例如在根据深度优先的规则用指针连接节点的情况下,难以根据宽度优先的规则用指针再次连接这些节点。
对此,本发明者着眼于树型数据构造的拓扑能够用弧表记述。所谓弧表是表示节点之间的父子关系的弧线的列表。图3A~C是使用了弧表的树型数据构造的表现形式的一个例子的说明图。在该图的例子中,表示由添加了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与节点种类的对的列表构成的节点列表。另外,由于只是表现树型数据构造的目的,因此也可以没有节点列表。原理上通过使用这样的弧表,能够与指针无关地直接记述节点之间的关系。
[基于“子→父”关系的表现]
在图3A~C的例子中,根据使子节点与父节点相对应的“父→子”关系记述弧表。因此,在一个父节点例如路由节点0中存在3个子节点10、60以及80,因此在弧表的From-ID中相同节点ID的0出现3次。即,由于即使特定父节点也不能够特定子节点,因此弧表由要素From-ID的排列和要素To-ID的排列构成。在使用弧表的情况下,某个节点出现在From-ID的排列和To-ID的排列的双方排列中。
对此,父子关系还能够由“子→父”关系来表现。这种情况下,节点之间的父子关系由作为路由节点以外节点的非路由节点的每一个与相关联起来的父节点的、组的排列来表现。在由该“子→父”关系表现父子节点的情况下,有在“父→子”关系的情况下不能够得到的重要性质。即,在一个子节点中由于一定与唯一的父节点相对应,因此通过特定子节点,能够立即特定与该子节点相对应的唯一的父节点。即,弧表实际上可以只准备要素To-ID的排列。作为其结果,减小用于存储弧表的存储容量。该存储容量的减少由于具有能够减少对于存储器的访问次数的效果,其结果能够实现处理的高速化。
图4A~C是基于本发明一个实施例的“子→父”关系的树型数据构造的表现方法的说明图。图4A是树总体的说明图,图4B是基于“子→父”关系的弧表。图4B的弧表由于包括针对路由节点的父节点的存储区域,因此作为路由节点的父节点,方便地设定“-”。但是,由于不存在与路由节点相对应的父节点,因此如图4C所示,也可以从基于“子→父”关系的弧表去除针对路由节点的父节点的存储区域。这样在本发明的一个实施例中,对于作为路由节点以外的节点的非路由节点的每一个,通过使非路由节点的父节点相关联起来,表现节点之间的父子关系。而且,通过从“子→父”表现出的子的节点搜索父的节点的列表,能够表现树的拓扑。
基于这样的“子→父”关系的树型数据构造依据本发明的一个实施例,如图5所示,通过使图1所示的计算机***10执行向包括路由节点的节点上提供固有的节点识别符的节点定义步骤501、使被提供到作为上述路由节点以外的节点的非路由节点的每一个上的节点识别符与被提供到上述非路由节点的每一个父节点上的节点识别符相关联的父子关系定义步骤502,并构筑在RAM14上。这样,最初根据字符串、浮点小数、整数等任意的识别信息向节点提供节点识别符,接着,通过根据“子→父”表现定义父子关系,从而通过从子节点的节点识别符引进(检查)父节点的节点识别符,能够表现树的拓扑。
[节点识别符]
依据优选的一个实施例,节点定义步骤使用数值作为节点识别符,更优选的是使用连续的整数,最优选的是使用从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;
如果对某个代中包含的所有节点提供了号码,则直到在该某个代的下一代中不存在节点为止,对于包含在该下一代中的所有节点,在父节点不同的情况下,按照对该父节点上提供号码的顺序对该节点提供号码,在该父节点是相同的情况下,在从该父节点派生出的多个子节点之间定义兄弟关系,对从最上面的兄节点到最下面的弟节点按顺序提供从提供给紧接之前的号码的下一个号码开始连续变化的固有整数的步骤1103。由此,以宽度优先模式在从相同父节点派生出的多个子节点之间定义兄弟关系。
图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。
[顶点节点以及部分树群]
在上述的树中,考虑用最接近路由节点的节点的值表现该节点以及从其节点分支到达叶子节点(端点)的所有节点。这里,把某个节点以及从其节点分支到达叶子节点的节点群称为部分树。另外,把最接近上述节点(路由节点)的节点称为顶点节点。
图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包含在部分树1911中。在图19D表示的部分树群中不存在与图19B中的部分树1902具有包含关系的部分树。另外,如果把图19B中的、用节点识别符[3]的顶点节点特定的部分树1903与图19D中的用节点识别符[7]特定的部分树1913进行比较,则部分树1913包含在部分树1903中。其结果,表示“与”运算结果的顶点节点列表如图20A所示,成为[4、7]。图20B是与“与”运算结果相对应的部分树群。
如能够从图16A、B~图20A、B理解的那样,根据顶点节点列表(在总计中,除去该列表以外,还有与顶点节点列表相同尺寸的保存总计结果(节点数)的排列),能够表现各个处理、运算的结果。
[顶点节点的移动]
在表形式的数据中,项目规则地排列着,因此能够简单地执行指定成为显示、编辑对象的单元(或者列或行)的操作。另一方面,树的数据由于节点未规则地排列着,因此必须进行特定成为显示、编辑、总计对象的节点(相当于表形式数据的“单元”)群的操作。根据上述的顶点节点,能够指定进行这种显示、编辑、总计等操作的对象的节点群。有时也把指定成为显示、编辑、总计等操作对象的节点群的节点称为上下文节点。从而,在本说明书中,顶点节点具有与上下文节点相同的功能。
上述的检索、总计、排序、集合运算是不出现与顶点列表中的值不同的新值的操作。然而,在以部分树群为对象的操作中,经常发生要求移动树的拓扑的情况。
例如,考虑以父亲作为顶点节点,表现家族结构的树。现在,顶点节点位于父节点上,而在希望得到所有孩子的一览的情况下,考虑把顶点节点从父亲移动到孩子的情况。另外,即使是正规部分树群的顶点节点列表,移动了顶点节点以后的顶点节点列表不限于成为正规部分树群,有时也成为非正规部分树群。
以下,说明移动顶点节点的例子。在图21B所示的树中,如图21A的顶点节点列表所示那样,考虑当节点识别符“1”、“2”以及“3”的节点分别是顶点节点时,把该顶点节点移动到相当于[孩子]的节点的情况。另外,在图21B、D中,标注了箭头的节点表示是顶点节点。
这种情况下,如图22D所示,节点识别符“1”的顶点节点移动到节点识别符“4”以及“5”的节点。另外,节点识别符“2”的顶点节点移动到节点识别符“6”的节点的同时,节点识别符“3”的顶点节点移动到节点识别符“7”的节点。其结果,表示移动后的顶点节点的顶点节点列表如图21C所示,成为[4、5、6、7]。
如图21D所示,考虑节点识别符“4””、“5”、“6”以及“7”的节点是顶点节点时,把顶点节点移动到相当于“父亲”的节点的情况。节点识别符“4”的顶点节点以及节点识别符“5”的顶点节点分别移动到节点识别符“1”的节点。另外,节点识别符“6”的顶点节点移动到节点识别符“2”的节点,节点识别符“7”的顶点节点移动到节点识别符“3”的节点。其结果,表示移动后的顶点节点的顶点节点列表成为[1、1、2、3]。
其次,如图23B所示,考虑当节点识别符“1”、“2”、“3”的节点是顶点节点时,把顶点节点移动到同代而且紧接其下的“弟”的节点,即,如果按照本发明的节点识别符的添加规则,则移动到同代而且父节点是相同的节点中具有最接近的节点识别符的节点的情况(参照图23B的虚线箭头)。这里,“弟”的节点是与顶点节点同代的节点,考虑为在从该顶点节点的父节点对顶点节点连接了弧线以后,如连接有弧线那样的节点。另外,作为“兄”的节点,是与该顶点节点同代的节点,考虑为在从该顶点节点的父节点对顶点节点连接弧线以前,连接有弧线的节点。
如图23B、23D所示,节点识别符“1”的顶点节点移动到节点识别符“2”的节点,节点识别符“2”的顶点节点移动到节点识别符“3”的节点。另一方面,由于节点识别符“3”的顶点节点不存在“弟”的节点因此消失。从而,如图23C所示,表示移动后的顶点节点的顶点节点列表成为[2、3]。
[使顶点节点移动时的处理(宽度优先模式)]
以下,说明在本发明的实施方式中,使顶点节点移动时执行的处理。首先,说明利用了基于依据宽度优先模式的数型数据构造作出的[子→父]表现的排列(C-P排列)时的顶点节点的移动。
图24是表示把顶点节点移动到相当于孩子的节点时,在计算机***10中执行的处理的流程图。如图24所示,计算机***10参照保存了顶点节点的节点识别符的顶点节点列表的值(步骤2401),在C-P排列中,检索与该顶点节点列表的值(节点识别符)相同的值(步骤2402)。接着计算机***10把在C-P排列中具有与顶点节点的节点识别符相同值的节点的节点识别符保存在新的顶点节点列表中(步骤2403)。通过对所有的顶点节点列表中的值执行步骤2401~2403的处理(参照步骤2404),在新的顶点节点列表中,保存移动到相当于孩子的节点的顶点节点的节点识别符。
在图25A的例子中,考虑顶点节点列表是[1、2、3]。如果着眼于节点识别符“1”的顶点节点(参照箭头),则检索C-P排列的结果,可知关于节点识别符“4”以及“5”,C-P排列的值与顶点节点列表中的值“1”相同(参照图25)。因此,在新的顶点节点列表中,保存值“4”以及“5”。另外,在宽度优先模式中的C-P排列中由于值是升序,因此容易进行步骤2402的检索。关于其它的顶点节点列表中的值“2”、“3”也执行相同处理的结果,能够得到新的顶点节点列表[4、5、6、7]。
图26是表示在把顶点节点移动到相当于父亲的节点(父节点)时,在计算机***10中执行的处理的流程图。如图26所示,计算机***10参照顶点节点列表的值(步骤2601),取得该顶点节点列表的值表示的C-P排列的值(步骤2602)。计算机***10把所取得的值保存在新的顶点节点列表中(步骤2603)。通过对于所有的顶点节点列表中的值执行步骤2601~2603的处理(参照步骤2604),在新的顶点节点列表中保存移动到相当于父亲的节点的顶点节点的节点识别符。
图27A中,考虑顶点节点列表是[4、5、6、7]。如果着眼于节点识别符“4”的顶点节点(参照箭头),则由于与节点识别符“4”相对应的C-P排列的值是“1”,因此该值被保存在新的顶点节点列表中。同样,关于在顶点节点列表中所存储的其它节点的节点识别符“5”、“6”以及“7”,其相应的C-P排列的值分别成为“1”、“2”、“3”。从而,新的顶点节点列表成为[1、1、2、3]。
图28是表示当把顶点节点移动到相当于弟的节点(弟节点)时,在计算机***10中执行的处理的流程图。如图28所示,计算机***10参照顶点节点列表的值(步骤2801),取得表示该顶点节点列表的值的C-P排列的值(节点识别符)(步骤2808)。接着,计算机***10取得该顶点节点的下一个值(在本实施方式中,在原来的值上加“1”的值)表示的C-P排列的值(节点识别符)(步骤2803)。
接着,计算机***10把所取得的两个值进行比较,在两者一致的情况下(步骤2804中是Yes),把上述下一个值(节点识别符)保存在新的顶点节点列表中(步骤2805)。另一方面,在两者不一致的情况下,如果成为处理对象的顶点节点移动,则判断为消失。
计算机***10通过对于所有的顶点节点列表中的值执行步骤2601~2603的处理(参照步骤2806),在新的顶点节点列表中,保存移动到相当于弟的节点的顶点节点的节点识别符。
在图29A中,考虑顶点节点列表是[4、5、6、7]。如果着眼于节点识别符“4”的顶点节点(参照箭头),则与节点识别符“4”相对应的C-P排列的值是“1”,与节点识别符“5”相对应的C-P排列的值也是“1”。从而,由于两者一致,因此节点识别符“5”保存在新的顶点节点列表中。关于节点识别符“5”、“6”以及“7”,由于与其自身相对应的C-P排列的值与在自身的值上加“1”的值相对应的C-P排列的值分别不同,因此顶点节点消失。从而,新的顶点节点列表成为[5]。
另外,在使顶点节点移动到相当于“兄”的节点的情况下,可以把顶点节点列表中的节点识别符表示的C-P排列的值、与该节点识别符的一个以前的节点识别符(即,值是“-1”那样的节点识别符)表示的C-P排列的值进行比较。
[使顶点节点移动时的处理(深度优先模式)]
以下,在本发明的实施方式中,说明使顶点节点移动时执行的处理。首先,说明利用了基于从依据深度优先模式的树型数据构造作出的“子→父”表现的排列(C-P排列)情况下的顶点节点的移动。
在深度优先模式下,在把顶点节点移动到相当于孩子的节点时,在计算机***10中执行的处理与图24所示的相同。另外,在深度优先模式下的C-P排列中值不是升序。而相当于孩子的节点出现在从顶点节点列表中的节点识别符的下一个(在本实施方式中是在值上加“1”的)节点识别符起,节点识别符表示的C-P排列的值比顶点节点列表的值小的那样的节点识别符的一个之前(在本实施方式中,是比这样的节点识别符仅小“1”的节点识别符)的节点的范围。
从而,在检索相当于孩子的节点时,如图30所示,计算机***10以顶点节点列表中的节点为基准节点,在该基准节点的下一个位置(即,在基准节点的节点识别符上加“1”的节点识别符表示的位置)中配置检索用指针(步骤3001),特定检索用指针表示的C-P排列的值(步骤3002)。接着,判断所特定的值是否与基准节点的节点识别符相同(步骤3003)。在步骤3003中判断为Yes的情况下,计算机***10把检索用指针所处的节点识别符保存在新的顶点节点列表中(步骤3004)。然后,检索用指针前进一个(步骤3005)。
另一方面,在步骤3003中判断为No的情况下,判断C-P排列的值是否大于等于基准节点的节点识别符(步骤3006)。在步骤3006中判断为Yes的情况下,检索用指针所处的节点识别符的节点由于是基准节点的子孙,因此为了进行下面的处理,检索用指针前进一个(步骤3005)。在步骤3006中是No是因为检索用指针所处的节点识别符的节点不是顶点节点的子孙,因此结束处理。
在图31A的例子中,考虑顶点节点列表是[1、6、8]。着眼于节点识别符“1”的顶点节点(参照箭头)。检索用指针最初配置在节点识别符“2”的位置。在该时刻,检索用指针表示的C-P排列的值由于是“1”,因此节点识别符“2”被保存在新的顶点节点列表中。
另外,当检索用指针被配置在节点识别符“5”时,该检索用指针表示的C-P排列的值由于是“1”,因此节点识别符“5”被保存在新的顶点节点列表中。然后,当检索用指针位于节点识别符“6”时,该检索用指针表示的C-P排列的值是“0”,由于比基准节点的节点识别符“1”小,因此结束处理本身。
接着,说明在把顶点节点移动到相当于父亲的节点时,在计算机***10中执行的处理。移动到相当于父亲的节点时的处理与图26所示的相同。在图32A的例子中,考虑顶点节点列表是[2、5、7、9]。如果着眼于节点识别符“2”的顶点节点(参照箭头),则与节点识别符“2”相对应的C-P排列的值(参照图32B)由于是“1”,因此该值被保存在新的顶点节点列表中。同样,关于节点识别符“5”、“7”、“9”,由于相对应的C-P排列的值分别是“1”、“6”、“8”,因此新的顶点节点列表成为[1、1、6、8]。
图33是表示在把顶点节点移动到相当于弟的节点时,在计算机***10中执行的处理的流程图。如图33所示,计算机***10参照顶点节点列表的值(步骤3301),取得该顶点节点列表的值表示的C-P排列的值(节点识别符)(步骤3302)。接着,计算机***10在下一个节点识别符(仅大“1”的值的节点识别符)以后,检索具有相同C-P排列的值的节点识别符(步骤3303)。如果发现相同的值(步骤3304中的Yes)则计算机***10把具有其值的节点识别符保存到新的顶点节点列表中(步骤3305)。在没有发现相同值的情况下,判断为该顶点节点消失。
计算机***通过对所有的顶点节点列表的值执行步骤3301~3305的处理(步骤3306),在新的顶点节点列表中保存被移动到相当于弟的节点的顶点节点的节点识别符。在图34A中,考虑顶点节点列表是[2、5、7、9]。如果着眼于节点识别符“2”的顶点节点,则与节点识别符相对应的C-P排列的值是“1”。在图33的处理中,由于能够检索C-P排列的值是“1”那样的节点识别符“5”,因此在顶点节点列表中保存节点识别符“5”。关于节点识别符“5”、“7”、“9”的顶点节点,即使搜索C-P排列,也不能够发现相同的值。即,作为父节点不能发现具有相同号码的节点。从而,这些顶点节点通过移动而消失。其结果,新的顶点节点的顶点节点列表成为“5”。
[信息处理装置]
图35是构筑本发明一个实施例的树型数据构造,生成顶点节点列表,而且生成顶点节点移动后的顶点节点列表的信息处理装置3500的功能框图。该信息处理装置3500实际上通过在图1所示的计算机***10中安装必要的程序来实现。
如图35所示,信息处理装置3500具备存储表现树型数据构造的数据以及顶点节点列表的存储单元3501;在包括路由节点的节点上提供固有的节点识别符,把节点识别符保存到存储单元3501中的节点定义单元3502;使提供给作为上述路由节点以外的节点的非路由节点的每一个的节点识别符与提供给上述非路由节点的每一个父节点的节点识别符相关联,把作为表示该关联的排列的C-P排列保存到存储单元3501中的父子关系定义单元3503;根据保存在存储单元3501中的节点识别符以及C-P排列,生成顶点节点列表的顶点节点列表生成单元3504;根据来自输入装置(参照图1的号码24)等的指示,使顶点节点移动,生成表示移动后的顶点节点的新的顶点节点列表的顶点节点移动处理单元3505。由顶点节点列表生成单元35生成的顶点节点列表或者由顶点节点移动处理单元3505生成的新的顶点节点列表被存储在存储单元3501中。
优选的是,节点定义单元3502作为节点识别符使用数值,更优选的是作为节点识别符使用连续的整数。另外,父子关系定义单元3503在存储单元3501中保存被提供给非路由节点的每一个上的节点识别符与提供给相关联的父节点的节点识别符的、组的排列。
另外,如果根据来自输入装置(参照图1的号码24)的指示等指定节点,则顶点节点列表生成单元3504把被指定的节点的节点识别符保存到顶点节点列表中。另外,如果根据来自输入装置的指示等,提供顶点节点的移动指示(向相当于父亲的节点的移动、向相当于子的节点的移动、向相当于弟(兄)的节点的移动),则顶点节点移动处理单元3505从存储单元3501取得C-P排列以及顶点节点列表,生成新的顶点节点列表,存储到存储单元3501中。
本发明不限于以上的实施方式,在权利要求的范围记载的本发明的范围内,能够进行各种变更,这些变更当然也包含在本发明的范围内。