如何评价算法的优劣

评价算法的优劣

评价算法的优劣,看算法的时间复杂度,空间复杂度,两者越低越好 时间复杂度:执行当前算法所消耗的时间 列如: for(i=1; i<=n; ++i) { j = i; j++; } 通过「 大O符号表示法 」,这段代码的时间复杂度为:O(n)(简化后的时间复杂度) 在 大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。

假设每行代码的执行时间都是一样的,我们用 1颗粒时间 来表示,那么这个例子的 第一行耗时是1个颗粒时间, 第三行的执行时间是 n个颗粒时间, 第四行的执行时间也是 n个颗粒时间(第二行和第五行是符号,暂时忽略), 那么总时间就是 1颗粒时间 + n颗粒时间 + n颗粒时间 ,即 (1+2n)个颗粒时间, 即: T(n) = (1+2n)*颗粒时间, 从这个结果可以看出,这个算法的耗时是随着n的变化而变化,因此,我们可以简化的将这个算法的时间复杂度表示为:T(n) = O(n) 如果n无限大的时候,T(n) = time(1+2n)中的常量1就没有意义了,倍数2也意义不大。因此直接简化为T(n) = O(n) 就可以了。

空间复杂度:一个算法的空间复杂度 S(n) 定义为该算法所耗费的存储空间 列如: int[] m = new int[n] for(i=1; i<=n; ++i) { j = i; j++; } 这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可, 即 S(n) = O(n)

 
posted @ 2022-06-20 15:48  kuaiquxie  阅读(78)  评论(0)    收藏  举报