TypeScript数据结构与算法(8)通俗易懂的算法时间复杂度

上几篇文章中,对于队列,链表的优化,都是出于数据结构的算法事件复杂度的优化考虑的,那什么是算法时间复杂度?通俗一点,就是你写的代码执行效率怎么样,如果执行效率很low,那你写的代码算法时间复杂度就很高,在计算算法时间复杂度时,有以下几种:

O(1):比如直接输出console.log这种概念

O(n):比如循环n次

O(n^2):比如循环里面再套一个循环

O(logn):数量的规模如果是n,但是在执行过程中存在循环减半,就是logn

等,另外还需记住,所谓的算法的时间复杂度,只是一个估计值

 常见的时间复杂度排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2*logn)<O(n^3)

在了解上面时什么东西之前,可以先看下下面四组代码,判断哪一组运行的时间最短(效率最高),哪一组运行的时间最长(效率最低)

    start() {

        //第一组
        console.log("hello world");

        //第二组
        let nlen = 18;
        for (let i = 0; i < nlen; i++) {
            console.log("helloworld");
        }

        //第三组
        let ilen = 18;
        let jlen = 18;
        for (let i = 0; i < ilen; i++) {
            for (let j = 0; i < jlen; j++) {
                console.log("helloworld");
            }
        }

        //第四组
        let alen = 18;
        let blen = 18;
        let clen = 18;
        for (let a = 0; a < alen; a++) {
            for (let b = 0; b < blen; b++) {
                for (let c = 0; c < clen; c++) {
                    console.log("helloworld");
                }
            }
        }

    }

 毫无疑问,即使不了解算法时间复杂度的人,应该也能判断出第一组效率最高,第四组效率最低,记住,得出这样的结论是这四段代码都是在同样的编译环境,运行环境下进行比对的。那么如何快速简单的判断代码的算法时间复杂度呢?可以通过以下的方式:

快速判断算法时间复杂度(适用于绝大多数简单的情况)

1.确定问题规模n

2.循环减半过程logn

3.k层关于n的循环n^k次方

其他复杂情况,根据算法执行过程判断,目前空间复杂度已经讨论的比较少了,简言之,“空间换时间”,以提高用户的体验。所以,现在我们可以很轻松的判断出上面四段代码的时间复杂度了,第一段代码是O(1),第二段代码是O(n),第三段代码是O(n^2),第四段代码是O(n^3)。

posted @ 2021-01-21 15:58  CYNLINQ  阅读(316)  评论(0)    收藏  举报