github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/pot/doc.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:44</date>
    10  //</624450116173959168>
    11  
    12  
    13  /*
    14  package pot(邻近顺序树)实现类似于二叉树的容器。
    15  这些元素是通用的VAL接口类型。
    16  
    17  trie中的每个fork本身就是一个值。包含在下的子树的值
    18  与树中的其他元素相比,节点都具有相同的顺序。
    19  
    20  邻近顺序的例子是位向量上公共前缀的长度。
    21  (相当于最高有效位第一个x的数量级的倒序)
    22  或有限整数集上的距离)。
    23  
    24  方法使用比较运算符(POF、邻近顺序函数)比较
    25  值类型。默认POF假定VAL为或投影到字节片,使用
    26  最高位第一个异或对数距离的倒序。
    27  
    28  如果地址空间有限,则相等定义为最大接近顺序。
    29  
    30  容器在po树上提供了应用(功能)风格的方法:
    31  *添加/删除en元素
    32  *交换(基于价值的添加/删除)
    33  *合并两个采购订单树(联合)
    34  
    35  以及遵循接近顺序的迭代器访问器
    36  
    37  当会员资格的同步性不是100%要求时(例如用作数据库
    38  网络连接),应用结构具有节点
    39  是不可变的,因此操作不需要锁定
    40  同时检索。
    41  对于整个容器应该允许更改的用例
    42  并发例程,
    43  
    44  壶
    45  *按键检索、插入和删除涉及日志(n)指针查找
    46  *用于任何项目检索(定义为二进制键上的公共前缀)
    47  *提供同步迭代器,涉及任何项目的邻近排序。
    48  *在n个项目上提供异步迭代器(用于并行执行操作)
    49  *允许在范围内进行便宜的迭代
    50  *非对称并发合并(联合)
    51  
    52  注:
    53  *实际上,联合只对集合表示有意义,因为两个值中的哪一个值
    54  有相等的键生存是随机的
    55  *未实现交叉
    56  *未实现简单的get访问器(但可从eachneighbur派生)
    57  
    58  节点上的固定值意味着不需要复制项类型的键。
    59  
    60  注意
    61  *同一组值允许使用大量的可选值。
    62  POT表示。
    63  *访问顶部值的速度比访问下部值的速度快,并且需要执行以下步骤:
    64  检索项具有对数分布。
    65  
    66  因此,人们可以组织树,使需要更快访问的项目
    67  向上扭转。尤其是对于人气有力量的任何子集
    68  独立于邻近顺序的分布(内容寻址存储
    69  块),原则上可以在需要步骤的地方创建一个容器
    70  访问一个项目与它的流行程度成反比。
    71  这类组织尚未实施。
    72  
    73  TODO:
    74  *覆盖样式合并
    75  *交叉点
    76  *基于访问频率的优化
    77  
    78  **/
    79  
    80  package pot
    81