ハッシュ化

Jul 28, 2024 am 02:59 AM

ハッシュ化は非常に効率的です。ハッシュを使用した要素の検索、挿入、削除には O(1) 時間がかかります。バランスの取れた検索ツリーでは、O(log n) 時間で要素を見つけることができます。コンテナ内の要素を検索するより効率的な方法はありますか?この章では、ハッシュと呼ばれる手法を紹介します。ハッシュを使用すると、O(1) 時間で要素の検索、挿入、削除を行うマップまたはセットを実装できます。

ハッシュとは何ですか?

ハッシュでは、ハッシュ関数を使用してキーをインデックスにマップします。ハッシュを紹介する前に、ハッシュを使用して実装されるデータ構造であるマップについて確認してみましょう。 map (セクションで紹介) はエントリを格納するコンテナ オブジェクトであることを思い出してください。各エントリには、キーの 2 つの部分が含まれています。このキーは検索キーとも呼ばれ、対応する値を検索するために使用されます。たとえば、単語がキー、単語の定義が値であるマップに辞書を保存できます。

マップは、辞書ハッシュ テーブル、または 連想配列とも呼ばれます。

Java Collections Framework は、マップをモデリングするための java.util.Map インターフェースを定義します。 3 つの具体的な実装は、java.util.HashMapjava.util.LinkedHashMap、および java.util.TreeMap です。 java.util.HashMap はハッシュを使用して実装され、java.util.LinkedHashMapLinkedList を使用して実装され、java.util.TreeMap は red を使用して実装されます。 -黒い木々。

配列内の要素のインデックスがわかっている場合は、そのインデックスを使用して O(1) 時間で要素を取得できます。ということは、値を配列に格納し、そのキーをインデックスとして使用して値を検索できるということでしょうか?キーをインデックスにマッピングできれば、答えは「はい」です。値を格納する配列はハッシュ テーブルと呼ばれます。キーをハッシュ テーブル内のインデックスにマッピングする関数は、ハッシュ関数 と呼ばれます。以下の図に示すように、ハッシュ関数はキーからインデックスを取得し、そのインデックスを使用してキーの値を取得します。 ハッシュ化とは、検索を行わずにキーから取得したインデックスを利用して値を取得する手法です。

ハッシュ化

キーからインデックスを生成するハッシュ関数はどのように設計しますか?理想的には、各検索キーをハッシュ テーブル内の異なるインデックスにマップする関数を設計したいと考えています。このような関数は完全ハッシュ関数と呼ばれます。ただし、完全なハッシュ関数を見つけるのは困難です。 2 つ以上のキーが同じハッシュ値にマッピングされている場合、衝突が発生したといいます。この章で後ほど説明するように、衝突に対処する方法はありますが、最初から衝突を回避することをお勧めします。したがって、衝突を最小限に抑える、高速で計算が簡単なハッシュ関数を設計する必要があります。

以上がハッシュ化の詳細内容です。詳細については、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)

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20:キーパフォーマンスが向上し、新機能

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

Iceberg:データレイクテーブルの未来

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

See all articles