zoukankan      html  css  js  c++  java
  • 初学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避免了碰撞

    }

  • 相关阅读:
    字节跳动软开校招岗
    众安保险软开校招岗
    topjui中combobox使用
    easyui中datagrid+layout布局
    jquery/js记录点击事件,单击次数加一,双击清零
    java图片上传及图片回显1
    java格式化
    java中的String整理
    删除window10没用的服务
    修改mysql默认端口
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/4666258.html
Copyright © 2011-2022 走看看