Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 这是不是;“字符串模式匹配”;算法?还是别的什么?_String_Algorithm_Language Agnostic_Pattern Matching - Fatal编程技术网

String 这是不是;“字符串模式匹配”;算法?还是别的什么?

String 这是不是;“字符串模式匹配”;算法?还是别的什么?,string,algorithm,language-agnostic,pattern-matching,String,Algorithm,Language Agnostic,Pattern Matching,我甚至不确定这叫做模式匹配,但我想做一些类似于这些规则的事情: 我有一个“对象”,它有一个“能力”属性,这是一个由空格分隔的名称序列。例如: a.capability = "" // no pattern b.capability = "foo" c.capability = "bar" d.capability = "foo bar" e.capability = "bar lol truc bidule" (假设每个对象必须具有与其他对象不同的图案) 然后我有一个全局上下文对象,它也有这样

我甚至不确定这叫做模式匹配,但我想做一些类似于这些规则的事情:

我有一个“对象”,它有一个“能力”属性,这是一个由空格分隔的名称序列。例如:

a.capability = "" // no pattern
b.capability = "foo"
c.capability = "bar"
d.capability = "foo bar"
e.capability = "bar lol truc bidule"
(假设每个对象必须具有与其他对象不同的图案)

然后我有一个全局上下文对象,它也有这样的属性:

context.capability = ""  // 1
// OR
context.capability = "foo"  // 2
// OR
context.capability = "bar"  // 3
// OR
context.capability = "bar foo"  // 4
// OR
context.capability = "lol"  // 5
现在,我们只想选择一个与上下文功能“最佳匹配”的唯一对象。 为此,我们遵循以下规则:

  • 如果对象没有模式,上下文没有模式,则选择该对象
  • 如果一个对象没有模式,而上下文有模式,则如果没有其他对象匹配,则选择该对象
  • 如果某个对象的模式名与上下文完全相同,则选中该对象
  • 选择上下文模式中包含的模式名称计数最多的对象 例如:

    a.capability = "" // no pattern
    b.capability = "foo"
    c.capability = "bar"
    d.capability = "foo bar"
    e.capability = "bar lol truc bidule"
    
    • 在上下文情况1中):
      a将被选择
      
    • 在上下文案例2中:
      b
    • 在上下文案例3中:
      c
    • 在上下文情况4中:
      d
    • 在上下文案例5中:
      e
    我写这篇文章甚至没有测试这个规则是否有效,它只是我想定义的草案

    我的问题是:

  • 你怎么称呼这种算法?(让我用正确的名字做未来的研究)
  • 是否已经定义了这样的规则?它看起来足够通用,以至于有人以前可以定义类似的规则,但是除了定义过载规则(如C++标准)的语言标准之外,我找不到任何类似的东西;李>
  • 是否有研究探索此类算法/规则的特性?我不确定它是否适合我的用例,但它似乎是正确的解决方案。然而,我没有实现这种语言特性的经验,所以我希望看到一些关于我可能会遇到什么问题的数据(但到目前为止我找不到任何数据)

  • 一位朋友建议看一些关于人工智能、专家系统、语言设计师和编译器实现的书。然而,一些关于如何找到这一特殊方法的数据的指导会很有帮助。

    我对你的问题没有直接的答案,但思考之后,我可以用几种方法来解决这个问题:

    • 文档检索(例如搜索引擎中使用的——它们如何如此快速地对析取查询进行排序?)
    • 非公制(链接用于通用公制版本)
    因此,我认为这个问题没有一个术语——它对太多的领域来说太有趣了。这三个领域(如谷歌)之间当然有大量的研究:


    文字是否总是按给定顺序书写?例如,酒吧总是保证排在富之前吗?在上下文和对象中?如果不是,值的写入顺序是否重要?例如,“巴富”是否等同于“福吧”?我相信规则4暗示排序并不重要,只是想确认一下。@ZeBlob问得好。起初我认为不,这并不重要,但我还不知道增加顺序作为一种优先权的含义。既然你这么说了,我记得Valve做了一个关于这类东西的演讲。我得找一下。现在假设顺序并不重要,只有匹配的值才重要(比如,如果它是一个值列表的话)。您希望有多少个对象?有多少上下文?有多少种不同的功能?您希望每个上下文具有多少功能?每个对象有多少功能?上下文或对象是否可以多次列出相同的功能?查询的应答对象是否离上下文“太远”而没有用处?这些功能、上下文或对象在编译时是已知的吗?是否有可以进行预处理的设置阶段?你的目标是什么平台?你的绩效目标是什么?(内存与处理器)不要点击并运行downvote。请解释原因。@Kaganar 1到N个对象,1个唯一的上下文,每个对象/上下文1个功能,但它包含0到N个值(我应该把它作为一个值列表,这样想)。值本身并不重要,任何值都可以在任何对象或上下文的任何功能中。列表中重复的值被视为仅出现一次。我不理解太远的概念。但是,如果有多个匹配对象,则可能存在歧义,我假设描述中没有。这个问题与你的所有问题无关。