Heim Backend-Entwicklung PHP-Tutorial php-perl哈希算法实现(times33哈希算法)_PHP

php-perl哈希算法实现(times33哈希算法)_PHP

Jun 01, 2016 am 11:58 AM
哈希算法

复制代码 代码如下:
APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *char_key,
                                                      apr_ssize_t *klen)
{
    unsigned int hash = 0;
    const unsigned char *key = (const unsigned char *)char_key;
    const unsigned char *p;
    apr_ssize_t i;

    /*
     * This is the popular `times 33' hash algorithm which is used by
     * perl and also appears in Berkeley DB. This is one of the best
     * known hash functions for strings because it is both computed
     * very fast and distributes very well.
     *
     * The originator may be Dan Bernstein but the code in Berkeley DB
     * cites Chris Torek as the source. The best citation I have found
     * is "Chris Torek, Hash function for text in C, Usenet message
     * in comp.lang.c , October, 1990." in Rich
     * Salz's USENIX 1992 paper about INN which can be found at
     * .
     *
     * The magic of number 33, i.e. why it works better than many other
     * constants, prime or not, has never been adequately explained by
     * anyone. So I try an explanation: if one experimentally tests all
     * multipliers between 1 and 256 (as I did while writing a low-level
     * data structure library some time ago) one detects that even
     * numbers are not useable at all. The remaining 128 odd numbers
     * (except for the number 1) work more or less all equally well.
     * They all distribute in an acceptable way and this way fill a hash
     * table with an average percent of approx. 86%.
     *
     * If one compares the chi^2 values of the variants (see
     * Bob Jenkins ``Hashing Frequently Asked Questions'' at
     * http://burtleburtle.net/bob/hash/hashfaq.html for a description
     * of chi^2), the number 33 not even has the best value. But the
     * number 33 and a few other equally good numbers like 17, 31, 63,
     * 127 and 129 have nevertheless a great advantage to the remaining
     * numbers in the large set of possible multipliers: their multiply
     * operation can be replaced by a faster operation based on just one
     * shift plus either a single addition or subtraction operation. And
     * because a hash function has to both distribute good _and_ has to
     * be very fast to compute, those few numbers should be preferred.
     *
     *                  -- Ralf S. Engelschall
     */

    if (*klen == APR_HASH_KEY_STRING) {
        for (p = key; *p; p++) {
            hash = hash * 33 + *p;
        }
        *klen = p - key;
    }
    else {
        for (p = key, i = *klen; i; i--, p++) {
            hash = hash * 33 + *p;
        }
    }
    return hash;
}

