Polytree 的随笔

前几天,有个朋友向我推荐了一个github 的开源项目https://github.com/OhBonsai/RedisTree, 可以用redis 直接读写polytree 的数据结构,挺有意思的。那么, 什么是polytree 呢?

数据结构与树

当我们说数据结构的时候,在我们的脑海里呈现的可能是一棵如下的树:

也就是说, 数据结构大体可以分为两类:线性数据结构和非线性数据结构。线性数据结构中常见的有数组,链表,栈和队列;非线性数据结构主要是树和图。

虽然不是自举,但我们实际上用『树』来描述了数据结构。树数据结构定义为对象或实体(称为节点)的集合,这些对象或实体链接在一起以表示或模拟层次结构。树数据结构是一种非线性数据结构,因为它不按顺序存储。它是一种层次结构,因为树中的元素被安排在多个级别。『树』中的常用术语大致如下:

基于树中子节点的多少以及子节点自身的属性,形成了各种各样的树,且树的应用场景非常广泛,例如计算机系统的文件系统,计算简单或复杂的数学表达式,这时的树是一种特殊的树,称为表达式树,二叉树支持O(logN)平均时间内的搜索操作等等。

polytree 及其特点

polytree一词由Rebane和Pearl于1987年创造。Polytree是一个有向无环图的特例,任意两个顶点之间最多有一条无向路径的图。换句话说,一个有向无环图,其中可从任何节点到达的子图形成一棵树。关于有向无环图可以参考《有向无环图(DAG)的温故知新》。

图是一个神奇的东西,图论是应用数学中应用极其广泛的一类,在计算机科学中也是如此,日常生活中其实也很广泛;任意一种网络,都是一种图;思维导图也是一种图;鄙视链同样是一种图;网格其实也是图,等等。不管是什么结构,只要结构中的对象存在一种二元联系,就总可以找到一个图来描述它,用一些有向边或无向边把一些点连起来,无所谓其中边的长度;如果是多元关系,可以用超图表示。

具体考虑一个 polytree,线性预处理可以插入中间节点并折叠只有一个子节点的节点,从而得到一个polytree,可以使用该polytree来回答对原始polytree的查询,因此,可以在不损失一般性的情况下假设𝑃 正好有2个度。按照任何拓扑顺序自底向上进行线性时间预处理,对于每个节点𝑃 我们将为节点构造一个索引结构,我们称之为“中缀树(infix tree)”,它还可能包括指向其他先前定义的此类结构的指针。

在线性时间内构造polytree,对于任何节点,都可以通过恒定延迟枚举其中缀树。

中缀树中有三种节点:

  • 叶子节点,用至少一个且最多四个元素的显式集合标记(是原始polytree的叶子);

  • 小型内部节点,用一个显式元素和指向一个或两个中缀树节点的指针标记;

  • 大型内部节点,用两个显式元素和指向一个或两个中缀树节点的指针标记。

进一步要求中缀树中没有重复的元素,即,对于中缀树的每个节点𝑥,P 的每一片叶子在标签中最多显示一次𝑥。节点𝑥 在中缀树中,是对P的叶子节点进行编码的集合𝑆(𝑥)。中缀树的思想是,通过保留一些显式元素,我们既可以在枚举时使用它们,以便快捷地访问节点,也可以在合并时使用它们,以便有足够多的元素来标准中缀树中新创建的节点。

索引的数据结构将polytree的每个节点𝑛 映射到可到达的叶子节点 𝑁(𝑛) ,𝑆(𝑁(𝑛)) 是𝑃中的节点可达的叶子节点集合。那么,可以得到Polytree 的两个如下特性:

  1. 在线性时间内可以做到这一点;

  2. 可以在恒定的延迟中完成枚举。

polytree的应用

polytree树的典型应用之一是用作概率推理的图模型。如果贝叶斯网络具有polytree的结构,则可以使用信念传播有效地对其进行推理。

实际上,polytree还有很多更为具体的应用,例如复调音乐是一种共时、离散的时间序列,通常被表示为一维的events序列,或者二维的piano roll,缺点是music knowledge不够多,不能体现复调音乐的内在结构。而基于polytree的树结构,包含三个级别:时间序列——音符——音符属性,

再以一个Encoder-Decoder网络来学习复调音乐的latent representation,整体模型架构如下:

在钢琴表征学习任务实验结果显示,polytree在重建准确性和模型泛化方面优于baseline。

几乎同名的prollytree

创造新名词是IT界的最爱, 国内外差不多都是如此。Norms 为了创建一个类似git 的去中心化数据库,提出了Prolly Tree,虽然几乎同音,但实际上咫尺天涯。

Prolly Tree 全称是Probabilistic Merkle B-Trees,集成了B树和merkle 树,结构示例如下:

因此,prolly tree 具有B树高效随机读写和有序扫描的特性,同时拥有merkle 树的可验证性以及包括/排除的可证明性,具体的属性如下表所示:

Norms 项目以prollytree 作为核心的数据结构,试图实现一个去中心化的数据库,是一个积极的尝试。

小结

当觉得它没有什么意思的时候,或许是因为我们对它缺乏了解;当觉得它有点意思的时候,或许我们才刚刚走在了应用的路上。老码农对polytree的感知如是,给予不同的约束,我们可以得到不同的树,进而应用到不同的业务场景。

