Algorithm 该算法的时间复杂度为常数环

Algorithm 该算法的时间复杂度为常数环,algorithm,Algorithm,我知道: for(int i = 0; i < 1337; i++){ printf("\n"); } 现在是O(N)吗?请任何人解释如果您有一个恒定的输入,算法的复杂度将始终为O(1),因为您将执行相同数量的操作 但是,如果将s输入到您的算法中,复杂性将变为O(len(s))。请注意,O(N)在本例中没有任何意义,因为您没有定义什么是N它仍然是O(1),因为您仍在以恒定的次数执行相同的循环。它不会改变,如果你改变任何给定变量的值。你需要定义什么是N。不管你怎么看,你的第一个例

我知道:

for(int i = 0; i < 1337; i++){
   printf("\n");
  }

现在是O(N)吗?请任何人解释

如果您有一个恒定的输入,算法的复杂度将始终为O(1),因为您将执行相同数量的操作


但是,如果将
s
输入到您的算法中,复杂性将变为
O(len(s))
。请注意,
O(N)
在本例中没有任何意义,因为您没有定义什么是
N
它仍然是O(1),因为您仍在以恒定的次数执行相同的循环。它不会改变,如果你改变任何给定变量的值。

你需要定义什么是
N
。不管你怎么看,你的第一个例子是O(1)。你的第二个例子是长度为
s
的O(N),因为
strlen
是O(N)。

第二个例子中有N吗?对于以上两种情况,TC在什么方面应该有所不同?如果你的意思是s是可变的,那么现在是O(1337*| s |),它是O(| s |)。但你的问题到底是什么,我还是不明白……谁想出了定义一切的主意?在big-O表示法中,字面上任何东西都可以用作描述符。如果我写
O(M^N)
的话,很明显复杂性是由一些表示为
M
N
的可变部分所限制的,它们的复杂度达到了疯狂的
M^N
——只有当我想深入了解像期望值范围这样的细节时,知道
M
N
的起源才有帮助。它不是抽象复杂性所必需的statement@grek40-不确定您的意思-如果您不指定输入/变量/等与O(N)相关的内容,那么O(N)是毫无意义的。@OliverCharlesworth在某种程度上需要一个定义。然而,我认为在big-O的上下文中,任何显示的
M,N,…
(除非另有定义)都可以解释为表示某种线性缩放输入,它以表示的方式增加了复杂性。并不是每个人都对表示的详细映射感兴趣。现在,当我有一个线性复杂度约束时,我可以使用任何
O(N)
函数有限的次数,即使不知道
N
是什么细节。@grek40,我们都关注“定义N”问题的原因是,gar似乎认为N始终必须是循环。我在一门算法入门课程中担任了两年的助教,并多次看到这个初学者的错误。当然,我们这些已经了解渐近算法分析的人不需要一直明确定义N,但是初学者在学习之前通常需要明确定义N。
char * s = "abcdef";
for(int i = 0; i < 1337; i++){
       strlen(s);
      }