该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值,即将数据离散化,以方便存取),这样可以快速在数组等数据结构中存取数据。
例如:
//HashTable.h
template
class HashTable
{
public :
HashTable( int count ) ;
void put( T* t ,int key ) ;
T* get( int key ) ;
private :
T** tArray ;
};
//HashTable.cpp
template
class HashTable
{
HashTable::HashTable( int count )
{
tArray = new T*[count] ;
}
void HashTable::put( T* t , int key )
{
this->tArray[ key ] = t ;
}
T* HashTable::get( int key )
{
return this->tArray[ key ] ;
}
}
这样,我们只要知道key值,就可以快速存取T类型的数据,而不用像在链表等数据结构中查找一样,
要找来找去的. 至于key值,一般都是用某种算法(所谓的Hash算法)算出来的.例如:字符串的Hash算法, char* value = "hello";
int key = (((((((27* (int)'h'+27)* (int)'e') + 27) * (int)'l') + 27) * (int)'l'
+27) * 27 ) + (int)'o'
; Hash函数处理流程Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,
pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意内容的输入转换成相同长度输出的加密方式.