布尔队列 BHA_Queue:入队出队均摊 O(1);附 BHA_Dict

一句话:bool-hybrid-array 不止有布尔数组,9.11.5 版本还加入了 BHA_Queue 布尔队列------入队出队均摊 O(1),首次出队触发一次内部转移之后全程纯 O(1)。## 布尔队列是怎么回事第一次看到这个库还带队列的时候我是有点意外的------"布尔值还要队列?"。但转念一想,还真有场景:状态机里的开关流、任务调度的启停信号、游戏里的连击判定队列......这类全是 True/False 进进出出的活,用普通 list 还得自己维护索引,用 collections.deque 也能做但那是通用队列。官方直接给了一个 BHA_Queue,代码长这样:pythonfrom bool_hybrid_array import *q = BHA_Queue([T, F, T, T, F])print(f"初始化队列: {q}") # 输出:BHA_Queue([T,F,T,T,F])q.enqueue(T)q.enqueue(F)print(f"入队2个元素后: {q}") # 输出:BHA_Queue([T,F,T,T,F,T,F])# 3. 出队(dequeue,均摊O(1),仅首次触发转移)print(f"第一次出队: {q.dequeue()}") # 输出:T(触发 self.a → self.b 转移,仅1次)print(f"第二次出队: {q.dequeue()}") # 输出:F(直接从 self.b 弹出,纯O(1))print(f"出队2个元素后: {q}") # 输出:BHA_Queue([T,T,F,T,F])实测跑出来的输出:text初始化队列: BHA_Queue([True,False,True,True,False])入队2个元素后: BHA_Queue([True,False,True,True,False,True,False])第一次出队: True第二次出队: False出队2个元素后: BHA_Queue([True,True,False,True,False])## 均摊 O(1) 是怎么来的:第一次出队做了一次转移注释里写得很明白:第一次出队触发 self.a → self.b 转移,只发生 1 次;之后的出队全部从 self.b 直接弹,纯 O(1)。这是标准的双栈式队列做法:入队全往 a 塞,出队时如果 b 空了就把 a 整体倒进 b(倒一次),之后 b 的 pop 就是纯 O(1)。均摊下来每个元素 O(1) 成本。collections.deque 也是均摊 O(1),区别在于 BHA_Queue 底层走的是 BoolHybridArr 那套布尔压缩存储,队列长了内存更省,而且跟主库的数组/序列化生态是一套。## BHA_Dict:类型化键值容器队列之外,9.13.6 版本还加入了 BHA_Dict,类型化的键值容器,跟上面这些能搭着用:pythonfrom bool_hybrid_array.struct_array import BHA_Dictd = BHA_Dict(int, str)d[1] = 'alpha'd[2] = 'beta'print(d[1]) # 输出:alphaprint(list(d)) # 输出:[1, 2](按键升序)print(len(d)) # 输出:2d[2] = 'beta2' # 更新已有键的值print(d[2]) # 输出:beta2实测输出跟官方完全一致:alpha、[1, 2]、2、更新后 beta2。键自动升序,类型在构造时锁死。## 结尾一句话: bool-hybrid-array 现在不只是"省内存的布尔数组"------数组有 BoolHybridArr,大数有 int_array,队列有 BHA_Queue,字典有 BHA_Dict,慢慢长成一套布尔生态。 手上正有"布尔流进流出"的需求,BHA_Queue 就是现成选择,均摊 O(1)。---*库:bool-hybrid-array(PyPI 最新 9.13.11,Apache-2.0 OR MulanPSL-2.0 双许可,作者蔡靖杰)*本文示例逐字照抄官方 README,实测环境 Python 3.x 输出一致,无虚构。

相关推荐
-星空下无敌41 分钟前
Windows Docker K8s 安装部署Naocs ,SpringBoot 3.x 4.x 整合Naocs 版本兼容 配置中心、服务注册与发现
windows·docker·nacos·kubernetes·springboot·alibaba
燃烧的枫42 分钟前
Windows 下 YOLO11 Pose 的 TensorRT C++ 部署
windows·yolo·tensorrt·1024程序员节·yolo11-pose
深圳恒讯3 小时前
香港云主机硬盘满了怎么办?Linux和Windows在线扩容操作教程
linux·运维·windows
打工仔折腾 AI3 小时前
鸿蒙移动端直连 Windows 远程桌面配置与性能调优实践
人工智能·windows·后端·python·华为·性能优化·harmonyos
Blockbuater_drug1 天前
Dify 1.18 本地部署实战:Windows + WSL2 + Docker,从零跑到本地可用
windows·docker·容器·dify·大模型应用平台
cc_yy_zh1 天前
笔记本关机自动重启解决办法
windows
AlanAshley1 天前
Windows 错误代码 0x80284018:可能原因与解决办法
windows
2501_915909061 天前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode
vortex51 天前
Windows Server IIS 运维配置指南:架构、身份、安全与排障
运维·windows·架构