使用通配符字符串作为键的有效ID查找

时间:2019-03-27 21:10:43

标签: c++ algorithm performance data-structures

我需要有效地将输入字符串与大量先前插入的字符串进行匹配,所有字符串的长度均为N。

这个问题通常可以用基数树来解决(示例question here),但是我有一些特殊的属性,我相信这使得该问题与迄今为止所见的有所不同:

  • 输入和存储的字符串都可以包含通配符_(没有字符串-存储或输入的字符串只能包含通配符)。例如,a_c将匹配_bc,而不匹配__b
  • 设置会更改,因此必须易于插入/删除条目。
  • 字符串不是任意的;字符串中每个位置的允许字符都不同。例如,第一个字符只能在[a-c]中,而第二个字符可以在[a-z]中。这是预先知道的,永远不会改变。
  • 我不需要实际返回字符串匹配。相反,我需要匹配字符串的ID。我提到这一点是为了在没有代表所有插入的字符串的情况下有一种有效的方式来存储图形。

我当前的解决方案是存储3维向量集,其中第一维对应于字符串中char的位置,另一维对应其值(包括通配符);第三维包含与该特定位置/值匹配的所有ID。为了找到匹配项集,我通过用输入字符串(类似于this proposed solution来查找矩阵)来计算所有ID的set_intersection

但是,该解决方案仍然不够快(这是我当前的瓶颈),我想知道是否有办法做得更好。

0 个答案:

没有答案