加入收藏 | 设为首页 | 会员中心 | 我要投稿 通化站长网 (https://www.0435zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

一篇文章带你了解Django ORM操作

发布时间:2021-01-31 15:48:10 所属栏目:外闻 来源:互联网
导读:其实,对于多项式,我们只需要保留最高次项就行了,也就说,保留 n 的最高次方数就可以了,这个例子中保留的也就是 n 的 4 次方,系数和常数皆可以忽略,最终得到的时间复杂度即为 O(n^4) 「结论:」 T(n) 为常数时,时间复杂度为 O(1) ,反之时间复杂度为 O

其实,对于多项式,我们只需要保留最高次项就行了,也就说,保留 n 的最高次方数就可以了,这个例子中保留的也就是 n 的 4 次方,系数和常数皆可以忽略,最终得到的时间复杂度即为 O(n^4)

「结论:」

T(n) 为常数时,时间复杂度为 O(1) ,反之时间复杂度为 O(保留T(n)的最高次项并去掉最高次项的系数)

接下来,我们看几个例子来判断下几段代码的时间复杂度

「例1:」
 

首先我们来看函数 fn1,它的执行总次数为 2,一个 常数(常数级),也就是说此函数无论何时它的总执行次数都是 2,是一个不变的值,那么我们使用时间复杂度 O 来表示时直接估算为 1 就可以,即时间复杂度为 O(1)

我们再来看函数 fn2 ,它的执行次数 T(n) 是 3n + 2 即 常数*n + 常数,这里我们完全可以看成 常数*n 和 +常数 两部分,随着 n 的增大,只有前一个部分会有变化,后面是不变的,所以在表示时间复杂度时就可以忽略后面不变的常数,即 常数*n,而 常数*n 中过的常数我们也可以直接当做 1,或者说忽略掉这个作为系数的常数,那么最终可以得出函数 fn2 的时间复杂度为 n,即 O(n)

「PS:晓得可能有人把数学知识还给老师了,所以解释下」

「常数:」 常数就是指平常的数值,可简单的理解为固定不变的数值

**系数:**系数指代数式的单项式中的数字因数,例如 a = 1 * a ,则它的系数为 1,2b = 2 * b ,则它的系数为 2

我们再来举个例子,如下面这个多项式代指一个函数的 T(n),求它的时间复杂度
 

上面的 n,指的是为问题的规模,即输入数据的大小或者说数量,你也可以简单的理解为 T 就是函数本身,n 就是参数,也就是说

函数 fn1 任何情况下执行次数都为 2

函数 fn2 的总执行次数会根据 n 的大小变化而产生一个变化

我们思考一下,我们可以使用一段代码的执行总次数来衡量执行速度吗?

答案当然是不行的,当代码行数比较多的时候,我们一条一条的数来计算执行总次数太麻烦了,例如函数中套用函数时、循环中套用循环时,想要精确计算执行次数都是非常麻烦的

所以,在算法中,我们一般用 T(n) 简化后的估算值来表达代码执行的速度,通常我们用大些字母 O 来表示,即大 O 表示法,由于是估算,它表示的是代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度

明确了这个概念以后,我们就可以来算时间复杂度了,还是用上面 fn1/fn2 两函数例

(编辑:通化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读