1楼:匿名用户
肯定是第一个的时间复杂度低,把两种函数的曲线画出来就清楚了
为什么该循环的时间复杂度为o(log{2}n):int i = 1; while(i <= n) i = i * 2;
2楼:匿名用户
因为从判断语句上看i从1循环到n,但是循环体中每次循环i都乘以2,所以实际上循环体只执行了log2n次(这是个简单的数**算吧!),而判断时间复杂度一般都是看循环体的实际有效执行语句的次数,所以该循环的时间复杂度是o(log2n)。
c++中的时间复杂度o(1)与o(n)有什么区别
3楼:杜xiao若
c++中的bai时间复杂度o(du1)与o(n)的主要区别在于:zhi
1、时间复杂度o(1)是常数阶
dao,其基本
内操作重复执行的次数是一个固定的容常数,执行次数不存在变化;
2、而时间复杂度o(n)是线性阶,其基本操作重复执行的次数是与模块n成线性相关的,其值会随着模块n的变化而变化,当模块n的规模确定为定值后,其时间复杂度转化为o(1)。
扩展资料1.时间复杂度的计算方法:
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用t(n)表示,若有某个辅助函数f(n),使得t(n)/f(n)的极限值(当n趋近于无穷大时)为不等于零的常数,则称f(n)是t(n)的同数量级函数。记作t(n)=o(f(n)),称o(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
4楼:幻梦·人生
时间复杂度是
来一个函源数,它定量描述了该bai算法的运行时间。常du
见的zhi时间复杂度有以下几种。
1,daolog(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!
1指的是常数。即,无论算法的输入n是多大,都不会影响到算法的运行时间。这种是最优的算法。而n!(阶乘)是非常差的算法。当n变大时,算法所需的时间是不可接受的。
用通俗的话来描述,我们假设n=1所需的时间为1秒。那么当n = 10,000时。
o(1)的算法需要1秒执行完毕。
o(n)的算法需要10,000秒 ≈ 2.7小时 执行完毕。
o(n2)的算法需要100,000,000秒 ≈ 3.17年 执行完毕。
o(n!)的算法需要******xx(系统的计算器已经算不出来了)。
可见算法的时间复杂度影响有多大。
所以o(1)和o(n)差了2.7小时,区别显而易见。
5楼:匿名用户
你理解错了,bai
我举个du例子:
你设计了一个字符串zhi类:客
dao户有时需要知道字符串的专长度,
所以有两种属设计getlength()函数的方法1。每次客户询问长度,你都用循环检测串长,即for(i=0;str[i]!=0;++i)这样效率低 时间复杂度o(n)
2 每次串内容改变时才算长度,算好后存起来,以后客户需要知道字符串的长度就直接把变量值返回这样效率高 时间复杂度o(1)
6楼:匿名用户
o(1)复杂度是与输入数据copy
无关,baio(n)是与输入数据成正比。
对于du程序zhia,for(int i=0;i<1000;i++),当输入任意的n时循环次数dao均为1000,复杂度为o(1);
对于程序b,for(int i=0;i 设序列长度为n,在最坏的情况下,时间复杂度为o(log2n)的算法是什么 7楼:匿名用户 二分法二分法的基本思想如下: 假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。 由于是数组是预先排序好的,所以可以采用折半查询的方式,每次抛掉待查询部分的一半 这样,长度为n的数组,只需要log2n次查询即可,2是对数的底。 例如,长度为7的数组,最多只需要3次就可以找到o(log2n)只是表示是log2n同一数量级,因为有个取整的问题,而且也有可能在查询过程中就已经找到(也就是某个折半查询点正好是待查询数据),这样o(log2n)就是一个上限 时间复杂度o(n)和o(n log n)哪个快 8楼:匿名用户 0(n)比0(n*log(2,n))快。不要去讨论n的值,多个时间复杂度比较,n都是取很大的值,这个时候就与输入规模无关了。对单个的时间复杂度讨论的时候,才会去考虑n的输入规模。 9楼:木野轻风 当n<=2时,两者相等; 当n>3时,log n>1,所以n log n>n*1,即n log n>n; 当n变得很大时,o(n log n)比o(n)会大很多 10楼:匿名用户 看n的大写,如何logn的结果是小于等于1的。后者快。不然前者快 算法时间复杂度o(1)和o(2)的区别??? 11楼:a罗网天下 o后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 时间复杂度为o(n),就代表数据量增大几倍,耗时也增大几倍。比如常见的遍历算法。所以o(2)相比于o(1)数据量会更多,同时需要执行的时间会更多。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用t(n)表示,若有某个辅助函数f(n),存在一个正常数c使得fn*c>=t(n)恒成立。记作t(n)=o(f(n)),称o(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 时间复杂度o(n^2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的o(n^2)的算法,对n个数排序,需要扫描n×n次。 比如o(logn),当数据增大n倍时,耗时增大logn倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。二分查找就是o(logn)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。 o(nlogn)同理,就是n乘以logn,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。归并排序就是o(nlogn)的时间复杂度。 12楼:天寂无痕 根据大o定义易知,o(1) = o(2)。用o(1)和o(2)表示同一个函数时,差别仅在于常数因子c而已。 两个都是时间复杂度为常量。复杂度是用来表达算法的复杂程度跟算法输入的规模n的关系。如果不管n是多大,算法的复杂程度都固定是1或者2(比如1条指令,2个循环),那么在“复杂度”这个概念上,两者都一样,叫做“常数阶”复杂度。 o(g(n)) = ,则g(n)是f(n)的渐进上界。o(g(n))是指所有与g(n)具有相同增长率或比其增长率小的函数的集合。 13楼:兄弟连教育 时间复杂度是一个函数,它定量描述了该算法的运行时间。常见的时间复杂度有以下几种。 1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n! 1指的是常数。即,无论算法的输入n是多大,都不会影响到算法的运行时间。这种是最优的算法。而n!(阶乘)是非常差的算法。当n变大时,算法所需的时间是不可接受的。 用通俗的话来描述,我们假设n=1所需的时间为1秒。那么当n = 10,000时。 o(1)的算法需要1秒执行完毕。 o(n)的算法需要10,000秒 ≈ 2.7小时 执行完毕。 o(n2)的算法需要100,000,000秒 ≈ 3.17年 执行完毕。 o(n!)的算法需要******xx(系统的计算器已经算不出来了)。 可见算法的时间复杂度影响有多大。 所以o(1)和o(n)差了2.7小时,区别显而易见。 14楼:茧与剑 o(1)与o(2)的阶位一样,所以仅仅是常数区别 15楼:寻秦记记 没有o(2)这一说,要么是o(1),要么是o(f(n)) 二分法查找最坏情况下需要比较次数,为什么n次和o(log(2)n)都对呢?后者是什么意思 16楼:匿名用户 后者是算法复杂度的意思 n次是正确的吗?应该是log(2)n次才对啊 17楼:匿名用户 用二分法查找最多log2^n 用顺序查找最多是n次 18楼:野马皇上 顺序查找需要比较n次,二分法查找需要比较logn次 下列时间复杂度中最坏的是______. a.o(1) b.o(n) c.o(log2n) d.o(n2) 19楼: 答案选d,平方级大o的算法的效率是最慢的。最好的常数阶大o。 20楼:匿名用户 最坏的是d.o(n2) 1楼 影墨者 o n for i 0 i 100 i o n 2 for i 0 i 100 i for j 0 j 100 j 算法时间复杂度o 1 和o 2 的区别??? 2楼 a罗网天下 o后面的括号中有一个函数,指明某个算法的耗时 耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 时... 1楼 mean有方法的 o什么,要知道,排序理论最快时间复杂度只能是nlogn,不能再快,这是有证明的。想要提高速度用c 函数库的qsort 如何对n个数进行排序,要求时间复杂度o,空间复杂度o 2楼 钟萌纳 题目 如何对n个不重复出现的整数序列进行排序 已知这些数的范围为 0 65535 要求时间... 1楼 钟萌纳 题目 如何对n个不重复出现的整数序列进行排序 已知这些数的范围为 0 65535 要求时间复杂度o n 空间复杂度o 1 分析 可以申请一个大小为65536的数组a 数组的x下标代表数字x a x 代表x 在整数序列中出现的次数 扫描一遍整数序列就可以完成对该整数序列的排序 时间复杂度...列举时间复杂度为O(n)和O(n2)的算法
如何对n个数进行排序,要求时间复杂度o,空间复杂度o
如何对n个数进行排序,要求时间复杂度O,空间复杂度O