在平時(shí)開(kāi)發(fā)當(dāng)中,衡量一個(gè)程序設(shè)計(jì)執(zhí)行的效率通常用大O函數(shù)表示法僚饭,下面依次從復(fù)雜度由低到高敘述下
O(1),最低復(fù)雜度鳍鸵。表示時(shí)間/空間的復(fù)雜度為固定的偿乖,與數(shù)據(jù)量大小沒(méi)有關(guān)系。例如哈希算法贪薪,無(wú)論多少數(shù)據(jù)画切,通過(guò)一次計(jì)算便可以計(jì)算出對(duì)應(yīng)的值,查找的復(fù)雜度為O(1)槽唾。一般情況下光涂,只要算法中不存在循環(huán)語(yǔ)句、遞歸語(yǔ)句钝计,即使有成千上萬(wàn)行代碼齐佳,它的執(zhí)行復(fù)雜度也為O(1),因?yàn)閳?zhí)行的時(shí)間是固定的炼吴。
O(logn)硅蹦,表示數(shù)據(jù)量增大n倍后,執(zhí)行的時(shí)間/空間增大logn倍童芹。這里的log是以2為底的假褪,比如,當(dāng)數(shù)據(jù)增大256倍時(shí)生音,耗時(shí)只增大8倍窒升。例如二分查找慕匠,256個(gè)數(shù)中最多8次便可以找到對(duì)應(yīng)的數(shù)字异剥。log也可以用3或者10為底,表示的復(fù)雜度依然為O(logn)絮重。
O(nlogn)冤寿,如果理解了上面的O(logn),如果我們執(zhí)行了n遍的O(logn)青伤,那么復(fù)雜度就可以表示為O(nlogn)
O(n)督怜,表示時(shí)間/空間的復(fù)雜度隨著數(shù)據(jù)量的增大而增大。例如遍歷算法狠角,遍歷執(zhí)行一個(gè)數(shù)組号杠,或者遍歷一個(gè)文件夾,他的執(zhí)行時(shí)間/復(fù)雜度都隨著數(shù)據(jù)量的增大而增大丰歌。
O(m?n)姨蟋、O(m??n)立帖,表示時(shí)間/空間復(fù)雜度取決于m眼溶、n兩個(gè)數(shù)據(jù)量的值。
O(n^2)晓勇,表示時(shí)間/空間的復(fù)雜度隨著數(shù)據(jù)量的增大堂飞,復(fù)雜度也呈現(xiàn)出數(shù)據(jù)量的平方倍。例如執(zhí)行一個(gè)冒泡排序算法绑咱。程序執(zhí)行了數(shù)組長(zhǎng)度*數(shù)組長(zhǎng)度的執(zhí)行復(fù)雜度變化绰筛。
O(n^3),表示時(shí)間/空間的復(fù)雜度隨著數(shù)據(jù)量的增大描融,呈現(xiàn)出數(shù)據(jù)量的立方倍的增大铝噩。