zoukankan      html  css  js  c++  java
  • JavaScript数据结构-13.散列碰撞(开链法)

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>开链散列</title>
     6     </head>
     7     <body>
     8         <script>
     9             function HashTable(){
    10                 this.table = new Array(137);
    11                 this.betterHash = betterHash;
    12                 this.showDistro = showDistro;
    13                 this.put = put;
    14                 this.get = get;
    15                 this.buildChains = buildChains;
    16             }
    17 
    18             function betterHash(data){
    19                 const H =37;
    20                 var total = 0;
    21                 for(var i=0;i<data.length;i++){
    22                     total += H*total + data.charCodeAt(i);
    23                     
    24                 }
    25                 total %= this.table.length;
    26                 if(total <0){
    27                     total += this.table.length-1;
    28                 }
    29                 console.log(data+"->"+ total % this.table.length);
    30                 return  parseInt(total);
    31             }
    32             function put(key,data){
    33                 var pos = this.betterHash(key);
    34                 var index = 0;
    35                 if(this.table[pos][index] == undefined ){
    36                     this.table[pos][index+1] = data;
    37                     this.table[pos][0] = key;
    38                     index++;
    39                 }else{
    40                     while(this.table[pos][index] != undefined ){
    41                         index++;
    42                     }
    43                     this.table[pos][index+1] = data;
    44                 }
    45             }
    46             function showDistro(){
    47                 for(var i = 0;i<this.table.length;i++){
    48                     if(this.table[i][0] != undefined){
    49                         console.log(this.table[i][0],":",this.table[i]);
    50                     }
    51                 }
    52             }
    53             function get(key){
    54                 var index = 0;
    55                 var pos = this.betterHash(key);
    56                 if(this.table[pos][index] == key){
    57                     return this.table[pos][index+1];
    58                     index+=2;
    59                 }else{
    60                     while(this.table[pos][index] != key){
    61                         index += 2;
    62                     }
    63                     return this.table[pos][index+1];
    64                 }
    65                 return undefined;
    66             }
    67             function buildChains(){
    68                 for(var i=0;i<this.table.length;i++){
    69                     this.table[i] = new Array();
    70                 }
    71             }
    72             
    73             
    74             var obj = new HashTable();
    75             obj.buildChains();
    76             obj.put("k1","zhangsan");
    77             obj.put("k2","lisi");
    78             obj.put("k3","javascript");
    79             obj.showDistro();
    80             console.log(obj.get("k2"));
    81         </script>
    82     </body>
    83 </html>
  • 相关阅读:
    Docker之Harbor
    idea 代码块编辑(批量列编辑)快捷键 -- idea version 2018 不常用
    mysql 去除表中重复的数据,保留id最小的数据信息
    打家劫舍(动态规划+滚动数组+取模运算优化)
    利用线程异步调用
    idea 2019激活码
    mysql导出PDM表结构并带有注释
    安装GO
    GO语言
    项目启动
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/7191917.html
Copyright © 2011-2022 走看看