日期:2014-05-17  浏览次数:21152 次

为什么要用哈希表存放键值对?
有什么好处和坏处么?????
哈希

------解决方案--------------------
引用:
查一下hashtable和dictionary的区别


dictionary<K,R>基于hash进行了高级的优化。这两个东西都等于是lz的问题。
------解决方案--------------------
引用:
引用:哈希的好处就是如果哈希函数选好 值的分布均匀 那么对于哈希表的查找时间复杂度是O(1),是一个常数级的操作 非常快哦
能说的详细一点吗?例如怎样才能让值分布均匀,查找时间复杂度怎么得来的呢?

怎样分布均匀是看数据的 要扯的话能扯很多
至于时间复杂度 举个例子 比如你有一堆字符串,a,b,c,d,e 然后我们假设这些a,b,c,d,e的哈希值分别为1,2,3,4,5,就是说哈希函数y=f(x),当x=a的时候 y=1, 依次类推(这个哈希函数我随便编的)。 当我们把它们放到一个哈希表里面的时候 是利用他们本身的值x,算出他的哈希值y, 然后放到对应的内存块y里面。所以当你在对哈希表做查找的时候a是否在哈希表里面 先是通过之前的哈希函数y=f(x)算出a的哈希值为1,然后查找哈希表里面内存地址为1的内存块儿,就会发现a在里面,如果我们查找f 那么算出哈希值为6,是不在哈希表里面的。
所以你会发现 对于哈希表 最好的情况 一个查询操作 只需要一个操作 就能找到所需的数据 如果是链表 那么可能我要从头到尾遍历, 如果是平均二叉树 那么最好的情况也要log2n的时间复杂度
上面是哈希函数分布均匀的情况 如果分布不均匀 情况就复杂了 涉及到链表 以及重复情况下的数据存放方式 建议参考数据结构相关书籍
所以说哈希表的速度是非常快的 但前提是 哈希函数要好 分布要均匀 这是个很大的课题