zoukankan      html  css  js  c++  java
  • 读论文系列:Nearest Keyword Search in XML Documents中使用的数据结构(CT、ECT)

    Reference:
    [1]Y. Tao, S. Papadopoulos, C. Sheng, K. Stefanidis. Nearest Keyword Search in XML Documents.
    [2]M. Qiao, L. Qin, H. Cheng, J. X. Yu, W. Tian. Top-K Nearest Keyword Search on Large Graphs.
     
     
     
    假设原树如Figure4所示;节点上有t的即为关键词节点;节点上的数字表示在树的先序遍历中的次序;祖先节点的先序序号一定比子孙节点的先序序号小;
     
    CT树:有两类节点,第一类是关键词节点{2、5、9、23};第二类是至少含有两个含有关键词的直接子树的节点{3、1}(为了保证树的连通性)
     
    下面是构造CT树的伪码,由两步构成,第一步在原树中找出所有CT树的节点,第二步将这些节点建成树
     
     
    注释:For each node u in the data tree T, we use W(u) to represent the set of keywords associated with u. Let U(w) be the set of nodes inT that include word w.
     
    1step:即找出CT树的两类节点
    1line:S = {带关键词w的节点}     //第一类节点
    2line:对S中的节点以其在原树中的先序访问次序按升序进行排序
    3, 4line:对在S中的连续的两个关键词节点{u,v},求LCA,并将其加入S末尾;所有关键词处理完时停止;     //第二类节点
     
     
    注释:For each node u of T, define its rank, denoted as rank(u), to be the sequence number of u in the pre-order traversal of T. We associate u with an interval R(u)=[x, y], where x is the rank of u, and y is the largest rank of the nodes in sub(u).
     
    2step:
    1line:对S中的节点以其在原树中的先序访问次序按升序进行排序
    5line:若R(v)与R(u)不相交,说明v、u不在以v为根的子树下,即v、u之间没有边
     
    本质上,步骤二按先序访问顺序构造出了CT树,并利用先序区间确定父节点
     
    ECT树:
         改变节点:考虑在CT树上的边{u,v},如{1,23},在原树中走{1->17->18->22->23},NN(1) = {2} != NN(18) = {23},18为改变节点(即第一个与NN(u)不同的点);
     
         ECT树为在CT树上加入改变节点后的树;
     
         思考:在CT树上的边{u,v}的NN,只会有两种可能,NN(u),NN(v),因此,改变节点在每个CT边上至多有一个
         作用:用于求解使得相同先序区间为同一个NN
     
    对于边{u,v}求改变节点所在的层,注意这里的层的意思是:根节点到节点的边数(相当于边的权值为1)
     
     
     
    可以这么理解
     
     
     
    再看图
     
     
     
     
    其实求的是距离NN(u)以及NN(v)“相等”的层,即为改变节点所在的层
     
    下面是构造ECT树的伪码
     
     
     
    1line:即为了后继对边进行宽度优先遍历
    2line:没用,在6line也会求NN(u),可每次循环判断u是否改变,决定是否重新计算NN(u)
    6line:如下图所示,NN(v) = { NN(u) or NNsub(v) };若pre_order(NN(u)) >= pre_order(NNsub(v)),那么NN(u)在(2)区域中,
    则NN(u) == NNsub(v)==NN(v);若pre_order(NN(u)) < pre_order(NNsub(v)),那么NN(u)在(1)区域中,则需要判断dist(NNsub(v), v)及
    dist(v, NN(u))的距离,哪个更小,取更小的节点作为NN(v)
     
    7line:若NN(u) = NN(v),则{u, v}边上没有改变节点
    9line:否则利用前述公式求出改变节点所在的层,在原树{u, v}路径上执行a level-on-path query即可求出改变节点z(注意:若边权值不为1,你不可以这么做)
    11line:将{u, z},{z, v}加入ECT树
     
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/hzhesi/p/3727891.html
Copyright © 2011-2022 走看看