《算法图解》记录

查找:

简单查找最多需要n步,用二分查找最多需要log2(n)步

def binary_search(list, item):
  low = 0
  high = len(list)-1
  while low <= high:
    mid = (low + high) / 2
    guess = list[mid]
    if guess == item:
       return mid
    if guess > item:
       high = mid -1
    else:
       low = mid + 1
   return Nune

算法的运行时间以不同的速度增加。大O表示法指出了算法的速度有多快。指出了算法运行时间的增速。指出了最糟情况下的运行时间。

选择排序:

数组和链表:

数组的各个项在内存中是相连的

链表的元素可以存储在内存的任何地方,每个元素都存储了下一个元素的地址。需要读取链表的最后一个元素时,不能直接读取,需要从第一元素开始找...。需要读取全部元素时,链表的效率很高。

链表的优势在插入和删除元素方面。数组的优势在读取元素方面,擅长随机访问。


递归:

每个递归函数都有两部分: 基线条件和递归条件。基线条件指函数不再调用自己,从而避免无限循环。递归条件指函数调用自己。

def countdown(i):
    print i
  if i <= 1:  ←------基线条件
    return
  else:  ←------递归条件
    countdown(i-1)

调用栈

调用栈相当于一叠便条。插入的待办事项放在清单的最上边。读取时,也只读取最上边的事项,并将之删除。因此栈只有两个操作:压入和弹出

分而治之 : D&C

快速排序

速度决定于选择的基准线

平均排序和快速排序?

散列表

数组和链表都直接映射到内存,但散列表更复杂,它使用散列函数来确定元素的存储位置。

python中散列表的实现为字典

book = dict()

book["apple"] = 0.67; book["milk"]=1.39

缓存是一种常用的加速方式,所有大型网站都使用缓存。而缓存的数据则存储在散列表中。

要避免冲突,需要有(1)较低的填装因子; (2)良好的散列函数

广度优先搜索:找出两样东西之间的最短距离。是一种用于图的查找算法。查找最短路径。

先在一度关系中搜索,再在二度关系中搜索。

队列:

队列是一种先进先出(FIFO)的数据接口(和乘坐公交车一样)。栈是一种后进先出(LIFO)的数据结构

狄克斯特拉算法

贪婪算法: 每步都采取最优的做法

动态规划:先解决子问题,再逐步解决大问题

K最近邻算法:

回归

二叉查找树:

反向索引

傅立叶变换

并行算哒

分布式算法(MapReduce): 基于 映射函数和归并函数








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值