基于二进制树的防冲突算法的基本思想按照递归的方式将冲突的标签集合划分为两个子集,直到集合中只剩下一个标签为止。划分子集的算法有两种:
- 让标签随机选择所属的集合——随机二进制树算法
- 按照标签的标识符划分子集——查询二进制树算法
基于随机二进制树的防冲突算法
随机二进制树算法需要每个标签维持一个计数器,计数器初始值为0。
在每一个时隙开始时,如果标签的计数器为0时,则立即发送自己的标识符,否则该时隙不响应。
一般标签被成功识别,则该标签进入沉默状态,对以后时隙的阅读器不再响应。
因此,第一个时隙的所有标签都会回复,因为它们的计数器此时都为0。
每一个时隙结束后阅读器会将自己接收到的时隙状态(冲突或者不冲突)反馈给标签,场内的标签根据反馈的结果对自己维持的计数器进行调整。
标签调整计数器的规则:
- 如果该时隙为冲突时隙,那么参与响应的标签就会从0或1两个数字中随机选择一个,将其加到自己的计数器上;没有参与响应的标签直接将自己的计数器加1。这样冲突的标签集合会被分为两个集合,一个选0的集合和一个选1的集合。
- 如果该时隙没有冲突发生,则表明该时隙为没有标签响应的空时隙或者是只有一个标签响应的单时隙。被成功识别的标签进入沉默状态,直到新的识别过程开始,而没有被成功识别的标签则将自己的计数器减一。阅读器重复以上过程,直到所有标签被识别为止。
整个识别过程就像一棵二叉树的中序遍历
随机二进制树算法,不存在标签饿死的问题。它通过不断地将产生冲突的标签集合划分为两个子集合,直到某一个集合中只有一个标签存在时,成功识别该标签。标签过程是随机的,只需要维持一个内部状态,即计数器
基于查询二进制树的防冲突算法
查询二进制树算法是一个无状态协议,标签只需要根据阅读器广播的标识符前缀作比较,标签内部不需要维持任何状态。阅读器将维持一个二进制前缀,初始值为0。
每一个时隙开始时,阅读器广播该二进制前缀,标签将自己的标识符前几位与此二进制前缀进行比较,若相同则该标签发送标识符。否则标签保持沉默。
如果阅读器探测到有冲突发生,则在下次查询的时候将原来的二进制前缀后面加0或1,重新查询。
阅读器重复以上过程,直到识别完所有的标签。
整个标识过程就像是根据标签的标识符号建立一棵二叉树,又称为查询二叉树。
查询二进制树的协议的性能受标签标识符ID的长度以及分布的影响