• 散列表


    语雀入口

     https://www.yuque.com/along-n3gko/ezt5z9

    介绍

      散列是一种常用的数据存储技术,散列后的数据可以快速的插入或取用。散列所使用的数据结构叫散列表。

      散列算法的作用是尽可能的在数据结构中找到一个值。

      基本特点:插入,删除,取用数据都非常快,但是查询效率很低,如果你希望快速查找一般是借助其他的数据结构,比如二叉查找树。 

    示例

      我们将要使用最常见的散列函 数——lose lose”散列函数,方法是简单地将每个键值中的每个字母的ASCII值相加。

      

    HashTable类

      先实一个简单的散列函数,它是HashTable类中的一个私有方法:

    1 var loseloseHashCode = function (key) {
    2     var hash = 0; //存储ASCII总和
    3     for (var i = 0; i < key.length; i++) { //对key值遍历
    4         hash += key.charCodeAt(i); //计算每个字符的ASCII值相加
    5     }
    6     return hash % 37; //和任意数做除法
    7 };

    完整代码

     1 class hashTable {
     2     constructor() {
     3         this.table = new Array(7);
     4     }
     5     put(key) {
     6         let pos = this.loseloseHashCode(key);
     7         this.table[pos] = key;
     8 
     9     }
    10     get(key) {
    11         return table[loseloseHashCode(key)];
    12     }
    13     remove(key) {
    14         table[loseloseHashCode(key)] = undefined;
    15     }
    16     showDistro() {
    17         let n = 0;
    18         for (let i = 0, len = this.table.length; i < len; ++i) {
    19             if (this.table[i] !== 'undefined') {
    20                 console.log(`${i}:${this.table[i]}`)
    21             }
    22         }
    23     }
    24     loseloseHashCode(key) {
    25         var hash = 0;
    26         for (var i = 0; i < key.length; i++) {
    27             hash += key.charCodeAt(i);
    28         }
    29         console.log('hashValue:' + hash)
    30         return hash % this.table.length;
    31     }
    32 }
    33 
    34 let dataa = ['Clayton', 'Raymond', 'kitty', 'Miachale'];
    35 let htable = new hashTable();
    36 dataa.forEach(item=>{
    37   htable.put(item)
    38 })
    39 htable.showDistro()
    40 
    41 //执行结果
    42 hashValue:730
    43 hashValue:730
    44 hashValue:565
    45 hashValue:788
    46 0:undefined
    47 1:undefined
    48 2:Raymond
    49 3:undefined
    50 4:Miachale
    51 5:kitty
    52 6:undefined

      结论:simpleHash在计算某些值的哈希值时,会有键一样而丢失的情况,那么需要一个更好的散列函数。

     

  • 相关阅读:
    BZOJ 3260: 跳 (组合恒等式)
    BZOJ 1924 [SDOI 2010] 所驼门王的宝藏 (优化建图+tarjan+最长链)
    BZOJ 3451Normal (点分治+FFT)
    BZOJ 2213: [Poi2011]Difference (DP)
    BZOJ 3251 树上三角形 (暴力)
    [HNOI2008]明明的烦恼
    HDU 1521 排列组合
    [HNOI2008]神奇的国度
    [HNOI2008]遥远的行星
    [HNOI2001]软件开发
  • 原文地址:https://www.cnblogs.com/alongup/p/12899745.html
Copyright © 2020-2023  润新知