【问题标题】:What does "algorithm problem size" actually mean?“算法问题大小”实际上是什么意思?
【发布时间】:2020-12-19 01:37:12
【问题描述】:

我目前正在我的大学学习数据结构课程,并且在之前的课程中做过一些算法分析,但这是我在之前的课程中遇到的最困难的部分。我们现在正在学习我的数据结构课程中的算法分析,因此我将回顾上一门课程的教科书,看看它对此事的看法。

在教科书中,它说“对于我们要分析的每个算法,我们都需要定义概率的大小- lem。”做一些谷歌搜索,它并不完全清楚“问题大小”的实际含义。我正在尝试更具体地定义问题大小,以便我可以在算法中识别它。

我知道,如果我有一个对数字列表进行排序的算法,那么问题大小就是 n,即列表的大小。话虽如此,除了在这种情况下,说这并不能说明“问题大小”实际上是什么。算法不仅仅是对数字进行排序的过程,所以我不能总是说问题的大小是列表中元素的数量。

希望有人可以为我澄清事情,并且你们都做得很好。

谢谢

【问题讨论】:

  • 如果您在字典中查找一个单词,它是字典的大小(该字典中的单词数)
  • 你问老师了吗?
  • 一种算法通常适用于以特定方式编码的输入。通常输入的大小是可变的。您可以将输入的元素数量或编码的大小视为“问题大小”。
  • 如果输入是一种集合(包括作为字符集合的字符串),它通常是集合的大小,但如果它是例如一个数字,它是数字本身。如果算法有多个输入,它会变得有点复杂。
  • @tobias_k,我也是这么想的,但是看看这里的答案(和谷歌搜索)我意识到我错了。问题大小确实只是意味着输入大小。

标签: algorithm


【解决方案1】:

为了澄清这个概念,让我用外行的术语来定义它:

给定:

  • 您的电话簿很大。

问题:

  • 您被告知要查找 John Mcallister 的人数。

方法:

  • 您可以通过每一页搜索此条目(以线性方式);
  • 或者,如果电话簿已排序,您可以使用二分查找

回答你的问题:

  • 这里的算法问题是在电话簿中查找条目
  • 算法问题的大小是数据的大小,您的算法应该适用于(在您的情况下,它是电话簿的大小。如果每页有 10 个条目,并且书有 50 页,则大小为50x10=500,即 500 个条目。)
  • 由于您的算法应该解决检查整个电话簿的任务,因此您实施该算法的任务/问题的大小为 500。

问题大小一般用n表示,字面意思是输入数据的大小。

【讨论】:

    【解决方案2】:

    问题大小是存储问题实例所需的位数,当它以合​​理的编码指定时。

    【讨论】:

      【解决方案3】:

      答案就在你引用的部分(强调我的):

      对于我们要分析的每个算法,我们需要定义问题的规模

      “问题大小”仅在数字上相对于算法进行定义。对于输入为数组或列表的算法,问题大小通常通过其长度来衡量;对于图算法,问题大小通常由顶点数和边数(有两个变量)来衡量;对于输入为单个数字的算法,问题大小可以通过数字本身来衡量,也可以通过二进制表示数字所需的位数来衡量,具体取决于上下文。

      所以“问题大小”的含义是特定于算法解决的问题。如果您想要一个可以适用于所有问题的更通用的定义,那么问题大小可以定义为表示输入所需的位数;但这个定义并不实用,仅在理论上用于讨论问题的类别(例如在多项式时间内可解决的问题)。

      【讨论】:

      • 如果输入是单个数字,则问题大小不是该数字的大小;它仍然是以位为单位的输入长度,它是幅度的对数。一个时间复杂度在输入幅度上是多项式的算法通常被称为有pseudopolynomial time complexity
      • @rici 正如我所说,这取决于上下文。如果您在谈论一个问题是否可以在多项式时间内解决,那么这被理解为表示位数的多项式;但是没有什么可以阻止您将算法的时间复杂度报告为其他事物的函数,人们经常这样做。如果您还没有看到示例,请在 Stack Overflow 中搜索“斐波那契时间复杂度”,您不会发现很多人将其作为位数的函数来衡量。
      • 没有什么能阻止人们错误地使用术语。但是我认为您将很难找到有关算法复杂性的参考材料,而这些参考材料并未仔细区分。这个问题不在非正式讨论的范围内;它被明确标记为在正式定义很重要的学术环境中。在这种情况下,我认为您的回答具有误导性。
      • 我知道我们需要定义问题大小,对于某些算法,我认为这很容易。我想我希望找到一个可以应用于所有算法的更具体的定义,这样我就可以轻松地看待一个问题,说“啊哈!这就是问题的大小。”我希望这是有道理的。
      • @rici 实际上,“位数”始终是定义的唯一学术背景;例如,您不会分析以 n 为位数的排序算法的时间复杂度。即使在学术论文中,n 也总是列表的长度(如果你想学究气,位数是 O(nw),其中 w 是字长,并不总是假定为常数)。至于“没有什么能阻止人们错误使用术语”,您认为使用“错误”一词的人包括大学讲师。
      猜你喜欢
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多