字元串中的BKDRHash哈希函數

来源:https://www.cnblogs.com/Nebulary/archive/2023/10/27/17792236.html
-Advertisement-
Play Games

字元串中的BKDRHash哈希函數 在電腦科學中,哈希函數是一種將任意長度的輸入(也稱為“消息”)通過散列演算法轉換成固定長度的輸出,該輸出就是哈希值。哈希函數的一個重要特性是,對於相同的輸入,無論何時執行哈希函數,它都應該產生相同的輸出。然而,對於不同的輸入,即使它們只有微小的差別,哈希函數也應該 ...


字元串中的BKDRHash哈希函數

在電腦科學中,哈希函數是一種將任意長度的輸入(也稱為“消息”)通過散列演算法轉換成固定長度的輸出,該輸出就是哈希值。哈希函數的一個重要特性是,對於相同的輸入,無論何時執行哈希函數,它都應該產生相同的輸出。然而,對於不同的輸入,即使它們只有微小的差別,哈希函數也應該產生大不相同的輸出。

BKDRHash是一種常用的字元串哈希函數,它是由布隆和卡恩於1977年提出的。BKDRHash的基本思想是:對每個字元的ASCII值乘以一個常數因數,然後將所有的乘積相加,最後取結果的模。

BKDRHash演算法流程

  1. 選擇一個質數作為乘數因數,通常選擇的是31或者更大一些的質數。
  2. 初始化哈希值為0。
  3. 遍歷字元串中的每個字元,將字元的ASCII值乘以乘數因數,然後加到哈希值上。
  4. 返回哈希值。

C++代碼實現

以下是BKDRHash演算法的C++實現:

unsigned int BKDRHash(const char *str) {
    unsigned int seed = 131; // 31 131 1313 13131 131313等質數
    unsigned int hash = 0;
    while (*str) {
        hash = hash * seed + (*str++);
    }
    return (hash & 0x7FFFFFFF);
}

例題及題解

假設我們有一個字元串"Hello, World!",我們想要使用BKDRHash函數來計算它的哈希值。首先,我們需要遍歷字元串中的每個字元,然後將字元的ASCII值乘以乘數因數(在這個例子中是131),然後加到哈希值上。最後,我們返回哈希值。

以下是計算"Hello, World!"的BKDRHash值的C++代碼:

#include <iostream>
using namespace std;

int main() {
    const char *str = "Hello, World!";
    unsigned int hash = BKDRHash(str);
    cout << "The BKDRHash of \"" << str << "\" is " << hash << endl;
    return 0;
}

運行這段代碼,我們可以得到"Hello, World!"的BKDRHash值。


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

-Advertisement-
Play Games
更多相關文章
  • 當出現memory temporarily unavailable報錯時,首先根據報錯信息確認具體是哪個cn/dn報的,如果報錯信息沒有類似dnxxxx_xxxx這樣的信息,就是cn報的,需要去每個cn的日誌里排查是哪個cn。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 近期對管理後臺相關功能進行優化,其中導出功能涉及到查詢數據過多導致查詢很慢問題,決定採用點擊後加入到下載中心方式,既解決了介面慢等待問題,也方便後期各種文件的重覆下載,一舉多得~ 功能上很好實現,調介面就可以了,主要涉及到一個小球飛入效果 ...
  • 一、數組的存儲 1、當聲明一個變數時,var a = 111; 在後臺電腦翻譯時,var聲明 a變數 所以此時會產生一個棧記憶體,變數 a 的初始值為undefined,然後 = 111 ; undefined消失,111的值被賦值給了a。如果多個變數賦值的話,棧記憶體的執行順序是先進後出的順序。也叫 ...
  • 引言 近期,三大主流瀏覽器引擎均發佈最新版本,支持W3C的CSS Color 4標準,包含新的取色方法color()和相應語法,可展示更多的色域及色彩空間,這意味著web端能展示更豐富更高清的色彩。雖然目前只有最新版本的現代瀏覽器才支持,我們可以先提前瞭解一下這項新標準。 本文首先會先簡單介紹幾個色 ...
  • 非功能性需求是什麼呢?保障系統持續健康運轉的輔助需求。依然以電商系統的優惠券為例,在促銷活動期間發放大量優惠券,如何防止用戶集中領券時系統不崩盤呢?活動結束後,如何收縮伺服器,節省伺服器資源呢? 非功能性需求是面向運維的,重要但是不太緊迫,有時候可以沒有操作界面,由架構師提出解決方案,再推動各個業務... ...
  • 單詞 "多態" 意味著 "多種形式",在編程中,它指的是具有相同名稱的方法/函數/操作符,可以在許多不同的對象或類上執行。 函數多態性 一個示例是 Python 中的 len() 函數,它可以用於不同的對象。 字元串 對於字元串,len() 返回字元的數量: 示例 x = "Hello World! ...
  • PDF(Portable Document Format)是一種常用的文檔格式,具有跨平臺相容性、保真性、安全性和交互性等特點。我們日常生活工作中的合同、報告、論文等通常都採用PDF格式,以確保文檔在不同的操作系統(例如 Windows、Mac、Linux)和設備上被查看時都能保持外觀的一致性。 P ...
  • 本章節主要講的是如何配置熱載入,會碰到什麼問題,要怎麼處理。`wmproxy`是由`Rust`編寫,已實現`http/https`代理,`socks5`代理, 反向代理,靜態文件伺服器,內網穿透,配置熱更新等, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...