发布网友 发布时间:2022-03-29 10:55
共9个回答
热心网友 时间:2022-03-29 12:24
算法的时间复杂度通俗的讲就是执行算法所需要的时间(执行多少次赋值、比较、判断等操作)
为了方便比较,算法的时间复杂度计算的通常的做法是,从算法选取一种对于所研究的问题(或算法模型)来说是基本运算的操作,以其重复执行的次数作为评价算法时间。该基本操作多数情况下是由算法最深层环内的语句表示的,基本操作的执行次数实际上就是相应语句的执行次数。
再给你举个简单的例子吧:
for(int i = 0; i < n;++i)
;
这个循环执行n次 所以时间复杂度是O(n)
for(int i = 0; i< n;++i)
{
for(int j = 0; j< n;++j)
;
}
这嵌套的两个循环 而且都执行n次
那么它的时间复杂度就是 O(n^2)
时间复杂度只能大概的表示所用的时间
而一些基本步骤所运行的时间不同,但是由于很难精确无法计算,所以省略
如:
for(int i = 0;i < n;++i)
a = b;
和
for(int i = 0;i < n;++i)
;
这个运行的时间当然是第二个快,但是他们的时间复杂度都是 O(n) ,
由于a=b运算时间可以忽略不计,所以判断时间复杂度主要看循环的复杂度
热心网友 时间:2022-03-29 13:42
时间复杂度表面的意思就是代码花费的时间,但是一般使用这个概念的时候,更注重的是随着数据量增长,代码执行时间的增长情况。一般认为一个基本的运算为一次运行算,例如加减乘除判断等等
例1和例2时间复杂度都可以简单认为是o(N),一般用时间复杂度的时候要取一个下限即可,不用那么精确,可能你认为例1是o(2N)而例2是o(n),但实际上这两者对于时间复杂度的作用来说没区别,前面已经说了,时间复杂度关注的是数据量的增长导致的时间增长情况,o(2N)和o(n)在数据量增加一倍的时候,时间开销都是增加一倍(线性增长)。
又例如两重循环的时间复杂度是o(N的平方),N扩大一倍,时间复杂度就扩大4倍。所以时间复杂度主要是研究增长的问题,一般效率较好的算法要控制在o(N)或者o(log2N)
热心网友 时间:2022-03-29 15:17
如果一个问题的规模是n,解决这一问题所需算法所需要的时间是n的一个函数T(n),则T(n)称为这一算法的时间复杂度。
热心网友 时间:2022-03-29 17:08
通俗的说时间复杂度就是
当问题规模为n时,所需运算量的数量级(一般只留下次数最高项,并舍去常数)
比如说用冒泡法对n个数排序,第一轮需要交换(n-1)次,第二轮需要交换(n-2次)……,总共需要进行的操作是
(n-1)+(n-2)+(n-3)...+1
=(1+n-1)(n-1)/2
≈n^2(次)
即时间复杂度为O(n^2)——n为问题规模
关于冒泡法:
http://ke.baidu.com/view/1663338.htm
一般用时间复杂度评价一个算法速度的快慢。
比如说冒泡法时间复杂度为O(n^2),快速排序法时间复杂度为O(nlogn)。那么一般来说,在同样的问题规模下,快速排序法比冒泡法速度要快。
热心网友 时间:2022-03-29 19:16
就是要算法要耗费的时间的一种评估方法
如同速度来评价跑路耗费的时间
简单情况复杂度的一般评估采用大0算法
因为计算速度很快
只有在指数更改的情况下才会对计算造成很大影响
因此大0算法考虑指数变化
如2n方的使用方法 使用n方来表示其复杂度
热心网友 时间:2022-03-29 21:41
时间复杂度可以衡量一个算法的效率,是比较算法的重要指标。
现在假设一个人要刷盘子,刷一个盘子需要一个时间单位,也就是O(1)。刷盘子这个算法需要一次刷一个盘子,不是机器清洗那种,那么这个算法的时间复杂度就是O(n),其中n是盘子的个数,也就是问题规模。
热心网友 时间:2022-03-30 00:22
评价一个算法有两方面
1 空间复杂度
就是一个算法所需要的储存结构(你没问这个 ,所以不详细讲);
2 时间复杂度
这是一个比较抽象的概念,如果你想详细了解它的算法,请参阅相关的书籍。
这里只讲述大概的规律。
就是说,当一个 算法执行时(一般具有循环结构和未知数n),我们就用相对应的数学公式求出这个语句的执行次数(或者是这个循环)和n到底是什么关系。这是一个数学表达式,表达出该算法与n的关系——也就是 时间复杂度
热心网友 时间:2022-03-30 03:20
因为设计算法需要考虑计算量的问题,电脑的计算能力是有限的,因此为了实现同样的结果计算量是越小越好
举一个例子我们要计算 N*2 可以有两种方法
方法1 直接计算N*2 这样就需要进行一次乘法运算,对于少量的数据,或者N比较小时还没有明显的感觉,但是如果成百上千的N 计算机是需要很长的时间
如果你学过指令周期你就知道一次整形数据的乘法运算需要十几到几十个指令周期
那么指令周期是什么意思,比如你的电脑是1G的CPU,也就相当于1s 能计算10^9方次,那么一个指令周期就是 1/(10^9),所以主频越快,计算速度也越快
假如一次乘法需要20个指令周期,那么如果要N有10^9个,那么需要计算10^9次乘法运算则需要20s
方法2 将数据向左移1位,如果是N*4 则移2位,N*8 3位 依次类推,对于计算机实现一次数据移位时非常容易的大概也就是 3个指令周期,此时要算
10^9个数据,那么指需要 3s即可
一次方法2的时间复杂度要远低于方法1
这只是为了说明一个问题,须注意的是算法2的实现需要有一个乘数是2的整数次幂
热心网友 时间:2022-03-30 06:35
其实计算机相关课程知识,是最容易理解的。别以为高深,其实很无聊的。
时间复杂度,用来衡量算法或者程序的好坏。
参数越低,程序或者算法越好,软件运行越有效率。
通常考虑指令访问硬件的速度和频率,
可以这么说,好的算法或程序,
尽量减少程序运行的时间,和访问硬件的频率。
关于什么 O(n)******,就是解释一下,
关键是理解。