码迷,mamicode.com
首页 > 编程语言 > 详细

算法基础

时间:2018-08-10 01:35:03      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:单位   nbsp   range   noi   增加   空间   选择   bin   运行时间   

什么是算法?

算法(Algorithm):一个计算过程,解决问题的方法。

输入→算法→输出

时间复杂度

时间复杂度:用来评估算法运行效率的一个东西。

print(Hello World)           #假如说这行代码运行时间是一个单位O(1)
for i in range(n):             # 这段代码的时间是O(n),因为执行了n次
    print(Hello World)   
for i in range(n):             # 这段代码是O(n*n),因为在执行了n*n次
    for j in range(n):        
        print(Hello World)
for i in range(n):             #这代码是O(n*n*n),执行了n的立方次
    for j in range(n):       
        for k in range(n):          
            print(Hello World)

小结:

时间复杂度是用来估计算法运行时间的一个式子(单位)。
一般来说,时间复杂度高的算法比复杂度低的算法慢。
常见的时间复杂度(按效率排序):
    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
不常见的时间复杂度(看看就好)
    O(n!) O(2n) O(nn) …

空间复杂度

空间复杂度:用来评估算法内存占用大小的一个式子

空间换时间:分给它一些空间或内存,让它运行速度更快

 递归

 递归的两个特点:

1.调用自身

2.有结束条件

def func(x):    
    if x>0:       
        print(x)       
        func(x-1)
print(4)
# 打印结果 4 3 2 1
#因为先打印再递归
def func(x):
    if x > 0:
        func(x-1)
        print(x)
func(4)
# 打印结果 1 2 3 4
# 因为先递归,再打印

打印  抱着抱着抱着抱着抱着我的小鲤鱼的我的我的我的我的我

def test(n):
    if n == 0:
        print("我的小鲤鱼", end=‘‘)
    else:
        print("抱着", end=‘‘)
        test(n-1)
        print("的我", end=‘‘)

test(5)

# 尾递归

汉诺塔问题

t = 0

def hanoi(n, A, B, C):
    global t
    if n > 0:
        hanoi(n-1, A, C, B)
        t += 1
        print("%s -> %s" % (A, C))
        hanoi(n-1, B, A, C)

# hanoi(8,‘A‘,‘B‘,‘C‘)  # 8表示8层  A B C 参数不能变
# print(t)

列表查找

 列表查找:从列表中查找指定元素

 输入:列表、待查找元素

 输出:元素下标或未查找到元素

顺序查找:从列表第一个元素开始,顺序进行搜索,直到找到为止。

二分查找:从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

有序列表,列表的元素值随着索引值的增加而增加:

简单版二分查找

def bin_search(li, val):         # li是传入的列表 val是要查找的值
    low = 0                      # low是起始的索引值
    high = len(li) - 1           # high是末尾的索引值
    while low <= high:           # 满足起始索引小于末尾索引的条件就执行循环
        mid = (low + high) // 2  # mid是列表的中间数的索引
        if li[mid] == val:       # 正好找到要查找的值的索引
            return mid
        elif li[mid] < val:      # 中间数的值小于被查找的值
            low = mid + 1        # 说明val在中间数的右边
        else:
            high = mid - 1       # 说明val在中间数的左边

递归版的二分查找 这是尾递归

def bin_search_rec(data_set, value, low, high):
    if low <= high:
        mid = (low + high) // 2
        if data_set[mid] == value:
            return mid
        elif data_set[mid] > value:
            return bin_search_rec(data_set, value, low, mid - 1)
        else:
            return bin_search_rec(data_set, value, mid + 1, high)
    else:
        return

列表排序

列表排序:将无序列表变成有序列表

输入:无序列表

输出:有序列表

顺序:升序与倒序

排序low B 三人组;

    冒泡排序       其次最多

    选择排序

    插入排序

排序niu B 三人组:

    快速排序        用得最多

    堆排序           最难的

    归并排序

 

算法基础

标签:单位   nbsp   range   noi   增加   空间   选择   bin   运行时间   

原文地址:https://www.cnblogs.com/aaronthon/p/9452303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!