数据结构者,“数据间关系+数据存储方式”也。
选择何种数据结构,取决于需要解决什么样的问题。
任何一个数据结构都有它的优势,这个优势说白了就是“本数据结构在进行XX操作时快”,而选择何种数据结构就看要解决的问题需要在数据结构上进行何种操作来决定。
哈希表就是体现这个道理的一个很好的例子。
哈希表提供这么一种其它数据结构并不擅长的操作:
“在理想情况下,能用常量时间查找到指定值的数据”。
普通数据结构如线性表、树、图等,其结点内的数据与数据所存储的位置之间的关系是随机的,所以要想提供“查找某已知值的数据的位置”只能通过“比较”方式进行,如:对于未排序的线性表,要从头至尾逐一比较是否“==”;对于二分查找,则要比较“>”“<”还是“==”。这样,时间复杂度是n或者logn。
而哈希表通过“在存储位置和数据值之间建立映射关系”这一手段,将该操作的时间复杂度降低为O(1)。
这个描述“在存储位置和数据值之间建立映射关系”的映射关系就是哈希函数。
将数据存入哈希表时,利用哈希函数为该数据安排存储位置;查找指定值数据时,也按照哈希函数得到目标索引。
实际操作起来时,由于数值域和索引域大小不同,所以不能简单地线性映射,而是需要建立较复杂的哈希函数,这就有可能造成“冲突”——这是哈希面临的主要问题。好的哈希函数应该让随机数据值得到的哈希结果尽可能地随即和分散,而且减少冲突。
=====================分割线=======================
有这样一类问题,查找是否有出现多于一次的数据?笨方法只能从头至尾逐一比对,复杂性为O(N*N)。聪明一点的方法,如果数据不是很分散,可以用做记号的方法,用一个位数组(可用bool实现)记录各个位所代表的数据是否出现过,如果读入一个已经出现过的数据则说明它出现多于一次,用int代替bool,还可以记录下每个数据出现的次数,在遍历一次便可得到出现最多次的数据,复杂度为O(N)。但是如果数据很分散,这种线性映射就不管用了,因为内存会严重浪费,如果数据过于夸张,会造成很大BUFFER的申请,但是这种映射记录的思想还是可取的,这时就需要一个从很大的数据域向相对很小的地址域映射的工具来辅助,自然就是“哈希”。
分享到:
相关推荐
标题中的“python_geohash-0.8.5-cp310-cp310-win_amd64.whl.zip”是一个Python软件包的压缩文件,它包含了Python的Geohash库的一个特定版本(0.8.5)。这个库主要用于处理地理坐标,并将它们转换成可存储和比较的...
标题中的"python_geohash-0.8.5-cp37-cp37m-win_amd64.whl.zip"表明这是一个与Python相关的压缩包,特别提到了`geohash`,它是一个用于处理地理位置数据的库。版本号是0.8.5,`cp37`和`cp37m`指的是它适用于Python ...
标题中的"python_geohash-0.8.5-cp39-cp39-win_amd64.whl.zip"表明这是一个与Python相关的压缩包,其中包含了一个名为"python_geohash-0.8.5-cp39-cp39-win_amd64.whl"的文件,这个文件是Python的轮子(wheel)格式...
python_geohash-0.8.5-cp37-cp37m-win_amd64
python_geohash-0.8.5-cp39-cp39-win_amd64
python_geohash-0.8.5-cp35-cp35m-win_amd64
python_geohash-0.8.5-cp38-cp38-win_amd64
标题中的"python_geohash-0.8.5-cp311-cp311-win_amd64.whl.zip"是一个Python软件包的压缩文件,它包含了Python的GeoHash库的一个特定版本。GeoHash是一种地理位置编码技术,用于将经纬度坐标转换成可存储和查询的...
标题中的"python_geohash-0.8.5-cp36-cp36m-win_amd64.whl.zip"表明这是一个与Python相关的库,名为`geohash`,版本为0.8.5。它是一个适用于Python 3.6(cp36代表Python 3.6)且构建于Windows AMD64架构(win_amd64...
`python_geohash-0.8.5-cp312-cp312-win_amd64.whl` 文件包含了Python Geohash库的源代码和所需的依赖项,已经预先编译为特定平台的字节码,用户可以通过`pip`工具轻松安装到Python环境中。例如,使用以下命令可以...
`python_geohash-0.8.5-cp38-cp38-win_amd64.whl` 是一个专门为Python 3.8编译的Windows 64位平台的安装包,`.whl` 文件是Python的Wheel格式,它是预编译的Python包,可以直接通过pip安装,避免了编译过程,提高了...
python_geohash-0.8.5-cp36-cp36m-win32
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
An implementation of the hash functions SHA-256, 384 and 512 is presented, obtaining a high clock rate through a re- duction of the critical path length, both in the Expander and in the Compressor of ...
Hash-Hash-Hash
python_geohash-0.8.5-cp37-cp37m-win32
python_geohash-0.8.5-cp38-cp38-win_amd64.whl
hashcat-utils Hashcat-utils are a set of small utilities that are useful in advanced password cracking Brief description They all are packed into multiple stand-alone binaries. All of these utils ...
Geohash-1.0-py2.7 python计算geohash值转换为经纬度