算法图解1-2/11

2018-03-25  本文已影响11人  废柴社

原书作者 Aditya Bhargava

1 算法简介

1.1 二分法查找

二分法查找,正是猜数字游戏的玩法:A从1-100中随机挑一个数,B来猜,A返回B猜的数是大了还是小了,最快的一种方法就是二分法(猜50-->小了,接下来猜75……)

二分法查找速度.png
def binary_search(list, item):
  low = 0
  high = len(list)-1
  while low <= high:
    mid = int(round((low + high)/2))  #←---就检查中间的元素
    guess = list[mid]
    print(guess)
    if guess == item:  #←--------找到了元素
       return mid
    if guess > item:
        print('←-------------猜的数字大了')   
        high = mid - 1
    else:
        print('←--------------猜的数字小了')
        low = mid + 1
  return None  #←--------------------没有指定的元素

#测试
my_list = [1, 3, 5, 7, 9]  
print(binary_search(my_list, 3))

1.2 算法运行时间

不同的算法,运行时间差异很大。

简单查找与二分查找.png

五种最常见的算法运行时间

image.png

2 选择排序

2.1 数组和链表

数组就是一列相邻的数据,位置关系固定,查找(读取很快),要插入1个数据时,必需把后面的数据全部移动一位;但如果内存中的连续空位不够时就比较麻烦;
链表中中每个元素会记录下一个元素的位置,所以插入很好操作——只需修改一个指向记录。删除操作类似的,也只需要更改某下一个元素的指向位置即可。

image.png

2.2 选择排序

选择排序:遍历这个列表,找出播放次数最多的乐队,并将该乐队添加到一个新列表中。接下来继续该操作(找到第二多的乐队),最终得到一个有序列表。

从大到小排序-选择排序

每次操作需要针对剩余的n个元素(n,n-1,……1,平均为n1/2),共操作n次,故算法时间为O(nn*1/2),通常忽略常数项,得算法时间为O(n^2)

上一篇下一篇

猜你喜欢

热点阅读