目次
ハッシュ テーブルは通常、配列に基づいて実装されます。
競合を解決する 2 つの一般的な解決策:
高パフォーマンスのハッシュ関数には、次の 2 つの利点がある必要があります:
快速計算
乘法次數:n(n 1)/2次;
ホームページ ウェブフロントエンド jsチュートリアル JavaScript がハッシュ テーブルを実装する方法の詳細な紹介

JavaScript がハッシュ テーブルを実装する方法の詳細な紹介

Mar 03, 2022 pm 05:21 PM
javascript

この記事では、javascript に関する関連知識を提供します。主に、JavaScript がハッシュ テーブルを実装し、最終データが挿入される配列の構造全体をカプセル化する方法に関する関連問題を紹介します。はハッシュテーブルです。皆さんのお役に立てれば幸いです。

関連する推奨事項: JavaScript 学習チュートリアル

ハッシュ テーブルは通常、配列に基づいて実装されます。

  1. 非常に高速な挿入、削除、検索操作を提供できます
  2. データの量に関係なく、挿入と削除は一定に近い必要があります。時間: つまり、O(1) 時間レベルです。実際、それを行うには、いくつかの機械命令のみが必要です。
  3. ハッシュ テーブルはツリーよりも高速で、基本的に目的の要素を即座に見つけることができます
  4. ハッシュ テーブルはツリーよりもコーディングがはるかに簡単です

配列と比較したハッシュ テーブルのいくつかの欠点:

  1. ハッシュ テーブル内のデータは順序が整っていないため、固定された方法で走査することができません。
  2. 通常、ハッシュ テーブル内のキーは繰り返すことができず、同じキーを配置することはできません。異なる要素を保存するために使用されます。
  3. スペース使用率は高くなく、最下層uses は配列であり、一部のセルは使用されません

ハッシュ テーブルとは何ですか?

    ハッシュ テーブルは、構造や原則をグラフィックの形式で表現できる配列、リンク リスト、ツリーとは異なり、理解するのが簡単ではありません。
  • ハッシュ テーブルの構造は
  • 配列 ですが、その魔法は 添え字値 の変換にあり、これを ハッシュ関数# と呼ぶことができます。 ##、HashCodeはハッシュ関数を通じて取得できます。
ハッシュ テーブルのいくつかの概念

    ハッシュ:
  • 変換 大きな数値 形成のプロセス 配列範囲内の添字 ハッシュ と呼ばれます;
  • ハッシュ関数:
  • 通常使用する Word は次のように変換されます。 bignumber、および hashingbignumber のコード実装は、ハッシュ関数;## と呼ばれる関数に配置されます。 #ハッシュ テーブル:
  • 最終データに挿入された
  • 配列 構造 全体をカプセル化し、ハッシュ テーブル を取得します。 。
  • まだ解決する必要がある問題
:

ハッシュされた添字はまだ可能です

重複
    、これを解決する方法どうしたの?この状況は
  • 紛争 と呼ばれます。紛争は 必然 であり、我々が解決できるのは 競合 だけです。 競合を解決する方法

競合を解決する 2 つの一般的な解決策:

オプション 1:

チェーン アドレス方法
    (
  • zipper メソッド );下の図に示すように、各数値の
  • 10
に対して剰余演算を実行し、残り

0~9 の範囲は配列の添字値として使用されます。さらに、配列内の各添字値に対応する位置には数値が格納されなくなり、剰余演算後の剰余が同じ数値で構成される array または linked list## が格納されます。 。

要約: チェーン アドレス方式による競合を解決する方法は、

各アレイ ユニットに格納されているデータ

が存在しないことです。長い 単一のデータ ですが、 チェーン 。このチェーンに一般的に使用されるデータ構造は、配列またはリンク リスト です。2 つのデータ構造の検索効率は次のとおりです。同等です (チェーンの要素は一般に多すぎないため)。 オプション 2: オープン アドレス メソッド

;
  • オープン アドレス メソッドの主な作業方法は、空白セルを探す##です。
  • # 競合する
データ項目を配置します。

空白セルの位置を検出するさまざまな方法に応じて、次の 3 つの方法に分けることができます。

線形検出

  • 二次検出
  • リハッシュ法
  • 負荷率が増加するにつれて、 、平均 検出長は直線的かつ緩やかに増加します。開発ではチェーン アドレス方式がよく使用され、たとえば Java の HashMap では チェーン アドレス方式 が使用されます。
優れたハッシュ関数

ハッシュ テーブルの利点はその速度であるため、ハッシュ関数は高いパフォーマンスを消費する複雑なアルゴリズムを使用できません。速度を向上させる 1 つの方法は、ハッシュ関数の 乗算と除算を最小限に抑えることです。

高パフォーマンスのハッシュ関数には、次の 2 つの利点がある必要があります:

  • 快速的計算
  • #均勻的分佈;
快速計算

#霍納法則:在中國霍納法則也叫做

秦九韶演算法
    ,具體演算法為:
求多項式的值時,先計算最內層括號內一次多項式的數值,再由內向外逐層計算一次多項式的數值。這個演算法把求n次多項式f(x)的值就轉換成求n個一次多項式的值。

變換之前

乘法次數:n(n 1)/2次;

加法次數:n次;變換之後:

乘法次數:n次;加法次數:n次;

如果使用大O表示時間複雜度的話,直接從變換前的O(N2)降到了O(N)

均勻分佈

為了確保資料在雜湊表中均勻分佈,當我們需要
使用常數的地方

,盡量使用###質數###;例如:哈希表的長度、N次方的底數等。 ######Java中的HashMap採用的是鏈結位址法,哈希化採用的是公式為:###index = HashCode(key)&(Length-1)#########即將資料化為二進位進行###與###運算,而不是取餘運算。這樣計算機直接運算二進位數據,效率更高。但是JavaScript在進行叫大數據的###與###運算時會出現問題,所以以下使用JavaScript實作哈希化時還是會採用取餘運算。 ###
                    function HashTable() {
                // 存放相关的元素
                this.storage = [];
                // 存了多少数据
                this.count = 0;
                // 用于标记数组中一共存放了多少个元素
                this.limit = 7;
                /*
           设计哈希函数
           ①将字符串转成比较大的数字
           ②将大的数字hashCode压缩到数组范围之内
            */
                HashTable.prototype.hashFunction = function (str, size) {
                    var hashCode = 0;
                    //秦九韶算法(霍纳算法)
                    // 哈希表的长度、N次幂的底数等尽量选取质数
                    for (var i = 0; i  this.limit * 0.75) {
                        var newLimit = this.limit * 2;
                        var prime = this.getPrime(newLimit);
                        this.resize(prime);
                    }
                };
                // 获取
                HashTable.prototype.get = function (key) {
                    var index = this.hashFunction(key, this.limit);
                    var bucket = this.storage[index];
                    if (bucket == null) return null;
                    for (var i = 0; i  7 && this.count  0 ? false : true;
                };
                // size
                HashTable.prototype.size = function () {
                    return this.count;
                };
                // toString
                HashTable.prototype.toString = function () {
                    var str = '';
                    for (var i = 0; i ############相關推薦:###javascript學習教學#########
ログイン後にコピー

以上がJavaScript がハッシュ テーブルを実装する方法の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

See all articles