• 初学hash


    hash定义:

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的函数。

    有一道很经典的题目

    uva 10391 Compound Words

    这道题当然有别的简洁的方法,不过可以这样:把所有的字符串都用hash函数转换成特定的某个数字,做成字典,然后就好做了

    例如:

    a
    97
    alien
    53987
    born
    112833
    less
    102269
    lien
    49074
    never
    112124
    nevertheless
    3090
    new
    101060
    newborn
    33605
    the
    84401
    zebra
    45994

    这个方法应该有两个要求必须实现:1.转换成的数字要唯一,2.转换成的数字不能超过特定长度

    int hash(char a[])

    {

    long int seed=104;         //seed的值可以任意给

    long int hash=0;

    for(int i=0;i<sizeof(a);i++)

    {

    hash=hash*seed+a[i];

    }

    return (hash&P)%120000;   //P定义为0x7fffffff  //由于输入最多有120000,所以mod120000避免了碰撞

    }

  • 相关阅读:
    JEECG开发总结
    ehcache集群的配置
    spring拦截器
    spring的基本配置
    kindeditor编辑器
    jQuery中的Ajax
    表单验证
    Python中的Random模块
    Open vSwitch FAQ (二)
    Open vSwitch FAQ (一)
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/4666258.html
Copyright © 2020-2023  润新知