求助,分析一个算法的运行时间

2015-09-01 07:59:07 +08:00
 20015jjw

有个算法,输入是一个长度为 n 的 list

有 50%的几率,这个算法走一遍 list 就能 return ,那用时就是 O (n )
还有 50%的几率,这个算法走一遍,先会走一遍 list ,然后把 list 切成 1/3 长,然后递归地继续跑这个 1/3 长的 list ,然后这个用时是啥...

然后我就不知道怎么分析这个算法的总体时间了...
求学过算法的指点 qwq

1655 次点击
所在节点    问与答
7 条回复
yxjxx
2015-09-01 08:33:31 +08:00
算法导论 主方法
c742435
2015-09-01 09:50:12 +08:00
貌似还是 O (n )
c742435
2015-09-01 09:53:13 +08:00
我数学特别烂,但我知道如果把你的问题中的 1/3 换成 1/2.然后用时就是 1/2 + 1/4 + 1/8......,结果等于 2 ,是一个常数。所以你问题的用时倍数肯定也是一个常数 而且小于 2 。
而时间复杂度乘以一个常数是不变的。
Valyrian
2015-09-01 10:04:02 +08:00
假设算法的时间是 f (n )
那么 E (f (n )) = 0.5 * O (n ) + 0.5 * (O (n ) + E (f (1/3n ))) = O (n ) + 0.5 * E (f (1/3 n ))
根据 master theorem , E (f (n )) = O (n )
wbingeek
2015-09-01 12:09:25 +08:00
hitmanx
2015-09-01 13:17:08 +08:00
”还有 50%的几率,这个算法走一遍,先会走一遍 list ,然后把 list 切成 1/3 长,然后递归地继续跑这个 1/3 长的 list ,然后这个用时是啥...“

把 list 切成 1/3 长后,是要处理 3 个"1/3"长的,还是只处理其中一个?如果是 3 个都要处理的话,这就是归并排序吧, O (nlgn )。如果只处理其中一个的话,那是 O (n )。不知道有没有算错
wshcdr
2015-09-01 13:26:51 +08:00
你这个应该还是 O (n )

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

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

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

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

© 2021 V2EX