对函数注释部分的翻译: 这是很出名的times33哈希算法,此算法被perl语言采用并在Berkeley DB中出现.它是已知的最好的哈希算法之一,在处理以字符串为键值的哈希时,有着极快的计算效率和很好哈希分布.最早提出这个算法的是Dan Bernstein,但是源代码确实由Clris Torek在Berkeley DB出实作的.我找到的最确切的引文中这样说”Chris Torek,C语言文本哈希函数,Usenet消息 in comp.lang.c ,1990年十月.”在Rich Salz于1992年在USENIX报上发表的讨论INN的文章中提到.这篇文章可以在上找到. 33这个奇妙的数字,为什么它能够比其他数值效果更好呢?无论重要与否,却从来没有人能够充分说明其中的原因.因此在这里,我来试着解释一下.如果某人试着测试1到256之间的每个数字(就像我前段时间写的一个底层数据结构库那样),他会发现,没有哪一个数字的表现是特别突出的.其中的128个奇数(1除外)的表现都差不多,都能够达到一个能接受的哈希分布,平均分布率大概是86%. 如果比较这128个奇数中的方差值(gibbon:统计术语,表示随机变量与它的数学期望之间的平均偏离程度)的话(见Bob Jenkins的http://burtleburtle.net/bob/hash/hashfaq.html,中对平方差的描述),数字33并不是表现最好的一个.(gibbon:这里按照我的理解,照常理,应该是方差越小稳定,但是由于这里不清楚作者方差的计算公式,以及在哈希离散表,是不是离散度越大越好,所以不得而知这里的表现好是指方差值大还是指方差值小),但是数字33以及其他一些同样好的数字比如 17,31,63,127和129对于其他剩下的数字,在面对大量的哈希运算时,仍然有一个大大的优势,就是这些数字能够将乘法用位运算配合加减法来替换,这样的运算速度会提高.毕竟一个好的哈希算法要求既有好的分布,也要有高的计算速度,能同时达到这两点的数字很少.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Golang-Funktions-Hash, crc32-, md5- und sha1-Berechnungsmethoden Golang-Funktions-Hash, crc32-, md5- und sha1-Berechnungsmethoden May 18, 2023 am 08:12 AM

Golang ist eine neue Hochleistungsprogrammiersprache mit einer umfangreichen Standardbibliothek und integrierten Funktionen. Dazu gehören Hash-Funktionen, mit denen Hash-Werte von Daten zur Dateiverifizierung, Datenverifizierung usw. generiert werden können. In diesem Artikel werden die Berechnungsmethoden und Anwendungen der häufig verwendeten Funktionen hash, crc32, md5 und sha1 in Golang vorgestellt. 1. Hash-Funktion Die Hash-Funktion von Golang umfasst eine Vielzahl von Hash-Algorithmen wie SHA-1, MD5, SHA-224, SHA-256, SH

Was sind die am häufigsten verwendeten Hash-Algorithmus-Tools in Java-Funktionsbibliotheken? Was sind die am häufigsten verwendeten Hash-Algorithmus-Tools in Java-Funktionsbibliotheken? Apr 30, 2024 pm 03:21 PM

In der Java-Funktionsbibliothek kann die MessageDigest-Klasse für Hash-Algorithmen verwendet werden und bietet Implementierungen von MD5, SHA und anderen Hash-Algorithmen, einschließlich: 1. MD5-Algorithmus: Verwenden Sie MessageDigest.getInstance("MD5"), um eine Instanz abzurufen. 2.SHA-Algorithmus: einschließlich SHA-1, SHA-256, SHA-384 und SHA-512, verwenden Sie MessageDigest.getInstance("SHA-256"), um die Instanz abzurufen. 3. Andere Hashing-Algorithmen: Sie können Bibliotheken von Drittanbietern verwenden, z. B. Algorithms.MessageDigest oder die BouncyCastle-Bibliothek.

So implementieren Sie den MD5-Hash-Algorithmus mit Java So implementieren Sie den MD5-Hash-Algorithmus mit Java Sep 21, 2023 am 08:31 AM

So verwenden Sie Java zum Implementieren des MD5-Hash-Algorithmus MD5 (MessageDigestAlgorithm5) ist ein häufig verwendeter Hash-Algorithmus, der zum Verschlüsseln und Überprüfen von Daten verwendet wird. In Java können wir die MessageDigest-Klasse verwenden, um den MD5-Hash-Algorithmus zu implementieren. Im Folgenden finden Sie einen einfachen Beispielcode, der zeigt, wie der MD5-Algorithmus mit Java implementiert wird. importjava.security.MessageDigest;

Implementieren Sie Ihren eigenen SHA-256-Hashing-Algorithmus in PHP! Implementieren Sie Ihren eigenen SHA-256-Hashing-Algorithmus in PHP! May 23, 2022 am 11:39 AM

Hash wird auch „Hash“ genannt. Er empfängt einen beliebigen Satz von Eingabeinformationen beliebiger Länge und wandelt ihn über den Hash-Algorithmus in einen Datenfingerabdruck fester Länge um. Im Allgemeinen kann ein Hash als Nachrichtenauszug verstanden werden.

Die zugrunde liegende Python-Technologie enthüllt: So implementieren Sie eine Hash-Tabelle Die zugrunde liegende Python-Technologie enthüllt: So implementieren Sie eine Hash-Tabelle Nov 08, 2023 am 11:53 AM

Die zugrunde liegende Python-Technologie wurde enthüllt: So implementieren Sie eine Hash-Tabelle. Eine Hash-Tabelle ist eine sehr häufige und wichtige Datenstruktur im Computerbereich. Sie kann eine große Anzahl von Schlüssel-Wert-Paaren effizient speichern und durchsuchen. In Python können wir Hash-Tabellen mithilfe von Wörterbüchern verwenden, aber nur wenige Menschen verstehen die Implementierungsdetails im Detail. In diesem Artikel wird die zugrunde liegende Implementierungstechnologie von Hash-Tabellen in Python erläutert und spezifische Codebeispiele aufgeführt. Die Kernidee einer Hash-Tabelle besteht darin, Schlüssel über eine Hash-Funktion einem Array fester Größe zuzuordnen, anstatt sie einfach nacheinander zu speichern.

So verwenden Sie das Hashlib-Modul zur Berechnung des Hash-Algorithmus in Python 2.x So verwenden Sie das Hashlib-Modul zur Berechnung des Hash-Algorithmus in Python 2.x Jul 29, 2023 pm 05:16 PM

So verwenden Sie das Hashlib-Modul zur Berechnung des Hash-Algorithmus in Python 2.x. In der Python-Programmierung ist der Hash-Algorithmus ein häufig verwendeter Algorithmus, der zur Generierung einer eindeutigen Identifizierung von Daten verwendet wird. Python stellt das Hashlib-Modul zur Durchführung von Hash-Algorithmus-Berechnungen bereit. In diesem Artikel wird die Verwendung des Hashlib-Moduls zur Durchführung von Hash-Algorithmus-Berechnungen vorgestellt und einige Beispielcodes bereitgestellt. Das Hashlib-Modul ist Teil der Python-Standardbibliothek und bietet eine Vielzahl gängiger Hash-Algorithmen wie MD5, SH

Detaillierte Erklärung des Hash-Algorithmus in PHP Detaillierte Erklärung des Hash-Algorithmus in PHP Jul 07, 2023 pm 07:13 PM

Detaillierte Erläuterung des Hash-Algorithmus in PHP In der PHP-Entwicklung ist der Hash-Algorithmus eine häufig verwendete Verschlüsselungstechnologie, die Daten beliebiger Länge in einen Hashwert fester Länge umwandeln kann. Hash-Algorithmen werden häufig in der Kryptographie, der Überprüfung der Datenintegrität und der schnellen Datensuche eingesetzt. In diesem Artikel stellen wir Hashing-Algorithmen in PHP ausführlich vor und stellen einige Codebeispiele als Referenz bereit. 1. Grundprinzipien von Hash-Algorithmen Der Hash-Algorithmus generiert einen Hashwert fester Länge, indem er eine Reihe mathematischer Operationen an den Eingabedaten durchführt. Haben Sie die folgenden Grundlagen

Wie implementiert man den SHA-Hashing-Algorithmus mit Python? Wie implementiert man den SHA-Hashing-Algorithmus mit Python? Sep 19, 2023 pm 12:42 PM

Wie implementiert man den SHA-Hashing-Algorithmus mit Python? SHA (Secure Hash Algorithm) ist eine häufig verwendete kryptografische Hash-Funktion, die einen eindeutigen Hash-Wert fester Länge für Daten beliebiger Länge generiert. Das Hashlib-Modul wird in Python bereitgestellt und enthält häufig verwendete Hash-Algorithmen, einschließlich des SHA-Algorithmus. In diesem Artikel wird detailliert beschrieben, wie Python zum Implementieren des SHA-Hash-Algorithmus verwendet wird, und es werden relevante Codebeispiele bereitgestellt. Zuerst müssen Sie das Hashlib-Modul importieren. Im Folgenden finden Sie den Code zum Importieren des Hashlib-Moduls:

See all articles