红黑树

blackjack的Python项目详细描述


21点是经典红黑树的简单实现 标准的python数据结构。包括一套和一本字典:

>>> from blackjack import BJ, Deck
>>> bj = BJ()
>>> bj
BJ([])
>>> bj.add(42)
>>> 42 in bj
True
>>> d = Deck()
>>> d[1] = 2
>>> d[3] = 4
>>> d.keys()
[1, 3]
>>> d.values()
[2, 4]

用法

blackjacks和deck的行为就像普通的python集合和字典一样,但是 具有不同的性能特点和不同的要求 钥匙。所有键必须是可比较的,但不必是散列的:

>>> bj = BJ()
>>> bj.add([1])
>>> bj.add([1,2])
>>> bj.add([1,2,3])
>>> bj
BJ([[1], [1, 2], [1, 2, 3]])

这确实在一定程度上影响了异构性,但对大多数人来说不应该是个问题 共同的用途。另一方面,平均和最坏的访问时间, 成员资格测试、插入和删除都是对数的,这使得 Blackjacks非常适合存储具有不受信任密钥的数据映射:

$ python -mtimeit \
> -s 'l = [(x*(2**64 - 1), hash(x*(2**64 - 1))) for x in xrange(10000)]' \
> 'dict(l)'
10 loops, best of 3: 4.11 sec per loop
$ python -mtimeit \
-s 'l = [(x*(2**64 - 1), hash(x*(2**64 - 1))) for x in xrange(10000)]
from blackjack import Deck' \
'Deck(l)'
10 loops, best of 3: 2.07 sec per loop

即使是在中小型数据集上,blackjacks也很快变得 在面对不可信的输入时比字典更有效。

此包仅包含blackjack模块;测试在模块中 可与任何标准测试运行程序一起运行:

$ trial blackjack | tail -n1
PASSED (successes=17)

技术信息

使用的具体树木是左倾的红黑树木。红孩子是 如果节点无论如何都要重新创建,则在平衡过程中机会减少; 这会通过减少红色的数量来缩短整个树的高度 孩子们。复杂性如下:

OperationTimeSpace
LookupO(log n)O(1)
MembershipO(log n)O(1)
InsertionO(log n)O(log n)
DeletionO(log n)O(log n)
UpdateO(log n)O(log n)
SortO(1)O(1)
LengthO(1)O(1)

根据提供的键函数排序是常量,因为树的 遍历顺序是预先排序的。记录长度,并在突变时更新。 节点是持久的,改变树通常需要对数。 创建新节点的空间承诺。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在jbosseap6上部署CXF web服务时发生java错误。1.1   tablecell中的java Progressbar和标签   关于Java中此引用的问题   java如何使用下拉列表中选择的值过滤c:forEach给出的结果?   对包含其他对象的类使用BoundedMapperFacade的java Orika映射   java如何测试配置的“键”和“值”。属性文件?   java Ctrl+箭头键、多字变量名和eclipse pydev   无法通过运行索引执行基于java服务器表单的身份验证。jsp而非servlet   如何在java中使用正则表达式更改匹配子字符串的前缀和后缀   java如何安排selenium脚本在一周中的某一天的某个特定时间运行?   FileWatcher中的java溢出事件   java将堆栈大小设置为线程在安卓中似乎没有什么区别   xml为什么Java在我的XPath中添加反斜杠?   具有多个SQL语句的java MySQL ConnectorJ   为什么在eclipse中运行Java应用程序时JFrame不可见?   java正则表达式将2个字符替换为1个字符   UTC时区上的java hibernate+spring启动存储日期故障   Java未正确格式化日期   java双链接列表getData问题