004. 哈希表

--------------------

  - 涉及内容:

  - 哈希表的简单介绍
  - 存储原理
  - 哈希表的效率

  - 2020/10/16

注:此处介绍内容仅仅是为了更好的理解对应算法题,并非讲解哈希

算法题:https://www.cnblogs.com/cstrick-1/p/13825676.html


基础认识:

哈希也称散列,属于一类函数。

其定义理解:将任意长度的数据通过散列算法映射到哈希表中的一个位置,而这个位置可以存放多个数据(多个数据时发生碰撞,

          在碰撞的比例足够低不会影响性能时可以不用处理。反之,就要处理碰撞冲突)

----------------------------------------------------------------------------------------------------

注:在简单算法题解题中,是自己分配数据存放到哈希里面的位置,并非通过算法实现位置的分配。

比如,hashtable.put(nums[i], i);

----------------------------------------------------------------------------------------------------

哈希表存储原理


理解:假设要存储字符串right,通过散列算法(算法不唯一),最后得出一个int型数值,该数值也就是哈希表的下标,

     得出下标就将字符串right存放到哈希表对应的下标里面

哈希表的效率


- 按照平均时刻算的话,哈希表的查询效率是O(1)


- 哈希表可以看作是数组和链表的结合体,可以通过哈希下表迅速定位到某个位置,同一个位置上面可以存放多个数据,

  而这些同一个位置上面的数据是以指针的形式串连在一起的,形成一个链表。


- 所以,好的哈希表(同一个位置存放的数据少)的查询效率为O(1),但是如果很多数据都存放在同一个位置上面,查询的时候就

  需要遍历链表,最坏情况下查询效率达到了O(N)

不断修正,不断笔记,能力有限,若有不妥之处,望不吝指教。
------------------------------------------------------
原文地址:https://www.cnblogs.com/cstrick-1/p/13824940.html