C++中的时间复杂度O(1)与O(n)有什么区别

C++中的时间复杂度O(1)与O(n)有什么区别
for(int i=0;i<1000;i++)与for(int i=0;i<n;i++) 其中n是用户输入的
这两个有什么不一样
常数 n
for(int i=0;i<1000;i++) for(int i=0;i<n;i++) 用户输入1000
for(int i=0;i<10000;i++) for(int i=0;i<n;i++) 用户输入10000
for(int i=0;i<10000;i++) for(int i=0;i<n;i++) 用户输入100000
我认为这两个还是成线形比 而不是O(1)成常数比, O(n)成线形比

C++中的时间复杂度O(1)与O(n)的主要区别在于:

1、时间复杂度O(1)是常数阶,其基本操作重复执行的次数是一个固定的常数,执行次数不存在变化;

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)) 为算法的渐进时间复杂度,简称时间复杂度。

例如:某算法的执行次数为  ,根据T(n)的数量级,则有  ,然后根据 T(n)/f(n) 求极限可得到常数c,则该算法的时间复杂度:T(n) = O(n^3) 。

2、常见的时间复杂度有:常数阶O(1),对数阶O(  ),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3)等。

参考资料:百度百科:时间复杂度

温馨提示:内容为网友见解,仅供参考
第1个回答  2008-10-21
你理解错了,我举个例子:
你设计了一个字符串类:客户有时需要知道字符串的长度,
所以有两种设计GetLength()函数的方法
1。每次客户询问长度,你都用循环检测串长,即
for(i=0;str[i]!=0;++i)
这样效率低 时间复杂度O(n)
2 每次串内容改变时才算长度,算好后存起来,以后
客户需要知道字符串的长度就直接把变量值返回
这样效率高 时间复杂度O(1)本回答被提问者采纳
第2个回答  2008-10-21
O(1)复杂度是与输入数据无关,O(n)是与输入数据成正比。
对于程序A,for(int i=0;i<1000;i++),当输入任意的n时循环次数均为1000,复杂度为O(1);
对于程序B,for(int i=0;i<n;i++),当输入任意的n时循环次数为n,复杂度为O(n)。
第3个回答  2015-06-08
时间复杂度是一个函数,它定量描述了该算法的运行时间。常见的时间复杂度有以下几种。
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!)的算法需要XXXXXXXX(系统的计算器已经算不出来了)。
可见算法的时间复杂度影响有多大。

所以O(1)和O(n)差了2.7小时,区别显而易见。

C++中的时间复杂度O(1)与O(n)有什么区别
C++中的时间复杂度O(1)与O(n)的主要区别在于:1、时间复杂度O(1)是常数阶,其基本操作重复执行的次数是一个固定的常数,执行次数不存在变化;2、而时间复杂度O(n)是线性阶,其基本操作重复执行的次数是与模块n成线性相关的,其值会随着模块n的变化而变化,当模块n的规模确定为定值后,其...

c++ 请问O(nlogn), O(1)分别指什么
O(1)时间复杂度是常量,比如没有任何循环,语句的执行时间恒定常量。至于O(nlogn),是说算法的时间复杂度是nlogn的倍数,比如若一个排序算法的复杂度是O(nlogn),那么对于n个要排序的数,执行时间应该是nlogn的倍数。这些是和具体编程语言无关的,这些内容最好找本算法的书来看。

c++请问O(nlogn), O(1)分别指什么 我知道O(n)指线性
O(1)就是最低的时空复杂度了,也就是耗时\/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时\/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话)

有关C++ STL的两个问题(有关时间复杂度)
第一个问题:advance函数用在“随机访问迭代器”上时,时间复杂度是常数,即O(1)。所谓随机访问迭代器,简单地说就是该迭代器支持加法和减法操作符。比如,std::vector::iterator就是一种random access iterator,而std::list::iterator就不是。两者区别在于:如果你有一个vector::iterator,变量名是it...

c++中set、vector遍历效率
c++中遍历不同数据结构的效率对比:1. 方式1:使用unordered_set的迭代器遍历,此方法效率较高,因为unordered_set底层使用哈希表实现,查找时间复杂度为O(1)。2. 方式2:使用set的迭代器遍历,此方法效率次于方式1。因为set底层使用红黑树实现,查找时间复杂度为O(logn)。3. 方式3:纯for循环遍历,...

C++快排的问题
冒泡排序是稳定的。算法时间复杂度O(n^2)--[n的平方]=== 功能:希尔排序 输入:数组名称(也就是数组首地址)、数组中元素个数 算法思想简单描述:在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为增量)的数,使...

c++里链表是怎么回事?
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表...

关于Vector的常见使用总结
总结关于Vector的常用操作和技巧,这个C++ STL中的重要容器,有助于提升编程效率。首先,Vector的核心特性在于高效的尾部插入和删除,时间复杂度为O(1),但头部和中部操作会因涉及元素移动而稍显低效,时间复杂度为O(n)。创建Vector的方式多样,包括空容器初始化、指定初始值和元素个数,或者通过其他容器...

时间复杂度问题,请问什么时候的时间复杂度为log(n), 什么时候是nlog(n...
堆排序是不稳定的。算法时间复杂度O(nlogn)。决策树是一颗二叉树,每个节点表示元素之间一组可能的排序,它予以京进行的比较相一致,比较的结果是树的边。先来说明一些二叉树的性质,令T是深度为d的二叉树,则T最多有2^片树叶。具有L片树叶的二叉树的深度至少是logL。所以,对n个元素排序的决策树...

用C++交换排序
(一)冒泡排序 最差时间复杂度:O(n^2)最优时间复杂度:O(n)平均时间复杂度:O(n^2)最差空间复杂度:总共O(n),需要辅助空间O(1)稳定性:稳定 冒泡排序(Bubble Sort),它重复地走访过要排序的数列,一次比较两个元素如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有...

相似回答