PHP函数strlen()的算法复杂度

19

最近我在面试中被问到这个问题,但我不知道该如何回答。

有人能回答这个问题并描述一下吗?

2个回答

26

由于长度已存储为属性,因此时间复杂度为O(1): 来源

然而,与其争辩这个琐事,不如讨论一下微观优化剧场。我们的主人公在这里这里提供了友善的讨论;阅读这两个链接,你将找到一个好话题来改变下一次类似问题的对话氛围,无论你是否知道特定答案!

面试官对你的离题回答的反应会告诉你很多关于你想不想和他们一起工作。


4
感谢夸赞 "micro-optimization theater."。这里提供了三个链接,它们是关于"Profile"(性能剖析)的,可以参考 profileprofile - Charles
2
我没有看到你的源代码中提到字符串长度被存储为属性。 - Nikolai
@Nikolai 看起来他们在过去的三年里已经整理了文档。但是,你也可以从 null 字符不终止字符串这一事实中推断出来 - strlen("te\0st") = 5 在注释中有提到。 - Will
您引用的来源似乎已被删除。 - Quolonel Questions
2
比较一个O(n)字符串连接实现和其他一些O(n)字符串连接实现可能只是微观优化的表演。知道strlen是O(1)还是O(n)可能会产生巨大影响;只需看看sscanf意外的O(n)实现如何导致O(n^2)解析即可。 - jamesdlin
显示剩余3条评论

0
我会认为这个函数的时间复杂度是O(n),因为它需要遍历整个字符串一次。

1
为什么需要这样做呢?你假设它被存储为一个字符数组,没有其他的信息。 - mpen
因为那是正确的答案,显然不会是二次及更糟糕的时间复杂度。 - Ferazhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接