【算法图解】阅读笔记Day2

目录

前言

再谈大O

散列表

散列函数

 应用案例

 冲突

性能

填装因子

良好的散列函数

后言

前言

昨天忘记看了,初次接触刷题花了比较长时间,今天继续阅读。

再谈大O

  • 快速查找的常量比合并查找小,虽然都为O(nlogn),快速查找的速度将更快
  • 快速查找调用栈的高度为O(log n),每层需要的时间为O(n)。因此需要的时间为O(n) * O(log n) = O(n log n);在最糟情况下,有O(n)层,因此该算法的运行时间为O(n) * O(n) = O(n2)

散列表

散列函数

  • 散列函数:“将输入映射到数字”,固定输入固定输出,不同输入不同输出
  • 散列表:散列映射、映射、字典和关联数组
  • python散列表用字典键值对实现:
    • book = dict()  # 创建散列表(字典)
      book["apple"] = 0.67  # 添加商品价格
      book["milk"] = 1.49
      book["avocado"] = 1.49
      # print book
      # {'avocado': 1.49, 'apple': 0.67, 'milk': 1.49}
      

 应用案例

  • 查找:模拟映射关系
  • 防止重复:速度比列表添加后的简单查找快
    • voted = {}  # 创建名单
      def check_voter(name):  # 看这个人是否投过票
          if voted.get(name):  # 在则返回名字
              print "kick them out!"
          else:  # 否则返回None
              voted[name] = True
              print "let them vote!"
      
      # >>> check_voter("tom")
      # let them vote!
      # >>> check_voter("mike")
      # let them vote!
      # >>> check_voter("mike")
      # kick them out!
  •  缓存:记住数据,以免服务器再通过处理来生成它们。
    • cache = {}
      def get_page(url):
          if cache.get(url):
              return cache[url]  # 返回缓存的数据
          else:
              data = get_data_from_server(url)
              cache[url] = data  # 先将数据保存到缓存中
              return data

 冲突

  • 冲突定义:给两个键分配的位置相同
  • 经验:可在后面添加链表,散列函数很重要

性能

  •  避免冲突的方法:较低的填装因子;良好的散列函数。

填装因子

  •  经验规则:一旦填装因子大于0.7,就调整散列表的长度

良好的散列函数

  • 散列函数的结果必须是均匀分布的,它们的映射范围必须尽可能大。

后言

今天就看到这,没想到这书已经近半了,就我学过408的来说,散列这里讲的很容易懂,但是也挺浅显的,毕竟科普书嘛,知识的深入还得看看教科书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值