选择与大型集合匹配时基于位掩码排除项的一组特征的最佳方法是什么?

萨格马克

假设我有一个庞大的静态对象集,并且我想根据一组复杂的标准(需要进行昂贵的测试)将它们与所有对象进行匹配。

还假设可以识别出大量可用于排除潜在匹配项的功能,从而避免进行昂贵的测试。如果我要测试的对象中存在某个功能,则可以排除集合中不具有此功能的任何对象。换句话说,功能的存在是必需的,但不足以使测试通过。

在那种情况下,我可以为集合中的每个对象预先计算一个位掩码,以指示对象中是否存在每个功能。我还可以为要测试的对象计算它,然后像这样(伪代码)遍历数组:

objectMask = computeObjectMask(myObject)
for(each testObject in objectSet)
{
    if((testObject.mask & objectMask) != objectMask)
    {
        // early out, some features are in objectMask
        // but not in testObject.mask, so the test can't pass
    }
    else if(doComplicatedTest(testObject, myObject)
    {
        // found a match! 
    }
}

所以我的问题是,给定有限的位掩码大小,并列出大量可能的特征,并列出对象集中每个特征的频率表(如果要计算特征之间的相关性,还可以访问对象集等) ,我可以使用哪种算法来选择要包含在我的位掩码中的最佳功能集,以最大程度地提高早期淘汰次数并减少测试次数?

如果我只选择最常见的x项功能,则两个遮罩中都包含该功能的机会会更高,因此似乎可以减少早期淘汰的次数。但是,如果我选择了x个最不常用的特征,则objectMask可能经常为零,这意味着不可能提前淘汰。进行实验似乎很容易,并且提出了一组具有良好性能的中频功能,但是我对是否有理论上最好的方法感兴趣。

注意:在可能的myObjects集合中,假定每个功能的频率与objectSet中的频率相同,尽管我很想知道如何处理(如果不是)。我也想知道是否有一种算法,可以根据给定的大量候选对象样本来找到最佳特征集。

可能的应用:将输入字符串与大量正则表达式进行匹配,使用诸如“必须以相同顺序包含相同字母,但可能在单词中的任意位置插入额外的字符”等条件,将字符串与大型单词词典进行匹配等等。示例功能:“包含文字字符D”,“在字符串中包含字符F,后跟字符G”等。显然,可能的功能集将高度依赖于特定的应用程序。

吉伽美格斯

您可以尝试使用aho-corasick算法。它是最快的多模式匹配器。基本上,它是具有故障链接的有限状态机,该故障链接通过trie的广度优先搜索计算得出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

选择与大型集合匹配时基于位掩码排除项的一组特征的最佳方法是什么?

来自分类Dev

为一系列位创建位掩码的最佳实践方法是什么?

来自分类Dev

匹配gsub中的一组数字,但以“ /”符号开头时则排除一组相同的数字

来自分类Dev

Neo4j-基于一组ID检查数据库中是否有多个项目的最佳方法是什么

来自分类Dev

迭代JavaScript中对象的一组过滤属性的最佳方法是什么?

来自分类Dev

在Java中构建一组动态长度的对象的最佳方法是什么?

来自分类Dev

从字符串中的一组单词中查找单词的最佳方法是什么?

来自分类Dev

在Java中构建一组动态长度的对象的最佳方法是什么?

来自分类Dev

存储一组字符串的最佳方法是什么

来自分类Dev

在 Swift Vapor 中返回一组响应可表示对象的最佳方法是什么?

来自分类Dev

从目标C的数组中获取一组唯一对象的最佳方法是什么

来自分类Dev

枚举值中包含的位掩码标志的最佳方法是什么?

来自分类Dev

选择与一组前缀匹配的行

来自分类Dev

制作一组副本并排除一项

来自分类Dev

选择具有一组特定特征的行

来自分类Dev

将集合引用从视图传递到 VM 时跟踪集合引用的最佳方法是什么

来自分类Dev

Java:迭代集合的最佳方法是什么?

来自分类Dev

Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?

来自分类Dev

复杂形状匹配的最佳方法是什么

来自分类Dev

替换字符串中首次出现的一组可能字符的最快方法是什么?

来自分类Dev

生成一组(相对)简短的“邀请码”的好方法是什么?

来自分类Dev

在c ++中拥有一组结构的正确方法是什么?

来自分类Dev

在C ++中平均一组复数的正确方法是什么?

来自分类Dev

生成一组(相对)简短的“邀请码”的好方法是什么?

来自分类Dev

检查这些条件是否适用并执行一组任务的有效方法是什么?

来自分类Dev

处理大型CSV文件的最佳方法是什么?

来自分类Dev

序列化大型稀疏矩阵的最佳方法是什么?

来自分类Dev

在Erlang中读取大型JSON文件的最佳方法是什么?

来自分类Dev

PHPexcel导出处理大型导出的最佳方法是什么

Related 相关文章

  1. 1

    选择与大型集合匹配时基于位掩码排除项的一组特征的最佳方法是什么?

  2. 2

    为一系列位创建位掩码的最佳实践方法是什么?

  3. 3

    匹配gsub中的一组数字,但以“ /”符号开头时则排除一组相同的数字

  4. 4

    Neo4j-基于一组ID检查数据库中是否有多个项目的最佳方法是什么

  5. 5

    迭代JavaScript中对象的一组过滤属性的最佳方法是什么?

  6. 6

    在Java中构建一组动态长度的对象的最佳方法是什么?

  7. 7

    从字符串中的一组单词中查找单词的最佳方法是什么?

  8. 8

    在Java中构建一组动态长度的对象的最佳方法是什么?

  9. 9

    存储一组字符串的最佳方法是什么

  10. 10

    在 Swift Vapor 中返回一组响应可表示对象的最佳方法是什么?

  11. 11

    从目标C的数组中获取一组唯一对象的最佳方法是什么

  12. 12

    枚举值中包含的位掩码标志的最佳方法是什么?

  13. 13

    选择与一组前缀匹配的行

  14. 14

    制作一组副本并排除一项

  15. 15

    选择具有一组特定特征的行

  16. 16

    将集合引用从视图传递到 VM 时跟踪集合引用的最佳方法是什么

  17. 17

    Java:迭代集合的最佳方法是什么?

  18. 18

    Cypher:基于几个ASCII代码段匹配子图的最佳方法是什么?

  19. 19

    复杂形状匹配的最佳方法是什么

  20. 20

    替换字符串中首次出现的一组可能字符的最快方法是什么?

  21. 21

    生成一组(相对)简短的“邀请码”的好方法是什么?

  22. 22

    在c ++中拥有一组结构的正确方法是什么?

  23. 23

    在C ++中平均一组复数的正确方法是什么?

  24. 24

    生成一组(相对)简短的“邀请码”的好方法是什么?

  25. 25

    检查这些条件是否适用并执行一组任务的有效方法是什么?

  26. 26

    处理大型CSV文件的最佳方法是什么?

  27. 27

    序列化大型稀疏矩阵的最佳方法是什么?

  28. 28

    在Erlang中读取大型JSON文件的最佳方法是什么?

  29. 29

    PHPexcel导出处理大型导出的最佳方法是什么

热门标签

归档