美文网首页
算法图解 (五)

算法图解 (五)

作者: EruDev | 来源:发表于2018-05-31 20:40 被阅读0次

第五章 散列表

本章开头作者用一个雇员的例子, 引出了散列表的好处. 字典就是散列表

  • 散列函数总是将同样的输入映射到相同的索引
  • 散列函数将不同的输入映射到不同的索引
  • 散列函数知道数组有多大,只返回有效的索引

总结一下就是跟字典的键值对形式一样, 键是唯一的, 值是键对应的值。

这章中还提到了缓存的概念, 让我想到了之前看的慕课网视频里面讲到的装饰器缓存的例子, 觉得太神奇了, 还能这么玩!

# coding: utf-8
"""
斐波那契数列: 又称黄金分割数列,
指得是这样一个数列, 1, 1, 2, 3, 5, 8...,
这个数列从第三项开始, 每一项都等于前两项之和。 求数列第n项
"""
# 我们很容易就可以写出这么一个递归函数
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)


li = fibonacci(5)
print(li)


# 改进一
def fibonacci(n, cache=None):
    if cache is None:
        cache = {}
    if n in cache:
        return cache[n]
    if n <= 1:
        return n
    cache[n] = fibonacci(n - 1, cache) + fibonacci(n - 2, cache)
    return cache[n]

print(fibonacci(100))


# 改进二
def memo(func):
    cache = {}
    def wrap(*args):
        if args not in cache:
            cache[args] = func(*args)
        return cache[args]
    return wrap

@memo
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(60))

小结

  • 散列表的查找 O(n)、插入 O(1) 和删除 O(1) 速度都很快
  • 散列表可用于缓存数据
  • 散列表非常适用于防止重复

相关文章

  • 算法图解 (五)

    第五章 散列表 本章开头作者用一个雇员的例子, 引出了散列表的好处. 字典就是散列表 散列函数总是将同样的输入映射...

  • 算法图解学习(五)

    散列表(也叫哈希表)时根据键(key)而直接访问在内存位置的数据结构。它通过计算一个键值的函数,将需要的数据映射到...

  • 《算法图解》note 11 总结

    这是《算法图解》的第十一篇读书笔记,是一篇总结。经过1个月的时间,终于把《算法图解》看完了。个人认为,《算法图解》...

  • 算法(五):图解贝尔曼-福特算法

    算法简介 贝尔曼-福特算法(Bellman–Ford algorithm )用于计算出起点到各个节点的最短距离,支...

  • 算法图解读书笔记

    date: 2017-9-16 11:11:15title: 算法图解读书笔记 算法图解: http://www....

  • 算法图解 读书笔记

    date: 2017-9-16 11:11:15title: 算法图解读书笔记 算法图解: http://www....

  • 算法学习工具

    算法图解可视化工具

  • 图解LZ77压缩算法

    图解LZ77压缩算法

  • 前端

    买一本算法书看一下算法图解

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

网友评论

      本文标题:算法图解 (五)

      本文链接:https://www.haomeiwen.com/subject/gmjcsftx.html