我目前正在将一组“标签”(就像Stackoverflow标签一样)建模为BitVec。我事先知道所有可能的标签是什么,我已经有150个。
我目前的策略是使用BitVec,每个位代表一个给定的标签。这使我基本上可以将BitVec用作集合。但这意味着我有一堆150位宽的BitVecSort。
我做了很多会员检查和添加/删除标签,代码看起来像
bitmask = 1 << property_index[value]
return my_set & bitmask == bitmask
在使它正常工作之后,我意识到SetSort是一件事情。
当我从BitVec转到SetSort时会看到性能提升或下降时,是否存在指导?我知道SetSort是建立在BoolSort数组之上的,但是我对z3还是太陌生,无法对性能影响有一个很好的了解。
我正在构建一个模型检查器,它正在做很多工作,通常需要20-90分钟才能运行。我很好。我有约10000个变量,大多数是整数,但其中有几百个“集合”。但是从性能方面考虑,消除任何“初学者错误”将是很好的。