zoukankan      html  css  js  c++  java
  • 2018/07/26 《轻松学算法》【数组/集合/散列表】学习笔记(一)

      第一章《数组、集合、散列表》

    总结

    1:数组

      - 什么是数组?

        - 把有限个数据类型一样元素按顺序放在一起,用一个变量命名,通过编号可以访问的一个有序集合。

      - 特点:

        - 想用就要提前想好。因为数组是 定长 的,多了浪费,少了尴尬。

        - 顺序访问,也就是说,虽然在使用中可以通过下标访问,但是在计算机处理当中,也是按照顺序访问的。

      - 使用场景

        - 因为数组的不变性,所以在不变的业务中,更适合使用数组。

    2:集合

      - 列表(有序集合[链表、队列、栈 ......]、关联数组......) 等等都是集合,概念比较宽泛......(了解)

      - 特点

        - 和它实现有关,那就是变长,变长是相对的,内部还是通过数组来实现。知识在数组不够长时候的一种策略,把旧数组复制到新数组使用。

      

      - 使用场景

        - 会变得东西基本都会使用。

    3:散列表

      - 什么是散列表(HashTable)?

        - 可以通过给定的关键字直接访问到具体对应值的一个数据结构。

          - 就类似一个班上一共500个同学,每次找小明巨麻烦,需要一个一个问你是不是小明,效果很差。

             为了可以快速定位,校长掐指一算(Hash计算),给小明(Value)定了一个学号(Key),并记在了一个小本子(散列表)上。

           这样我们每次就可以快速找到对应的同学了。

      - 什么是碰撞?

        - 通过不同的Key可以访问到同一个Value。

          - 原因是 不同的 Key 在通过哈希函数计算时候,可能会得到同一个地址(Value)

      

      - 如何解决碰撞问题?(了解)

        - 开放地址法 (开放寻址法) 

          - 在发现该 Key 已经有值之后,可以往后移动一个地址,在检测,如果没有使用。则就是用这个地址。

        - 在哈希法

          - 再次计算哈希,缺点是增加了计算的时间。

        - 链地址法

          - 学习链表之后学习

      - 散列的特点?

        - 访问速度快。快速定位。

        - 空间换时间,需要额外的空间。

        - 无序。

        - 可能产生碰撞。

      - 散列的使用场景

        - 由于散列的特性我们也知道,散列表适合快速查找等。

  • 相关阅读:
    Mac下写博客工具ecto相关资料
    重装MacOS
    Mac下写博客工具MarsEdit相关资料
    Mac下安装最新版本的Graphviz
    什么是回归分析?
    Mac 配置Charles抓https的包
    Android sdk tool android 命令参数
    判断某个端口被那个进程占用
    [置顶] 微创新时代个人崛起的方法
    xml获取配置DataTable
  • 原文地址:https://www.cnblogs.com/25-lH/p/9379838.html
Copyright © 2011-2022 走看看