2022.12.20 午夜随笔(洗澡)
2022.12.20 午夜随笔(洗澡)之一年了,终于把TAMA转化为反向匹配成为了可能
有人说,我们每天都在见证历史,有人说,我每天都在沉淀历史。
(700字小作文)
从前,它是叫“方向匹配基本定理(二)”的,即基于同一个数据结构,去找出匹配的谓词,就可以设计出正向匹配算法,去找出不匹配的谓词,就可以设计出反向匹配算法。
基于反向REIN的数据结构可以设计出正向fREIN算法, 基于反向HEM的数据结构可以设计出正向fHEM算法, 基于BG-Tree数据结构可以设计出正向和反向匹配算法fBG-Tree,bBG-Tree 但基于TAMA数据结构没能设计出反向匹配算法, 由于不够通用,改成了正反匹配算法设计方法(FBMAD)这名称
但就在刚刚,回忆起C-BOMP、DMFT、FBMAD, 觉得C-BOMP偏工程、DMFT偏理论、FBMAD偏设计, 偏理论的没这么有实用性,效果没这么好 进而在思考它们之间的区别,是一环套一环的关系, 想到怎么介绍FBMAD好时,突然想到了存储!不只是匹配 即从正向和反向去存储和搜索匹配和不匹配的谓词 确实,fREIN、fHEM作为两个应用该理论设计出的算法都在存储上改了数据结构,存储匹配的谓词 而BG-Tree和AWB+Tree作为伪二叉树,其正向反向可以基于同一套存储方式同一套数据结构, 只需在搜索时通过找匹配/不匹配的来区分正向/反向匹配算法, 也正因此可以设计混合匹配算法
之前没相通怎么基于TAMA设计反向匹配,似乎是陷入了思维陷阱 只是去想怎么基于现有结构去找不匹配的,怎么想也设计不出来(理论的指导作用)
因为没动存储方式,确实理论里只说去找匹配不匹配,没有说存匹配不匹配 这样一来,在TAMA插入订阅时存储不匹配的区间,搜出来的自然就是不匹配的 设谓词区间为[l,h],值域为[1,R],那么不匹配的区间为[1,l-1],[h+1,R] (l>1,h<R) 按原来的方式插入这两个不匹配区间到每一层的桶里, 搜索时仍旧是遍历事件值所落入的桶,在同一个位集上标记这些桶里的谓词所属的订阅 对于最后一层,当然还是按之前优化后的一样通过两次比较实现精确检索 这样一来,就把好好的一个正向TAMA匹配算法转化成了一个好好的反向TAMA匹配算法!
修正后:
#算法设计问题#