数据结构与算法--------哈希表

1.概述:

  • 数据结构:哈希表
  • 插入时间复杂度:O(1)
  • 删除时间复杂度:O(1)
  • 查找时间复杂度:
  • 优点:
    • 哈希表的操作速度比较快,如插入、删除的时间复杂度都是常量O(1),可以在一秒内查找上千条记录
    • 哈希表的编程实现相对容易
  • 缺点:  
    • 哈希表不能被填满。哈希表被基本填满的时候,性能会急剧下降,所以为了保证性能,你一定要确保你哈希表的容量的大小是足够的
    • 哈希表到其他哈希表的数据迁移过程是一个费时的过程(如定期将数据迁移到更大的哈希表中去会很费时)。如果一开始没有预估好你的数据量的大小,初始时创建的用于存放相应数据的哈希表太小,实际使用过程中就需要创建更大的哈希表,并且定期地将数据转移到更大的哈希表中去,这是一个非常费时的过程。
    • 使用哈希表之前最好能提前预测数据量大小。哈希表是基于数组的,一旦创建,后面想要再进行扩展是非常难的,所以使用哈希表的前提是你可以提前预测你的数据量的大小,否则如果没能准确预估数据量大小,导致实际运行过程中你的哈希表被基本填满,那么你的哈希表的性能会急剧下降。更糟糕的是,如果你没能准确预估数据量大小,后期会极有可能需要将你的数据从当前哈希表迁移到更大的哈希表中,这个过程会很慢。
    • 哈希表中的数据不支持顺序遍历。没有简便的方法来以任何一种顺序(如从小到大)遍历哈希表中的数据,如果需要顺序遍历相应的数据,就不能选用哈希表,只能选用其他的数据结构。
  • 哈希表的适用场景:
    • 当  可以准确预估数据量的大小
    • 并且   不需要顺序遍历(如从小到大)哈希表中数据 时
    • 哈希表在速度和易用性方面是其他数据结构无法比拟的
时间: 2024-11-03 21:30:58

数据结构与算法--------哈希表的相关文章

python数据结构与算法——哈希表

哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity004.html 使用哈希表可以进行非常快速的查找操作,查找时间为常数,同时不需要元素排列有序 python的内建数据类型:字典,就是用哈希表实现的 为了解释哈希表的工作原理,我们来尝试在不使用字典的情况下实现哈希表结构. 我们需要定义一个包含 键->值 映射 的数据结构,同时实现以下两种操作: add(k

8. 蛤蟆的数据结构进阶八哈希表相关概念

8. 蛤蟆的数据结构进阶八哈希表相关概念 本篇名言:"作家当然必须挣钱才能生活,写作,但是他决不应该为了挣钱而生活,写作.--马克思" 前些笔记我们学习了二叉树相关.现在我们来看下哈希表.这篇先来看下哈希表的相关概念 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47347273 1.  哈希表的概念 哈希表(HashTable)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

数据结构实验:哈希表

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1480 #include <stdio.h> #include <string.h> int n; #define N 100001 //N的值取比哈希表长度略大的(质数) int a[100001],b[100001]; int main() { int i,j,ad,t; scanf("%d",&n)

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

数据结构与算法——哈希函数与哈希表等(1)

认识哈希函数和哈希表的实现 MD5 表达16^16范围的值 SHal 表达16^32范围的值 输入相同,即输出相同,不随机 不同的输出,输出相同 均匀性,离散性 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; public class HashMap { public static void main(String[] args) {

9. 蛤蟆的数据结构进阶九哈希表实现

9. 蛤蟆的数据结构进阶九哈希表实现 本篇名言:"人们所努力追求的庸俗的目标 --我总觉得都是可鄙的. -- 爱因思坦" 上篇我们看了哈希表的相关定义和概念,这篇来看下如何来实现. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47362781 1.  代码实现 1.1             Main 函数定义哈希元素数组 10个元素. 定义哈希表变量. 调用InitHashTable构造一个空的哈希表. 然后循

数据结构与算法之线性表

前言 上一篇<数据结构和算法之时间复杂度和空间复杂度>中介绍了时间复杂度的概念和常见的时间复杂度,并分别举例子进行了一一说明.这一篇主要介绍线性表. 线性表属于数据结构中逻辑结构中的线性结构.回忆一下,数据结构分为物理结构和逻辑结构,逻辑结构分为线性结构.几何结构.树形结构和图形结构四大结构.其中,线性表就属于线性结构.剩余的三大逻辑结构今后会一一介绍. 线性表 基本概念 线性表(List):由零个或多个数据元素组成的有限序列. 注意: 1.线性表是一个序列. 2.0个元素构成的线性表是空表.