Algorithm 大O表示法适用于while(true)循环吗? while(true){ 系统输出打印号(“hola”); 打破 }

Algorithm 大O表示法适用于while(true)循环吗? while(true){ 系统输出打印号(“hola”); 打破 },algorithm,big-o,Algorithm,Big O,我这里有一个while循环和true条件的代码片段。我想知道是否可以将大O表示法应用于此代码段。while循环是否具有true条件,因为该循环可能包含break语句,这说明了什么。事实上,在将代码片段添加到问题中之后,很明显问题是关于而循环的,循环在第一次迭代时中断,这意味着问题的标题具有误导性 所以,这里的问题是:“带真实条件的while循环”是一个微不足道的技术性问题,不适合讨论诸如大oh符号之类的理论概念。在关于big oh表示法的讨论中,我们甚至不想知道该算法是用什么语言编写的,也不想知

我这里有一个
while
循环和
true
条件的代码片段。我想知道是否可以将大O表示法应用于此代码段。

while循环是否具有
true
条件,因为该循环可能包含
break
语句,这说明了什么。事实上,在将代码片段添加到问题中之后,很明显问题是关于
循环的,循环在第一次迭代时中断,这意味着问题的标题具有误导性

所以,这里的问题是:“带真实条件的while循环”是一个微不足道的技术性问题,不适合讨论诸如大oh符号之类的理论概念。在关于big oh表示法的讨论中,我们甚至不想知道该算法是用什么语言编写的,也不想知道该语言是否包含诸如
while
true
break
等关键词

我们所关心的是算法所做的工作量如何随输入单元的数量变化而变化

在迭代次数不依赖于输入大小的特殊情况下,无论是因为它是无限的还是因为它是一个常数,big oh当然仍然适用。以数组查找或哈希映射查找为例,它被公认为
O(1)
。甚至是循环立即中断的情况,就像这个stackoverflow问题一样


无穷大的情况有点奇怪,有些人可能不同意,但很明显,我们这里有一个算法,它需要无限长的时间来处理单个输入单元。因此,如果我们对此感兴趣,我们将讨论
O(∞)

大O表示法是我们可以用来分析算法的工具。我们应用它的方法是计算算法执行所需的步骤数,将此步骤数表示为输入大小n的函数,并通过忽略常数因子和支配项简化计数/分析

对于您的算法,没有“输入”,因此不清楚n应该指什么,但步数也是固定的;它打印一个固定长度的字符串,然后
break
语句终止循环。因此它的运行时间是O(1),即常量


一般来说,您在算法中使用的控制流语言构造的类型并不重要(例如,
while
for
,与尾部递归),因为您只需编写一个等效算法,该算法对不同的控制流构造执行相同的操作。等效算法将以相同的步骤数执行,因此以这种方式更改语法不会影响分析结果。该操作由Donald Knuth on完成,其中包括for
while(true)
/
break
)可以转换为。

请将代码作为文本发布。(无限循环中的
n
将是什么?)(∞)
有时可用于表示一个程序,该程序不终止,但循环确实终止,因此在本例中为
O(1)
。这个特定的循环只执行一次。它基本上是一个noop。算法不做任何额外的事情,也不以任何方式随输入进行缩放。这与大O无关。请删除图像并将代码作为文本发布,这很难看,不可搜索。我认为
O(∞)
与算法无关,因为算法被描述为
算法是定义良好的、计算机可实现的指令的有限序列。
算法可以在有限的空间和时间内表达。
。因此算法的复杂度不能是无限的。oth上的程序当然,你的观点是正确的。维基百科和韦氏词典似乎在他们对“算法”的定义中包含了这一点要求它包含有限数量的步骤。但这可能是任意的。牛津和剑桥似乎没有在他们的算法定义中包含这样的要求。无限循环不会依赖于输入的大小/规模,它的执行时间只是无限的,不管什么。作为一个知识较少的学生,我不会r为什么大O被认为是一个无限循环。无限while循环用有限的步数表示;代码很容易放在屏幕上,屏幕上的像素数是有限的。运行时间是无限的,而不是算法的表达式。关于“用有限的步数表示”的规则从理论上讲,需要排除那些只需无限多个打印语句就可以“计算”一个不可计算数字的所有数字的算法。@kaya3啊,谢谢你阐明了这一点。这是有道理的。所以俗话说的“永无止境的故事”不可能是算法,这不是因为它描述的事件永远不会结束,而是因为叙述(故事的文本)没有结束。