(0)

相关推荐

  • 一口气看完6种「树」,就这?

    数据结构这门课程是计算机相关专业的基础课,数据结构指的是数据在计算机中的存储.组织方式. 我们在学习数据结构时候,会遇到各种各样的基础数据结构,比如堆栈.队列.数组.链表.树...这些基本的数据结构类 ...

  • 什么情况?MySQL居然有中“8种”索引?

    关于MySQL索引相关的内容,一直是一个让人头疼的问题,尤其是对于初学者来说.笔者曾在很长一段时间内深陷其中,无法分清"覆盖索引,辅助索引,唯一索引,Hash索引,B-Tree索引--&qu ...

  • 速度提高几百倍,记一次数据结构在实际工作中的运用

    这段时间写了一堆源码解析,这篇文章想换换口味,跟大家分享一个我工作中遇到的案例.毕竟作为一个打工人,上班除了摸鱼看源码外,砖还是要搬的.本文会分享一个使用恰当的数据结构来进行性能优化,从而大幅提高响应 ...

  • 性能调优-MySQL索引数据结构详解与索引优化

    本篇文章主要学习了MySQL的索引的数据结构的认识,做一个大概的了解即可. 一.索引 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储数据结构,它是某个表中一列或若 ...

  • 空间数据入门

    基本概念 空间索引的基本策略 单点索引方式 索引方式的分类 典型空间数据结构 空间数据(spatial information)和传统的结构型数据以及非结构型的数据都有点不一样.空间数据虽然是有一定的 ...

  • 我想不通!MySQL 为什么使用 B 树来作索引?

    什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...

  • 五分钟让你彻底理解二叉树的非递归遍历

    什么是二叉树 在计算机科学中二叉树,binary tree,是一种数据结构,在该数据结构中每个节点最多有两个子节点,如图所示: 二叉树的定义就是这样简单,但这种看起来很简单的数据结构遍历起来一点都不简 ...

  • 晨之风随笔《纪念处女作发表二十五周年》

    昨天晚上,远在北京的弟弟在聊天时,发我一张手机图片.说是在收拾东西时,无意中发现了我过去的一篇文章.文章是打印的,字迹已经不太清晰了,题目是<畅享金秋>.对这篇还谈不上文章的文章,我几乎没 ...

  • 刘振华随笔:关于做生意【小说】(第2679篇)

    作者:刘振华 群会员:领D打电话给我 说他朋友需要我们这儿的土特产, 让我帮忙去买一下, 然后给我钱, 这个钱我要不要收啊? 刘振华:这个其实叫索贿. 按我的意思是不要收. 他主动向你要, 说明他信任 ...

  • 春天的诗句最美的情书散文随笔

    春天的诗句最美的情书散文随笔 (一) 沿着时光的小径,看绿意在陌上草长莺飞,隐在时光深处的暗香也在悄悄苏醒,那首风吹雨落的诗句,就像这慢慢走来的春天,潮湿的心又一次为你浪漫,徐徐的涟漪是我为你洇开的 ...

  • 望雪:《麦苗返青》(随笔)

    - <麦苗返青>(随笔) - 杨柳放绿,麦苗返青了.今天一定要捕个大鱼!儿子下午就回来了,四年没归家,你娘白日黑夜一想起你,就哭天抹泪的.每个寒暑假,别的娃都回的时候,爹也是想得慌. 爹娘 ...

  • 【随笔】乾州蕞娃:传统民俗之售卖梨膏糖

    [内容提要]之所以有这样一篇文章,是因为小时候那个卖醋的礼泉人,他的声音极富穿透力,给我留下了深刻的印象.前些年在整理地方文化.民俗的时候,我就想着把这个也作为一项内容整理出来,只是因为难度大,且时间 ...

  • 紫微斗数随笔23

    生命感悟 赠君一法决狐疑,不用钻龟与祝蓍. 试玉要烧三日满,辨材须待七年期. 周公恐惧流言日,王莽谦恭未篡时. 向使当初身便死,一生真伪复谁知. --白居易 <二>.洛书 洛书之来历与河图 ...

  • 少年之页/张甜:随笔(外诗一首•辅导老师/喻荣春)

    文/张甜 辅导老师/喻荣春 时光一直安静而又明亮.时光在一朵花里安家,在一片绿叶里写诗,在一盏茶里品味人生. 童年一直美好而快乐.童年在大自然里写诗,在大树下唱歌吟诗,在风中感受大自然的美. 婴儿一直 ...

  • [母亲节特刊]​汪卫红的随笔《美丽的谎言》

    美丽的谎言   女儿小时候,我曾经带她参加过一次亲子活动.活动中有一环节是"心心相印".母亲和孩子背对背分开坐着,回答主持人提出的问题,看看妈妈和孩子的答案是否一样.   我和女儿 ...

  • [母亲节特刊] 冷月的随笔《最想对母亲说的话》

    最想对母亲说的话 我的母亲,今年70多岁了,拄着个拐仗,走起路来一拐一拐的,但从不闲着.她在屋院一角,养了鸡:在屋前屋后,辟了地,种菜种瓜种果树:在屋周的沟边,种水芹.高苞.鱼腥草,还种菖蒲和荷花,把 ...