当前位置: 首页 > 知识库问答 >
问题:

“算法问题大小”实际上是什么意思?

蒲寂离
2023-03-14

我目前在我的大学学习数据结构课程,在之前的课程中确实做了一些算法分析,但这是我上一门课程中最困难的部分。我们现在正在我的数据结构课程中复习算法分析,所以我要回顾我上一门课程的教科书,看看它在这个问题上说了什么。

在教科书中,它说“对于我们想要分析的每个算法,我们需要定义问题的大小。”在谷歌上搜索时,还不完全清楚“问题大小”到底意味着什么。我试图对问题的大小有一个更具体的定义,这样我就可以在算法中识别它。

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

希望有人能为我澄清一些事情,你们都做得很好。

非常感谢。

共有3个答案

满才
2023-03-14

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

给出:

  • 你有一本很大的电话簿

问题:

  • 你被告知要找到约翰·麦卡利斯特的电话号码

方法:

  • 您可以在每个页面中搜索此条目(以线性方式)

回答您的问题:

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

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

鲁英卫
2023-03-14

问题大小是在合理编码中指定时,存储问题实例所需的位数。

丁嘉庆
2023-03-14

答案就在你引用的部分(我的重点):

对于我们要分析的每个算法,我们都需要定义问题的大小

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

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

 类似资料:
  • 我已经完全重新启动了我的计算机,并卸载了mysql至少4X。我花了很多时间想弄清楚这一点。在这方面投入了太多的时间。所以任何帮助都是非常感激的。答案可能是一些我可能不知道我必须做的事,但却是显而易见的。喜欢安装什么东西。 计算机状态: Mac El Captail、MySQL 5.7、Netbeans 8.1、Tomcat 8.0(告知不安装最新版本)、Connect/J(可能没有正确设置) 我遵

  • 我正在用Node和Cheerio构建一个网络刮刀,对于某个网站,我得到了以下错误(它只发生在这一个网站上,没有其他我试图刮掉的网站)。 它每次都发生在不同的位置,因此有时抛出错误的是,而其他时间则没有问题,它是一个完全不同的url: 这是非常棘手的调试,我真的不知道从哪里开始。首先,什么是套接字挂起错误?这是404错误还是类似的错误?或者这仅仅意味着服务器拒绝了连接? 我在任何地方都找不到解释!

  • 问题内容: 在构建RPM软件包的过程中,我必须指定BuildRoot,以后将在%install中使用它来侵害$ RPM_BUILD_ROOT。我一直认为$ RPM_BUILD_ROOT是RPM执行打包的假安装。然后,在使用RPM软件包进行安装时,它将安装到实际位置。例如: 我认为$ RPM_BUILD_ROOT仅用于打包过程,并且在某些方面,当用户执行“ rpm -ivh package.rpm”

  • 问题内容: 问号和冒号是什么意思? 谢谢 问题答案: 这是PHP 三元运算符(也称为条件运算符)-如果第一个操作数的值为true,则计算为第二个操作数,否则为第三个操作数。 将其视为可以在表达式中使用的“ if”语句。在根据某些条件进行简洁的分配时可能非常有用,例如 还有一个简写版本(从PHP 5.3开始)。您可以省略中间操作数。如果为真,则运算符将作为第一个操作数,否则为第三个操作数。例如: 值

  • 问题内容: 您能否详细解释上面的代码在做什么?我不太了解它是如何工作的,以及以后如何执行此语句,它如何链接到我: 问题答案: 好了,让我们详细说明一下该类。 这是一个标准的Oracle类,您可以通过调用来使用。 因此,让我们为该类做一个基本的例子: 现在,当您调用时,将创建该类的新对象(因此,将创建新的“ Scanner”)并将其存储在变量中。同时,您使用参数调用类的(所谓的)构造函数。这意味着它