来看看这个函数的时间复杂度是多少

2016-12-26 00:16:20 +08:00
 lxiange

不要紧张,请看代码:

void foo1(int n) {
	int bar = 0;
	for (int i = 0; i < n; i++) {
		bar++;
	}
}

请问foo1的时间复杂度?:P

12381 次点击
所在节点    程序员
168 条回复
laxenade
2016-12-26 02:01:09 +08:00
所以楼主想表达什么?
xupefei
2016-12-26 02:09:10 +08:00
@lxiange 维基并没有说 “长度” 这个定义。具体来说, x 是什么根本没有限制。而且一般说来, “长度” 这个定义一般指的是数组的长度,而不是每个数字的长度。
nccers
2016-12-26 02:17:30 +08:00
你们都不睡觉?...........
binux
2016-12-26 02:44:45 +08:00
@lxiange 「大 O 表示法的输入从来就」没有规定「是“长度”」,它随什么增长, n 就是什么;或者反过来说,你指定 「 n=15 ,对应于二进制 1111 ,也就是说,长度是 4 (定义为 m ,你不能给同一个符号指定两个含义)」,那么 O(n) = O(2^m)。

大部分时候,复杂度随一元或者二元变化时, n 指的是什么过于显而易见,就直接省略了,但是并不代表它总是长度。
Ahri
2016-12-26 03:26:43 +08:00
民间计算机科学家
lc4t
2016-12-26 04:30:05 +08:00
楼主知道大 O 记号的定义和 n 是怎么来的吗?
shiji
2016-12-26 04:31:30 +08:00
"不要紧张,请看代码:"
"料想到绝大多数人都会认为...所以特意发帖...."
"虽然不搞 TCS ,但是了解了解算法时间复杂度的计算方法也不是坏处。"
"当然,没有搞过 TCS 的人是不会注意到这一点的,绝大多数人都不懂的东西,也就只能拿来娱乐娱乐了。
"
"面试时别耍这个小聪明,因为你的面试官肯定也不懂这个"
reus
2016-12-26 04:36:07 +08:00
原来是连大 O 定义都不懂的民科。
CosimoZi
2016-12-26 05:07:48 +08:00
民科
MrGba2z
2016-12-26 05:36:54 +08:00
这是....冷笑话?
jedihy
2016-12-26 05:58:22 +08:00
@xupefei 确实是输入长度的限制,这个算法导论上有。这个地方楼主是偷换概念了,我说这个东西时间复杂度是 O(n)是绝对没错的。如果说它的时间复杂度是 o(2^n),你必须给出 n 的严格定义,不能偷偷把 n 的定义给换了。
Perry
2016-12-26 05:59:11 +08:00
n 是 digit 还是 bit 不应该在题目里说清楚么?反正随意切换的啊,为什么 digit 的答案就算错了?
jedihy
2016-12-26 06:03:56 +08:00
@lxiange 不过是从算法理论角度还是其他角度,你都错了,你重定义了 n 。
他的时间复杂度是可以等于 O(2^m),但是 m = log_2 n = maximum number of bits in variable n 。
O(2^m) = O(2^(log_2 n)) = O(n),证毕。
RecursiveG
2016-12-26 07:26:40 +08:00
如果 n 以 binary 表示,则复杂度为 O(2^n)
如果 n 以 unary 表示,则复杂度为 O(n)
既然楼主不说明,那我可以随便挑一种咯?
xcatliu
2016-12-26 08:19:53 +08:00
@lxiange
「举个例子, n=15 ,对应于二进制 1111 ,也就是说,长度是 4 。
循环 16 次,不正好就是 2^n 么?」

先说 n=15 ,过会又说 n=4 ,这偷换概念太明显了。
zmj1316
2016-12-26 08:23:56 +08:00
@lxiange hh 敢问 lz 是哪个 985 211 连计算理论都不讲,况且计算理论不是重点在可计算性吗?
livexia
2016-12-26 08:32:39 +08:00
民科耍小聪明
owt5008137
2016-12-26 08:49:21 +08:00
如果开全了编译优化的话,应该是 O(0)吧
q397064399
2016-12-26 08:51:47 +08:00
@livexia 这不算民科吧,算法复杂度 是中规中矩的 算法与数据结构的入门内容
Phariel
2016-12-26 08:52:56 +08:00
吃瓜群众表示:我就喜欢看打脸。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/330114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX