算法的时间复杂度示例

本文是学习数据结构的笔记。

【效果图】

【代码】

# example.py

# 算法时间复杂度示例

def func_01(n):
    ''' 时间复杂度O(Log(Log(N))) '''
    import math
    i = n
    count = 0
    while i > 1:
        i = round(math.sqrt(i)) # 注意:sqrt(i)!
        count += 1
    return count

print('时间复杂度O(Log(Log(N))),N=2000000000000000000,循环{}次'.format(func_01(2000000000000000000)))

def func_02(n):
    ''' 时间复杂度O(Log(N)) '''
    i = n
    count = 0
    while i >= 1:
        i = i // 2 # 注意:// 2!
        count += 1
    return count

print('时间复杂度O(Log(N)),N=100000000,循环{}次'.format(func_02(100000000)))

def func_03(n):
    ''' 时间复杂度O((Log(N))^2) '''
    i = 1
    count = 0
    while i <= n:
        j = n
        while j > 0:
            j = j // 2 # 注意:// 2!
            count += 1
        i = i * 2 # 注意:* 2!
    return count

print('时间复杂度O((Log(N))^2),N=100000000,循环{}次'.format(func_03(100000000)))

def func_04_01(n):
    ''' 时间复杂度O(Sqrt(N)) '''
    i = s = 1
    count = 0
    while  s < n:
        i = i + 1
        s = s + i
        count += 1
    return count

print('时间复杂度O(Sqrt(N)),N=10000,循环{}次'.format(func_04_01(10000)))

def func_04_02(n):
    ''' 时间复杂度O(Sqrt(N)) '''
    i = 1
    count = 0
    while i * i < n:
        count = count + 1
        i = i + 1
    return count

print('时间复杂度O(Sqrt(N)),N=10000,循环{}次'.format(func_04_02(10000)))

def func_05(n):
    ''' 时间复杂度O(N) '''
    count = 0
    for i in range(1, n):
        count += 1
    return count

print('时间复杂度O(N),N=100,循环{}次'.format(func_05(100)))

def func_06_01(n):
    ''' 时间复杂度O(N*Log(N)) '''
    count = 0
    for i in range(1, n):
        j = 1
        while j <= n:
            j = j * 2 # 注意:* 2!
            count += 1
    return count

print('时间复杂度O(N*Log(N)),N=1000,循环{}次'.format(func_06_01(1000)))

def func_06_02(n):
    ''' 时间复杂度O(N*Log(N)) '''
    count = 0
    for i in range(1, n):
        j = 1
        while j < n:
            j = j + i # 注意: + i!
            count = count + 1
    return count

print('时间复杂度O(N*Log(N)),N=1000,循环{}次'.format(func_06_02(1000)))

def func_06_03(n):
    ''' 时间复杂度O(N*Log(N)) '''
    count = 0
    for i in range(1, n // 3): # 注意:// 3!
        j = 1
        while j <= n:
            j = j + 4 # 注意:+ 4!
            count = count + 1
    return count

print('时间复杂度O(N*Log(N)),N=1000,循环{}次'.format(func_06_03(1000)))

def func_07(n):
    ''' 时间复杂度O(N*(Log(N))^2) '''
    count = 0
    for i in range(1, n):
        j = 1
        while j <= n:
            k = 1
            while k <= n:
                count += 1
                k = k * 2 # 注意:* 2!
            j = j * 2 # 注意:* 2!
    return count

print('时间复杂度O((N*Log(N))^2),N=100,循环{}次'.format(func_07(100)))

def func_08(n):
    ''' 时间复杂度O(N^2) '''
    count = 0
    for i in range(n):
        for j in range(n):
            count += 1
    return count

print('时间复杂度O((N^2),N=100,循环{}次'.format(func_08(100)))

def func_09(n):
    ''' 时间复杂度O(N^3) '''
    count = 0
    for i in range(n):
        for j in range(n):
            for k in range(n):
                count += 1
    return count

print('时间复杂度O((N^3),N=50,循环{}次'.format(func_09(50)))

 

时间: 2024-10-31 01:44:51

算法的时间复杂度示例的相关文章

Java实现冒泡排序与双向冒泡排序算法的代码示例_java

冒泡排序:就是按索引逐次比较相邻的两个元素,如果大于/小于(取决于需要升序排还是降序排),则置换,否则不做改变 这样一轮下来,比较了n-1次,n等于元素的个数:n-2, n-3 ... 一直到最后一轮,比较了1次 所以比较次数为递减:从n-1 到 1 那么总的比较次数为:1+2+3+...+(n-1),  以等差公式计算:(1+n-1)/2*(n-1) ==> n/2*(n-1) ==> (n^2-n) * 0.5 用大O表示算法的时间复杂度:O(n^2) ,  忽略了系数0.5和常数-n p

在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为?

问题描述 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? A o(n^2) B o(n^3) C o(n) D o(n+e) 答案是o(n+e)...不理解..求过程 解决方案 不对,这题应该选A 求顶点的入度的时间复杂度为O(e)*n=O(n*e) 遍历顶点的时间复杂度是O(n^2) 相加是O(n^2+n*e)=O(n^2) 解决方案二: 详细的解释http://www.cskaoyan.com/redir

php 常用算法和时间复杂度

本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍,需要的朋友参考下   按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3) 复制代码 代码如下: //二分查找O(log2n) function erfen($a,$l,$h,$f){ if($l >$h){ return false;} $m = intval(($l+$h)/2); if ($a[$m] == $f){ r

