Big o 表达式求值的大O

Big o 表达式求值的大O,big-o,Big O,我是一名教师,我告诉我的学生,像y=15x+8这样的表达式的大O是O(1),但是当我们学习前缀和后缀时,我们讨论了计算这些表达式是O(N),因为你必须遍历方程的每个字符(假设你有一个字符串) 一个学生问,如果在幕后必须进行中缀、后缀或前缀求值,我们如何说表达式求值是O(1) 我不知道该回答什么。表达式本身没有任何时间复杂性。解决问题的算法可能具有时间复杂性。所以,这一切都取决于你定义什么是你的问题,以及你定义什么是复杂度的相关参数。如果您有固定的任务,例如 y := 15 * x + 8; 该

我是一名教师,我告诉我的学生,像y=15x+8这样的表达式的大O是O(1),但是当我们学习前缀和后缀时,我们讨论了计算这些表达式是O(N),因为你必须遍历方程的每个字符(假设你有一个字符串)

一个学生问,如果在幕后必须进行中缀、后缀或前缀求值,我们如何说表达式求值是O(1)

我不知道该回答什么。

表达式本身没有任何时间复杂性。解决问题的算法可能具有时间复杂性。所以,这一切都取决于你定义什么是你的问题,以及你定义什么是复杂度的相关参数。如果您有固定的任务,例如

y := 15 * x + 8;
该问题可定义为“使用输入参数
x
计算
15*x+8
的值”。因此,在这里,您希望将时间复杂度表示为依赖于
x
的函数。时间复杂度为O(1),假设我们讨论的是标准的32/64位算术计算,否则
O(logx)
,如果这是任意精度的算术

但是,如果将表达式的大小视为变量,则问题会变成“计算具有
k
节点的算术表达式树的值,其中
k
是一个输入参数”。正如您正确指出的,这是一个不同的问题,具有不同的复杂性。

表达式本身不具有任何时间复杂性。解决问题的算法可能具有时间复杂性。所以,这一切都取决于你定义什么是你的问题,以及你定义什么是复杂度的相关参数。如果您有固定的任务,例如

y := 15 * x + 8;
该问题可定义为“使用输入参数
x
计算
15*x+8
的值”。因此,在这里,您希望将时间复杂度表示为依赖于
x
的函数。时间复杂度为O(1),假设我们讨论的是标准的32/64位算术计算,否则
O(logx)
,如果这是任意精度的算术


但是,如果将表达式的大小视为变量,则问题会变成“计算具有
k
节点的算术表达式树的值,其中
k
是一个输入参数”。正如您正确指出的,这是一个不同的问题,具有不同的复杂性。

它应该与算术运算的数量成线性关系。它应该与算术运算的数量成线性关系