02-

1、时间复杂度 

常数时间的操作:一个操作如果和数据量没有关系,每次都是
固定时间内完成的操作,叫做常数操作。


时间复杂度为一个算法流程中,常数操作数量的指标。常用O
(读作big O)来表示。

具体来说,在常数操作数量的表达式中,
只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分
如果记为f(N),那么时间复杂度为O(f(N))。


评价一个算法流程的好坏,先看时间复杂度的指标,然后再分
析不同数据样本下的实际运行时间,也就是常数项时间。

例子一:理解时间复杂度

一个简单的理解时间复杂度的例子
一个有序数组A,另一个无序数组B,请打印B中的所有不在A中的数,A数
组长度为N,B数组长度为M。
算法流程1:对于数组B中的每一个数,都在A中通过遍历的方式找一下;
算法流程2:对于数组B中的每一个数,都在A中通过二分的方式找一下;
算法流程3:先把数组B排序,然后用类似外排的方式打印所有不在A中出现
的数;
三个流程,三种时间复杂度的表达...
如何分析好坏?

2、对数器

对数器的概念和使用
0,有一个你想要测的方法a,
1,实现一个绝对正确但是复杂度不好的方法b,
2,实现一个随机样本产生器
3,实现比对的方法
4,把方法a和方法b比对很多次来验证方法a是否正确。
5,如果有一个样本使得比对出错,打印样本分析是哪个方法出错
6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。

 3、冒泡排序

冒泡排序细节的讲解与复杂度分析
时间复杂度O(N^2),额外空间复杂度O(1)

 python版本

# 冒泡排序
# 时间复杂度O(N^2)
# 空间复杂度O(1)

def bubble_sort(arr):
    if arr is None and len(arr) < 2:
        return
    for end in range(len(arr)-1, -1, -1):
        for i in range(end):
            if arr[i] > arr[i + 1]:
                swap(arr, i, i + 1)
    return arr

def swap(data, i, j):
    temp = data[i]
    data[i] = data[j]
    data[j] = temp

ret = bubble_sort([9, 2, 7, 8, 3, 2, 1])
print(ret)

 
 

猜你喜欢

转载自www.cnblogs.com/venicid/p/9853806.html
02-