请教一个算法问题时间复杂度要求是(1)

问题描述 请教一个算法问题时间复杂度要求是(1) 做项目的时候有一个处理大致是这样的:需要每次插入map;每次输入是(1,0),(2,0),(3,0):(2,1),(3,1)...当key是新添加的或者key对应的count大于前一次就要把这个key拿出来,时间复杂度要求是O(1), 请教大家有没有好的方法 解决方案 不可能事件复杂度是1,最低是LogN,不过这个很接近1了.除非你有无限制的内存,然后直接地址映射. 解决方案二: 一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n

常用的排序算法和时间复杂度

1. 数据结构部分 数据结构中常用的操作的效率表 通用数据结构 查找  插入   删除 遍历  数组 O(N) O(1) O(N) - 有序数组 O(logN) O(N) O(N) O(N) 链表 O(N) O(1) O(N) - 有序链表 O(N) O(N) O(N) O(N) 二叉树 O(logN) O(logN) O(logN) O(N) 二叉树(最坏) O(N) O(N) O(N) O(N) 红黑树 O(logN) O(logN) O(logN) O(N) 2-3-4树 O(logN)

算法的时间复杂度(一)

转自:http://www.cnblogs.com/cj723/archive/2011/03/05/1971640.html 2.9 算法的时间复杂度 2.9.1 算法时间复杂度定义         在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n)).它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为

Swift实现快速排序算法的代码示例_Swift

思想 快速排序作为分治代表,通常实现由三步 1.数据中选择一个元素作为"基准"(pivot),通常选取最后一个元素: 2.分区(partition) 所有小于"基准"的元素,都移到"基准"的左边:所有大于"基准"的元素,都移到"基准"的右边.分区操作结束后,基准元素所处的位置就是最终排序后它的位置. 3.对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为

PHP常用算法和数据结构示例(必看篇)

实例如下: </pre><pre name="code" class="php"><?php /** * Created by PhpStorm. * User: qishou * Date: 15-8-2 * Time: 上午9:12 */ header("content-type:text/html;charset=utf-8"); $arr = array(3,5,8,4,9,6,1,7,2); echo im

Objective-C实现冒泡排序算法的简单示例_IOS

简介冒泡算法是一种基础的排序算法,这种算法会重复的比较数组中相邻的两个元素.如果一个元素比另一个元素大(小),那么就交换这两个元素的位置.重复这一比较直至最后一个元素.这一比较会重复n-1趟,每一趟比较n-j次,j是已经排序好的元素个数.每一趟比较都能找出未排序元素中最大或者最小的那个数字.这就如同水泡从水底逐个飘到水面一样.冒泡排序是一种时间复杂度较高,效率较低的排序方法.其空间复杂度是O(n). 1, 最差时间复杂度 O(n^2) 2, 平均时间复杂度 O(n^2) 实现思路1,每一趟比较都