增加交并计算功能

This commit is contained in:
algotao
2025-11-05 16:41:06 +08:00
parent 869bae0a9e
commit 44d9206b9f
10 changed files with 950 additions and 12 deletions

View File

@@ -8,6 +8,7 @@ BloomTool 是一个基于 Go 语言开发的布隆过滤器命令行工具,用
- **低误判率**: 支持自定义误判率,默认千万分之一
- **大容量**: 支持最多 100 亿个元素
- **简单易用**: 命令行界面,操作简单
- **位图运算**: 支持AND/OR位图运算实现集合操作
## 安装
@@ -28,7 +29,7 @@ bloomtool makebloom -d <设备ID文件> -b <位图输出文件> [-e <最大元
**参数:**
- `-d`: 设备ID文本文件路径每行一个ID
- `-b`: 布隆过滤器位图输出文件路径
- `-o`: 布隆过滤器位图输出文件路径
- `-e`: 最大元素数量0表示自动计算最大100亿
- `-r`: 误判率0.01-0.000000001默认0.00000001
@@ -80,7 +81,59 @@ bloomtool info -b <位图文件>
bloomtool info -b bloom.blm
```
### 4. help - 帮助信息
### 4. and - 位图与运算(求交)
对两个布隆过滤器位图文件执行AND运算生成新的位图文件。
**注意对两个文件进行与运算并不等同于元素求交。请查阅bloomfilter的作用原理。**
**语法:**
```bash
bloomtool and -b1 <位图文件1> -b2 <位图文件2> -o <输出文件>
```
**参数:**
- `-b1`: 第一个布隆过滤器位图文件路径
- `-b2`: 第二个布隆过滤器位图文件路径
- `-o`: AND运算结果输出文件路径
**说明:**
- AND运算结果包含同时存在于两个布隆过滤器中的元素
- 要求两个位图文件的参数(元素数量上限和误判率)必须完全一致
- 运算结果仍然是一个布隆过滤器,可以继续用于其他操作
**示例:**
```bash
# 对两个布隆过滤器执行AND运算
bloomtool and -b1 bloom1.blm -b2 bloom2.blm -b result.blm
```
### 5. or - 位图或运算(求并)
对两个布隆过滤器位图文件执行OR运算生成新的位图文件。
**语法:**
```bash
bloomtool or -b1 <位图文件1> -b2 <位图文件2> -o <输出文件>
```
**参数:**
- `-b1`: 第一个布隆过滤器位图文件路径
- `-b2`: 第二个布隆过滤器位图文件路径
- `-o`: OR运算结果输出文件路径
**说明:**
- OR运算结果包含存在于任一布隆过滤器中的元素
- 要求两个位图文件的参数(元素数量上限和误判率)必须完全一致
- 运算结果仍然是一个布隆过滤器,可以继续用于其他操作
**示例:**
```bash
# 对两个布隆过滤器执行OR运算
bloomtool or -b1 bloom1.blm -b2 bloom2.blm -b result.blm
```
### 6. help - 帮助信息
显示命令使用帮助。
@@ -112,6 +165,23 @@ bloomtool hittest -d test_devices.txt -b device_bloom.blm -s test_results.txt
bloomtool info -b device_bloom.blm
```
4. **位图运算示例**
```bash
# 创建两个不同的布隆过滤器
bloomtool makebloom -d devices1.txt -b bloom1.blm
bloomtool makebloom -d devices2.txt -b bloom2.blm
# AND运算获取同时存在于两个集合中的元素
bloomtool and -b1 bloom1.blm -b2 bloom2.blm -b intersection.blm
# OR运算获取存在于任一集合中的元素
bloomtool or -b1 bloom1.blm -b2 bloom2.blm -b union.blm
# 测试运算结果
bloomtool hittest -d test_ids.txt -b intersection.blm -s intersection_results.txt
bloomtool hittest -d test_ids.txt -b union.blm -s union_results.txt
```
## 文件格式说明
### 输入文件格式
@@ -128,6 +198,7 @@ bloomtool info -b device_bloom.blm
- **查询速度**: 常数时间复杂度的查询操作
- **误判率可控**: 可根据需求调整误判率
- **大容量支持**: 支持海量数据处理
- **集合运算**: 支持高效的位图AND/OR运算
## 注意事项
@@ -135,6 +206,7 @@ bloomtool info -b device_bloom.blm
2. 不支持从布隆过滤器中删除元素
3. 位图文件大小与元素数量和误判率相关
4. 建议对输入数据进行哈希处理以提高性能
5. AND/OR运算要求两个位图文件的参数必须完全一致
## 依赖项