You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类功能位置层级的二进制位集分配算法及SQL查询适配需求

层级位集分配算法解决方案

问题分析

当前的位集分配方式是每个层级独立从低位开始分配,导致不同分支的同层级节点位掩码重复(比如Plant B下的Building C和Plant A的位掩码都是00000001),无法通过按位与操作精准筛选出指定父节点下的所有子节点。

正确的位集分配算法:路径累积掩码

核心思路是每个节点的位集包含其父节点的所有位掩码,同时新增一个独属于自身的位,这样子节点的位集天然包含父节点的位信息,按位与操作就能准确匹配出所有下级节点。

重新分配后的位集示例

1.0 Plant A            00000001 (第0位)
    1.1 Building A     00000011 (父节点位 | 第1位)
        1.1.1 Room 1  00000111 (父节点位 | 第2位)
        1.1.2 Room 2  00001011 (父节点位 | 第3位)
    1.2 Building B     00010001 (父节点位 | 第4位)
        1.2.1 Room 3  00110001 (父节点位 | 第5位)
        1.2.2 Room 4  01010001 (父节点位 | 第6位)
2.0 Plant B            10000000 (第7位)
    2.1 Building C     10000001 (父节点位 | 第0位)
        2.1.1 Room 5  10000011 (父节点位 | 第1位)
        2.1.2 Room 6  10000101 (父节点位 | 第2位)
    2.2 Building D     10001000 (父节点位 | 第3位)
        2.2.1 Room 7  10011000 (父节点位 | 第4位)
        2.2.2 Room 8  10101000 (父节点位 | 第5位)

算法步骤

  1. 根节点(Plant层):为每个根节点分配一个全局唯一的位(比如从低位到高位依次分配,确保不重复)。
  2. 子节点(Building/Room层):
    • 继承父节点的完整位集;
    • 分配一个未被父节点及同层级兄弟节点使用的新位;
    • 将父节点位集与新位进行按位或操作,得到当前节点的位集。

验证SQL查询

查询Building A下的所有功能位置时,使用Building A的位集00000011作为掩码:

SELECT * FROM functional_locations WHERE (bitset & 0b00000011) = 0b00000011;

返回结果:

1.1 Building A     00000011
1.1.1 Room 1      00000111
1.1.2 Room 2      00001011

注意事项

  • 位数量限制:如果节点数量多或层级深,需使用足够位数的整数类型(比如MySQL的BIGINT是64位,可支持最多64个唯一节点位);
  • 位分配顺序:建议从低位到高位依次分配,避免浪费位资源;
  • 唯一性保证:同层级的兄弟节点必须使用不同的位,确保每个节点的位集唯一且包含完整路径信息。

内容的提问来源于stack exchange,提问作者gpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:37:52