Hash of js

来源:http://www.cnblogs.com/lemon-zhang/archive/2017/11/08/7804847.html
-Advertisement-
Play Games

function HashTable() { this.table = new Array(137); }; HashTable.prototype = { constructor: HashTable, simpleHash: function(data) { var total = 0; for... ...


function HashTable() {
    this.table = new Array(137);
};
HashTable.prototype = {
    constructor: HashTable,
    simpleHash: function(data) {
        var total = 0;
        for (var i = 0; i < data.length; ++i) {
            total += data.charCodeAt(i);
        }
        return total % this.table.length;
    },
    showDistro: function () {
        var n = 0;
        for (var i = 0; i < this.table.length; ++i) {

            if (this.table[i][0] != undefined) {
                console.log(i + ": " + this.table[i].join('|--|'));
            }
        }
    },
    put: function (key, data) {
        var pos = this.betterHash(key);
        var index = 0;

        if (this.table[pos][index] == undefined) {
            this.table[pos][index] = [key, data];
            ++index;
        } else {
            while (this.table[pos][index] != undefined) {
                ++index;
            }
            this.table[pos][index] = [key, data];
        }
    },
    get: function(key){
        var index = 0;
        var pos = this.betterHash(key);

        if (this.table[pos][index][0] == key) {
            return this.table[pos][index];
        } else {
            while (this.table[pos][index][0] != key) {
                ++index;
            }
            return this.table[pos][index];
        }
        return undefined;
    },
    betterHash: function (string, arr) {
        const H = 37;
        var total = 0;
        for (var i = 0; i < string.length; ++i) {
            total += H * total + string.charCodeAt(i);
        }
        total = total % this.table.length;

        if (total < 0) {
            total += this.table.length-1;
        }
        return parseInt(total);
    },
    buildChains: function () {

        //開鏈法
        for (var i = 0; i < this.table.length; ++i) {
            this.table[i] = new Array();
        }
    }
};

//線性探測法
var values = [];

function put(key, data) {
    var pos = this.betterHash(key);

    if (this.table[pos] == undefined) {
        this.table[pos] = key;
        this.values[pos] = data;
    } else {
        while (this.table[pos] != undefined) {
            pos++;
        }
        this.table[pos] = key;
        this.values[pos] = data;
    }
};
function get(key) {
    var hash = -1;
    hash = this.betterHash(key);

    if (hash > -1) {
        for (var i = hash; this.table[i] != undefined; i++) {
            if (this.table[i] == key) {
                return this.values[i];
            }
        }
    }
    return undefined;
}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 花了1天多的時間, 終於把這個框架搭建起來了。 好了, 不多說了, 直接進入主題了。前提是安裝了nodejs,至於怎麼安裝, 網上都有教程。 這裡就不多說了, 這邊使用的IDE是idea。1.在E:/my-project(我的電腦上) 新建文件夾vueDemo,用idea直接打開, idea控制台會 ...
  • 一、基本類型和引用類型 ECMAScipt變數可能分為兩種數據類型:基本類型和引用類型。 基本類型:指簡單的數據段;包括Undefined、Null、Boolean、Number、String;可以操作保存在變數中值(棧記憶體),所以稱為按值訪問;不能添加屬性。 引用類型:可能由多個值構成的對象;包括 ...
  • 前言 現在,我們被稱為前端工程師。然而,早年給我們的稱呼卻是頁面仔。或許是職責越來越大,整體的前端井噴式的發展,使我們只關註了js,而疏遠了css和html。 其實,我們可能經常在聊組件化,咋地咋地。但是,回過頭來思考一下,如果你看到一張設計稿的時候,連佈局都不清不楚,談何組件化呢。所以,我們需要在 ...
  • 在 HTML5 中,拖放是標準的一部分,即抓取對象以後拖到另一個位置(添加已定義好的父級元素里),任何元素都能夠拖放。 瀏覽器支持 Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。 *註釋:在 Safari 5.1.2 中不支 ...
  • 《javascript高級程式設計》跨瀏覽器事件處理程式EventUtil.js個人註釋 EventUtil.js 詳細說明: addHandler方法 這是EventUtil中最常用的方法,它的作用是為對象添加事件並保證相容性 在DOM0級事件處理程式(下文均簡稱“DOM0級”)中 每個元素(包括 ...
  • web前端學習路線 h5學習路線 移動端學習路線 webapp學習路線 nodejs學習路線 ...
  • function Set() { this.dataStore = []; }; Set.prototype = { constructor: Set, add: function (data) { if (this.dataStore.indexOf(data) -1) { this.dataSt... ...
  • [轉載自zhoujian43] 演算法是程式的靈魂,一個優秀的前端工程師對演算法也是要有所瞭解的。 1. 冒泡排序 2. 快速排序 3. 二路歸併 將兩個按值有序序列合併成一個按值有序序列,則稱之為二路歸併排序 字元串操作 1. 判斷迴文字元串 2. 翻轉字元串 思路1:反向遍歷字元串 思路2:轉化成a ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...