算法概念问题,O(1)与O(2)的区别?

zbzpo2002 2005-10-08 10:58:10
讨论最坏情况下时间复杂度:

如果存在存在正的常数C和自然数N0,使得当N>=N0时有f(N)<=Cg(N),则称函数f(N)当N充分大时有上界,
且g(N)是它的一个上界,记为f(N)=O(g(N)).

大家讨论一下O(1)和O(2)的区别!
...全文
2812 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
icansaymyabc 2005-10-11
  • 打赏
  • 举报
回复
O(2)==O(1)==O(0)
晨星 2005-10-11
  • 打赏
  • 举报
回复
没有这种说法。
Kernall 2005-10-11
  • 打赏
  • 举报
回复
那就是说O(2)和O(1)复杂度相同,但代价大些。
arsaluo 2005-10-10
  • 打赏
  • 举报
回复
同意楼上的
wuming2003 2005-10-10
  • 打赏
  • 举报
回复 1
O(1)常数时间,一般与问题规模无关都采用这一种记法,当然如果想写O(2),O(3).....都可以

讨论这种问题没什么意义
snowbirdfly 2005-10-08
  • 打赏
  • 举报
回复
但是还是没有这样说的啊~~~
O(2)还是没见过~~
JohnTitor 2005-10-08
  • 打赏
  • 举报
回复
同意 steedhorse(晨星)

不过似乎也可以这样理解:
令C1 = C,g1(N) = 1,令f1(N) <= C1*g1(N),即有 f1(N) <= C * 1,即f1(N) <= C*1
即有f1(N) = O(g1(N)) = O(1);
令C2 = C/2,g2(N) = 2,令f2(N) <= C2*g2(N),即有 f2(N) <= C/2 * 2 ,即f2(N) <= C*1
即有f2(N) = O(g2(N)) = O(1);因为g2(N) = 2,所以又有f2(N) = O(g2(N)) = O(2);

所以有O(1) = O(2),及同一个数量级的
晨星 2005-10-08
  • 打赏
  • 举报
回复
以上“^”表示乘方。
晨星 2005-10-08
  • 打赏
  • 举报
回复
哦,对,常量复杂度就表示为O(1),这个是有的,前面说错了。
比常数复杂度复杂一些的,常见的是对数阶复杂度,即O(logn),比如有序数组的二分查找;
然后常见的有O(n),比如链式表的随机访问;
然后是,O(nlogn),比如某些排序算法;
O(n^2),等等。
有些算法特别复杂,复杂度可能是O(n!),O(n^n)等等。
也没有“O(n/2)”这么种说法。
当然O(n^2),O(n^3),O(n^0.5)还是有意义的,而且是有区别的。
SnakeYangNan 2005-10-08
  • 打赏
  • 举报
回复
有O(2)这样的说法吗?
snowbirdfly 2005-10-08
  • 打赏
  • 举报
回复
O(1)这个应该是时间复杂度为常量~
没有见过O(2)~~
这个应该也是常量级的~~~
O(n)这个表示复杂度为n~~
...
O(2)这就不懂了~~~
晨星 2005-10-08
  • 打赏
  • 举报
回复
复杂度是用来表达算法的复杂程度跟算法输入的规模N的关系。如果不管N是多大,算法的复杂程度都固定是1或者2(比如1条指令,2个循环),那么在“复杂度”这个概念上,两者都一样,叫做“常数阶”复杂度。比如访问一个数组的元素就是常数阶复杂度,因为不管数组多长,访问其中某个元素都是可以通过首地址加一个偏移量来完成。
晨星 2005-10-08
  • 打赏
  • 举报
回复
没有“O(1)”和“O(2)”这种说法。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