logN復雜度估算與一些示例

logN復雜度估算

logN復雜度的算法可以認為具有以下特性:

用常數(shù)時間將問題的大小削減為某一部分(通常是1/2)

例如分治法求最大子串問題,將一個$O(N^{2})$的問題削減為每個的1/2,每個問題復雜度為$O(N)$(有循環(huán)),所以該算法的復雜度估計為$O(NlogN)$

logN復雜度算法舉例

對分查找

問題

已知一串整數(shù)按順序排布,尋找某個指定數(shù)的下標

求解

考慮已經(jīng)按順序排列,那么使用二分查找的方法即可。對于For循環(huán)內(nèi)部算法的復雜度是O(1),且每次循環(huán)都將問題縮小一半,所以認為這是一個O(logN)的算法

func binary_search(data []int, target int) int {
    left, right, mid := 0, len(data), 0
    for left != right {
        mid = int((left + right) / 2)
        // fmt.Println(mid)
        if data[mid] == target {
            return mid
        } else if data[mid] > target {
            right = mid
        } else {
            left = mid
        }
    }
    return -1
}

歐幾里德算法

歐幾里得算法是用于取最大公因數(shù)的算法(中國古代類似的算法好像是碾轉(zhuǎn)相除法?)。這個算法中,每次循環(huán)也是將問題變得更小

func gcd(a, b int) int {
    rem := 0
    for b > 0 {
        rem = a % b
        a = b
        b = rem
    }
    return a
}

遞歸求冪

類似于二分查找,遞歸求冪的原理是$x^{2n} = x^{n} * x^{n}$相比于普通階乘,減少了乘法的次數(shù)。同時,也是每次循環(huán)問題(N)減為原來的一半,也是一個O(logN)復雜度問題

func pow(x, n int) int {
    if n == 0 {
        return 1
    } else if n == 1 {
        return x
    } else if n%2 == 0 {
        return pow(x*x, n/2)
    } else {
        return pow(x*x, n/2) * x
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 算法復雜度初認 你循環(huán)的次數(shù)寫成 n 的表達式,就是時間復雜度 你申請的變量數(shù)量寫成 n 的表達式,就是空間...
    誰動了MyWorld閱讀 4,249評論 0 11
  • 算法復雜度 時間復雜度 空間復雜度 什么是時間復雜度 算法執(zhí)行時間需通過依據(jù)該算法編制的程序在計算機上運行時所消耗...
    KODIE閱讀 3,394評論 0 9
  • 0,時間復雜度是指執(zhí)行算法所需要的計算工作量 1,在計算時間復雜度的時候,先找出算法的基本操作,然后根據(jù)相應的各語...
    Santiagogogo閱讀 943評論 0 4
  • 幾天的學習結(jié)束,也終于能如愿再次感受了包翔老師的PPT功力及人格魅力。因為工作的原因,第一天的課程我沒有趕...
    果果的爹閱讀 739評論 0 48
  • 最近看了很多老電影,其實這些電影以前都看過,現(xiàn)在看和以前看區(qū)別挺大。以前只是走馬觀花式看看美女帥哥槍戰(zhàn)刺激,隨著年...
    何雅琴Miya閱讀 662評論 0 0

友情鏈接更多精彩內(nèi)容