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