时间复杂度

╄→гoц情女王★ 提交于 2020-02-08 17:30:20

时间复杂度:用来评估算法运行效率的一个式子

先看下面栗子感受一下

        Debug.log("ok");//0(1)
        foreach (var item in collection)
        {
            Debug.log("ok");//0(1)
        }//0(n)

        foreach (var item in collection)
        {
            foreach (var item in collection)
            {
                Debug.log("ok");//0(1)
            }//0(n)
        }//0(n^2)

再看这个

        foreach (var item in collection)
        {
            Debug.log("ok");//0(1)
            foreach (var item in collection)
            {
                Debug.log("ok");//0(1)
            }//0(n)
        }

按道理来说应该是 (n+1)*n=n^2+n,但是其实还是o(n^2),因为时间复杂度只是估算,所以只取最高项,而且常数忽略,

比如3n^2+n+5=n^2

再看下面的

        while (n>1)
        {
            Debug.log(n);//0(1)
            n =n / 2;//0(1)
        }

 如果n=64,循环执行6次,也就是2^6=64,那么时间复杂度就是O(logn),记住了只要出现折半操作的循环,必定是对数时间复杂度,比如二叉树,快速排序等等

给个表

 稳定性是指,相同元素排序后保持相对位置不变

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!