strcmp()的平均时间复杂度是多少?

金丝龙麟闪电劈 2014-07-27 03:22:38
strcmp最好的情况下是O(1),最差情况下O(N),那么平均时间复杂度是多少呢?
在QQ上有大神说,其平均时间复杂度是O(1),不知对否?
...全文
784 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2014-07-28
  • 打赏
  • 举报
回复
首先,在不特别说明的情况下,时间复杂度一般是指最坏情况下的时间复杂度,对于strcmp来说,就是O(n) 一般来说平均复杂度为:设每种情况的出现的概率为pi,则为sum(pi*f(n)) 对于strcmp来说,在任意0到n-1的任意下标位置break的概率是均等的 即平均复杂度为:1/n * (O(1) + O(2) + …… + O(n)) = O(n/2) 但是 O(n/2) 和 O(n) 其实是一个级别的, 都是线性级
xuzhouweihao 2014-07-28
  • 打赏
  • 举报
回复
hi wangdahu888 自学数据结构和算法不久,对该问题了解不深, 不过我认为复杂度就是O(n)啊,平均复杂度真没有这个概念。 就比如你去n个数里面查找一个数a,那它的复杂度就是O(n)。 二楼和五楼观点都很不错,学习了!
lionfresh 2014-07-28
  • 打赏
  • 举报
回复
就是O(n)啊,还不知道有一个平均复杂度。
tianyabin 2014-07-27
  • 打赏
  • 举报
回复
做为新的c++开发人员非常值得一看
brookmill 2014-07-27
  • 打赏
  • 举报
回复
好像不是1/26,而应该是1/256……
brookmill 2014-07-27
  • 打赏
  • 举报
回复
不会是O(1)吧?QQ大神有没有说为什么? 我想到的解释是,在比较两个完全随机的字符串的时候,连续多个字符相等的概率指数级的减小。 比如:需要比较第二个字符的概率是1/26,需要比较第三个字符的概率是1/(26*26),需要比较第四个字符的概率是1/(26*26*26),…… 但是我不知道怎么从这个算出平均复杂度。
Falleyes 2014-07-27
  • 打赏
  • 举报
回复
平均时间复杂度同意二楼。 至于复杂度是O(1),我觉得也有道理。因为调用strcmp比较字符串,一般字符串的长度不会太长,所以可以理解为常量级。
shucheng36 2014-07-27
  • 打赏
  • 举报
回复
you know what, lisong694767315 说得对,我之前说的太不经大脑了,在这种技术论坛,应该对自己的回答负责 但是身为版主还用这种嘲讽的语言,可见论坛戾气之重,还能不能愉快地讨论技术了
derekrose 2014-07-27
  • 打赏
  • 举报
回复
复杂度都依赖输入了 我的天。。
神奕 2014-07-27
  • 打赏
  • 举报
回复

int strcmp(const char* str1,const char* str2){
	while(*str1++==*str2++)
	{
		if(*str1=='\0')
			return 0;
	}
	return *str1-*str2;
}
假设字符串的长度为n,那么在0~n-1任何位置比较结束都有可能,假设都是n分之一,则1/n*(1+2+3+...+n) = O(n),所以平均情况应该是O(n)。
shucheng36 2014-07-27
  • 打赏
  • 举报
回复
这个严重依赖于输入啊

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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