【问题标题】:Boyer-Moore Substring Search Worst CaseBoyer-Moore 子串搜索最坏情况
【发布时间】:2020-10-13 20:11:42
【问题描述】:

我有一个关于学校的测验问题

“Boyer Moore 算法的最坏情况时间复杂度为 O(MN),其中 M 是字符串的长度,N 是模式的长度。”

这是真假问题,我对上面的陈述回答了假,因为我总是读到 N 是文本的长度,M 是模式的长度,但我的导师说你如何定义 M 和 N 并不重要,所以因为它声称声明是真实的,它是正确的吗?如果不是,我怎么能从科学上证明他的说法是错误的?

【问题讨论】:

  • @CodingTil 根本没有回答我的问题
  • 哪个更大:12 * 55 * 12
  • 什么?你无法“科学地”向他证明这一点,因为变量的名称并不重要。他们是名字。你可以称它们为“foo”和“bar”。此外,它是 m*n - 乘法是可交换的,所以哪个是哪个都没有关系。
  • 在链接中,有一个段落指出“在最坏的情况下,坏字符启发式可能需要 O(mn) 时间。”在此之前,它解释了为什么会这样。

标签: java algorithm substring boyer-moore


【解决方案1】:

你的导师是对的。改名字根本没关系,时间复杂度是M * N。一切都简化为:'因素的顺序不会改变产品'。

如果 M 和 N 倒置,复杂度仍然是 N * M 或 M * N。

如果时间复杂度是O(M^2 log N),那就完全不同了,那么是的,如果你把M的意思和N的意思颠倒过来,复杂度就完全不同了。

【讨论】:

  • 好吧,我很困惑,因为我看到的每个来源都定义了它们,我认为 M 是 Big O 表示法中的常数,因为我们总是在 Big O 中使用 n 谢谢你的纠正
【解决方案2】:

当我们编写一个数学表达式,然后跟进“其中 M 是 something 而 N 是 something”时,我们明确定义了 什么 M 和当我们在本文中使用它们时,N 表示。其他文本是否使用不同的字母来表示这些内容并不重要,因为我们的文本是独立的。现在这可能会令人困惑,因为这里 O(...) 本身 一个标准符号。 O(...) 的含义是从上下文中隐含的(我们正在谈论时间复杂度),并且这里没有任何内容可以覆盖它。但实际上,关于变量名称的唯一约定是,如果输入的一个相关维度要测量,我们通常使用 N,如果有两个,我们通常使用 M 和 N,但无论如何我们仍然需要说明我们将它们分配给什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2018-10-18
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多