2018/07/26 《轻松学算法》【数组/集合/散列表】学习笔记(一)

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

总结

 

1:数组

  - 什么是数组?

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

  - 特点:

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

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

 

  - 使用场景

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

 

2:集合

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

  - 特点

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

  

  - 使用场景

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

 

3:散列表

  - 什么是散列表(HashTable)?

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

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

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

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

 

  - 什么是碰撞?

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

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

 

  

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

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

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

    - 在哈希法

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

    - 链地址法

      - 学习链表之后学习

 

  - 散列的特点?

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

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

    - 无序。

    - 可能产生碰撞。

 

  - 散列的使用场景

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

 

posted @ 2018-07-27 21:55  Zzz哈  Views(196)  Comments(0Edit  收藏  举报