検索テクノロジーのコア学習の概要

1. 検索技術学習の必要性の分析

(1) 主な理由の分析

特に今日の情報爆発のデジタル時代において、検索テクノロジー (情報検索、IR) を学習することには多くの重要な理由があります。

全体として、検索技術を学ぶことは、私生活だけでなく、専門的および学術的な環境においても、情報の処理と利用の効率を向上させるのに役立ちます。これらのスキルは、情報を検索、分析、整理してさまざまなニーズや目標をより適切に満たす能力を強化します。

(2) 現代のビジネスシステムへの応用例

検索テクノロジーは、多くの一般的なビジネス システムの基礎となるテクノロジーであり、効率的な情報検索と関連性のランキングを実現するためにこれらのテクノロジーに依存しています。一般的なアプリケーション領域をいくつか示します。

  1. データベース管理システム: データベース管理システム (DBMS) は、検索テクノロジを使用してクエリを処理し、ユーザーがデータベース内の情報を迅速に取得して調査できるようにします。これは、企業や組織においてデータの保存と管理において非常に重要です。

  2. 検索エンジン: 検索エンジンは、情報検索の優れた例です。彼らは検索テクノロジーを使用して、検索クエリに関連する Web ページとドキュメントをユーザーに提供します。検索エンジンは、インターネット上の膨大な量の情報を迅速にインデックス付けして取得し、関連性に基づいてランク付けできなければなりません。

  3. 広告エンジン: オンライン広告プラットフォームは、検索テクノロジーを使用して、広告を表示する場所とターゲットを決定します。これには、広告をどこに表示するか、どのユーザーに広告のクリック率とコンバージョン率を高めるかを決定することが含まれます。

  4. レコメンデーション エンジン: レコメンデーション エンジンは、検索テクノロジーを使用してユーザーの行動や興味を分析し、関連する製品、コンテンツ、またはサービスをユーザーに推奨します。ソーシャル メディア、電子商取引サイト、ストリーミング プラットフォームはすべて、ユーザー エンゲージメントと満足度を高めるためにこのテクノロジーを使用しています。

  5. コンテンツ管理システム: コンテンツ管理システム (CMS) は、取得テクノロジーを使用して、ユーザーが Web サイトまたはアプリケーション上のコンテンツを管理および整理できるようにします。これにより、ユーザーは情報をより簡単に作成、編集、検索できるようになります。

  6. ナレッジ グラフ: ナレッジ グラフは、知識を整理および取得するための基盤となるテクノロジであり、インテリジェントな検索および質問応答システムを構築するために使用されます。これらは、機械が自然言語の質問を理解して答えるのに役立ちます。

要約すると、検索テクノロジーは多くの現代のビジネス システムで重要な役割を果たしており、これらのシステムによる情報の効率的な処理と提供を支援し、それによってユーザー エクスペリエンスを向上させ、収益を増やし、より多くの価値を提供します。これらのテクノロジーの継続的な発展は、インターネットとデジタル経済のさらなる発展も促進しました。

(3) 簡易知識パノラマ分析

ギークタイムの陳東氏の「検索技術の中核20講座」を学ぶことで、検索学習の知識の全体像をすぐに理解することができ、その後の学習内容の多くもこのコースから得られます。

各レベルの詳細な分析は次のとおりです。

  1. ストレージメディア層: データの保存方法は検索効率に直接影響するため、これは検索テクノロジーの基礎です。ディスク、メモリ、分散ストレージなどのさまざまなストレージ メディアの特性、利点、欠点を理解することは、検索パフォーマンスを最適化するために重要です。

  2. データ構造とアルゴリズム層: データ構造とアルゴリズムが検索効率を向上させる鍵となります。さまざまな種類のデータとクエリに対して、適切なデータ構造とアルゴリズムを選択することが重要です。この層には、さまざまなデータ構造とアルゴリズムの深い理解と熟練した使用が含まれます。

  3. 検索専門知識レイヤー: このレイヤーは、エンジニアリング アーキテクチャやアルゴリズム戦略を含む、より高度な検索技術をカバーします。エンジニアリング アーキテクチャの観点からは、スケーラブルで可用性の高い検索システムを構築する方法を理解することが重要です。アルゴリズム戦略の観点からは、転置インデックス、テキスト分析、並べ替えアルゴリズムなど、さまざまな検索アルゴリズムとテクノロジを理解する必要があります。

  4. 検索技術のアプリケーション層: 検索エンジン、広告エンジン、レコメンデーションエンジンなど、実際のビジネスシナリオに検索技術を適用する層です。さまざまなアプリケーション分野には同様のエンジニアリング アーキテクチャとアルゴリズムがある場合がありますが、独自のビジネス要件と処理プロセスもあります。これらのビジネス システムに検索テクニックを適用する方法を学ぶことは、非常に実践的で役に立ちます。

全体として、この階層構造は、基礎知識から高度な応用まで、検索技術を学習するための明確なガイダンスを提供し、包括的な検索技術知識システムを構築するのに役立ちます。

2. 基本的なテクニカル分析

検索とは、データが格納されている場所から必要な情報を効率的に取得するための手法です検索効率とデータ保存方法の間には密接な関係があり、さまざまなデータ構造の保存特性が検索効率に及ぼす影響を研究することは非常に重要です。

  1. データ構造の選択: データの保存と取得のニーズに応じて、さまざまなデータ構造が適しています。たとえば、ハッシュ テーブルは高速ルックアップには適していますが、範囲クエリには適していません。ツリー構造 (バイナリ ツリーや B ツリーなど) は範囲クエリに適していますが、単一ルックアップの場合はハッシュ テーブルほど効率的ではない可能性があります。したがって、さまざまなデータ構造の特性と、それらをいつ使用するかを理解することが重要です。

  2. インデックス構造: データベースや検索エンジンでは、データの検索を高速化するためにインデックス構造が使用されます。逆インデックス、B ツリー インデックス、ハッシュ インデックスなど、さまざまなインデックス構造が、さまざまな種類のクエリやデータに適しています。正しいインデックス構造を選択すると、検索効率が大幅に向上します。

  3. データのエンコードと圧縮: データは、さまざまなエンコードおよび圧縮技術を使用して保存できます。これらの手法により、ストレージ容量が削減され、検索速度にある程度の影響が出る可能性があります。データのエンコードと圧縮技術を選択して適用する方法を理解することは、ストレージと取得の効率を最適化するために重要です。

  4. 分散ストレージ: 大規模システムでは、データが複数のノードに分散されることがよくあります。分散ストレージの原理と分散データを効率的に取得する方法を理解することは、高性能システムを構築するために重要です。

要約すると、データ構造とストレージの特性は検索効率に大きな影響を与えるため、ストレージおよび検索システムの設計と最適化には、これらの概念と技術を深く理解することが重要です。さまざまなアプリケーション シナリオで、適切なデータ構造とストレージ方法を選択すると、システムのパフォーマンスと効率が大幅に向上します。

取得の中心的な考え方は、実際には、データを合理的に整理することでクエリの範囲をできるだけ早く減らすことです。つまり、検索アルゴリズムや検索技術は数多くありますが、その本質は、さまざまなデータ構造の特性を柔軟に適用してデータを整理し、クエリ範囲を迅速に縮小することです。

(1) 配列および連結リストの線形構造検索

基本的な分析

配列とリンク リストは 2 つの異なる線形データ構造であり、特定の操作や使用シナリオに応じて、それらの検索効率はいくつかの面で異なります。

配列の検索効率:

  • 高いランダム アクセス効率: 配列はメモリに継続的に保存されるため、配列内の要素へのランダム アクセスが非常に効率的になります。インデックスを知るだけで、時間計算量 O(1) でその位置の要素に直接アクセスできます。
  • 挿入と削除は非効率的です。配列内の要素を挿入または削除する場合、通常、連続性を維持するために後続の要素を移動する必要があります。このような操作の平均時間計算量は O(n) です。ここで、n は配列内の要素の数です。

リンクリストの検索効率

  • ランダム アクセスは非効率です。リンク リストの要素は継続的に格納されないため、リンク リスト内の要素にアクセスするには、ヘッド ノードまたは他の既知の位置から開始してリンク リストをトラバースする必要があります。したがって、ランダム アクセスの平均時間計算量は O(n) です。ここで、n はリンク リストの長さです。
  • 効率的な挿入と削除: リンクされたリストは通常​​、要素の挿入と削除の際に非常に効率的です。ノードのポインタを変更するだけで、要素を移動する必要はありません。挿入または削除されるノードに直接アクセスできると仮定すると、これらの操作の平均時間複雑さは O(1) です。

要約すると、ランダム アクセス操作を頻繁に実行する必要がある場合、一般に配列の方が効率的です。ただし、挿入および削除操作を頻繁に実行する必要があり、アクセス効率の要件がそれほど高くない場合は、リンク リストの方が適している可能性があります。実際のアプリケーションでは、通常、特定の操作要件に基づいて適切なデータ構造が選択されるか、必要に応じてこれらの操作のパフォーマンスのバランスをとるためにより高いレベルのデータ構造が考慮されます。たとえば、バランスの取れた二分探索ツリーにより、挿入、削除、および検索の効率が向上します。

二分探索を使用して配列の検索効率を向上させる

リンクリストを柔軟に変換して検索効率を向上

学習リンク リストは、「不連続なストレージ スペース」を編成する方法を学習するデータ構造です以下は、検索効率を向上させるために、実際のニーズに基づいてリンク リストの変形を設計する方法を示す簡単な変更例です。

問題の背景: ユーザーがランダムに曲にアクセスできる音楽プレイリスト (または曲ライブラリ) を設計する必要があるが、メモリ使用量は最小限に抑えたいとします。

従来のリンク リスト: 従来の一方向リンク リストでは、曲ごとに 1 つのノードが必要ですが、各ノードは次のノードへのポインターも保存する必要があるため、大量のメモリを浪費します。

改善計画: メモリ使用量を削減し、検索効率を向上させるために、各ノードが曲情報を保存するだけでなく、一定数の曲も保存するバリアント リンク リストを設計できます。この変形リンクリストを「ソングブロックリンクリスト」と呼ぶこともできる。

ソングブロックリンクリストのデザイン

  • 各ノードには、特定の数の曲を保存する小さな配列 (またはリスト) が含まれています。配列のサイズは、実際のニーズに応じて調整して、メモリ使用量と取得効率のバランスを取ることができます。
  • 各ノードには次のノードへのポインタも含まれているため、ソング ブロックのリンクされたリスト全体をたどることができます。

検索操作

  • ユーザーが曲にランダムにアクセスしたい場合、最初にその曲がどのノードの小さな配列にあるかを決定します。二分検索やその他の方法を使用して、すばやく見つけることができます。
  • ノードが見つかると、ノード内の小さな配列で線形検索を実行して、ターゲットの曲を見つけることができます。

このソング ブロック リンク リストの設計により、リンク リストの非連続ストレージ スペースの特性を最大限に活用でき、メモリ使用量を削減しながら、より高速なソング検索操作が可能になります。この例では、実際のニーズに基づいて適切なデータ構造を設計し、リンク リストの中心的な考え方と組み合わせて、検索効率を向上させ、メモリを節約する方法を示します。

(2) ツリーとスキップリストによる非線形構造の検索

基本的な分析

ツリーとスキップ リストは非線形データ構造であり、検索に一定の利点がありますが、状況によってはより適切な場合があります。以下は、非線形構造検索におけるツリーとスキップ リストの分析です。

ツリー (通常は平衡二分探索ツリー)

利点:

  • 効率的な取得: バランスのとれた二分探索ツリー (AVL ツリーや赤黒ツリーなど) は、データが頻繁に変更される場合でもツリーのバランスを維持できるため、効率的な取得パフォーマンスが得られます。平均の取得時間の複雑さは O(log n) です。
  • 挿入と削除: バランスの取れたツリーは、挿入と削除の操作もより効率的です。

該当するシナリオ:

  • データベースのインデックスや順序付けされたコレクションなど、頻繁に挿入、削除、取得操作を必要とする状況に適しています。
  • データの要件が高く、データの順序を維持する必要がある場合は、バランスの取れたツリーが適しています。

ジャンプ台

利点:

  • 効率的な検索: スキップ テーブルは、マルチレベル インデックスによる効率的なスキップ検索を実現するデータ構造です。平均の取得時間の複雑さは O(log n) で、バランスの取れたツリーと同様です。
  • シンプルな実装: バランスの取れたツリーと比較して、スキップ テーブルの実装は比較的シンプルであり、自動バランシングは必要ありません。

該当するシナリオ:

  • これは、効率的な取得操作が必要だが、挿入および削除操作のパフォーマンス要件が比較的低いシナリオに適しています。
  • 順序付きコレクション、高パフォーマンスのスキップ テーブル インデックスなどの実装に使用できます。

概要:

  • ツリーとスキップ リストは、効率的な検索に使用される非線形データ構造です。平均的な取得時間の複雑さにおいては、同様のパフォーマンスを示します。
  • ツリーは、頻繁な挿入、削除、取得が必要なシナリオや、データの高い順序性が必要な状況に適しています。
  • スキップ テーブルは、効率的な取得操作が必要であるが、挿入および削除操作のパフォーマンス要件が比較的低い状況に適しています。スキップテーブルの実装は比較的簡単です。

実際のアプリケーションでは、ツリーまたはスキップ リストの選択は、特定のニーズとパフォーマンス要件によって異なります。挿入および削除操作が頻繁に行われ、データの順序を維持する必要がある場合は、バランスのとれたツリーの方が適している可能性があります。主な関心事が効率的な取得操作であり、挿入と削除のパフォーマンスの低下を許容できる場合は、スキップ リストの方が良い選択となる可能性があります

ツリー構造で二分探索を行う方法

ツリー構造 (特にバイナリ ツリー) は、二分探索によって取得されます。二分探索は、順序付けられたツリー構造などの順序付けされたデータ セットに適した効率的な検索アルゴリズムです。以下は、バイナリ ツリー上でバイナリ検索が実行される方法の基本原理です。

バイナリ ツリーはツリー状のデータ構造であり、各ノードには最大 2 つの子ノードがあり、通常は左のサブツリーと右のサブツリーに分割されます。

ツリー内のノードは特定の順序で配置されます。たとえば、左側のサブツリーには親よりも小さい値のノードがあり、右側のサブツリーには親よりも大きい値のノードがあります (状況に応じてその逆も同様です)。木の性質による)。

二分探索:

  • 二分探索は、ツリーのルート ノードから開始し、ターゲット要素が見つかるか存在しないと判断されるまで、徐々に探索範囲を半分に減らす分割統治戦略です。
  • ルート ノードから開始して、ターゲット要素の値を現在のノードと比較します。
  • ターゲット要素が現在のノードの値より小さい場合は、左のサブツリーの値が現在のノードより小さいため、左のサブツリーで検索を続けます。
  • ターゲット要素が現在のノードの値より大きい場合は、右のサブツリーの値が現在のノードより大きいため、右のサブツリーで検索を続けます。
  • この処理を目的の要素が見つかるか、葉ノードに到達するまで繰り返しますが、それでも見つからない場合は、目的の要素がツリー内に存在しないことになります。

時間計算量:

  • バランスの取れた二分木 (AVL ツリーなど) での二分探索の時間計算量は O(log n) です。ここで、n はツリー内のノードの数です。これは非常に効率的な検索アルゴリズムです。

つまり、ツリー構造は、効率的な検索操作を容易にするために二分検索を使用してデータを秩序だった方法で編成します。順序付き二分木では、目標値と現在のノードの値を比較することで探索方向を決定でき、ステップごとに探索範囲が半分になるため、高速な探索が実現します。このため、バイナリ ツリーは、効率的な検索と並べ替え操作にとって非常に便利なデータ構造になります。

二分探索ツリーの探索空間バランシング方式

二分探索木 (BST) の検索パフォーマンスは、木のバランスに大きく依存します。ツリーのバランスが取れている場合、取得操作の平均時間複雑さは O(log n) レベルに留まります。ただし、BST のバランスが崩れている場合、最悪の場合、取得操作に O(n) 時間がかかり、パフォーマンスが大幅に低下する可能性があります。

BST のバランスを維持するために、次のバランス スキームを採用できます。

平衡二分探索ツリー (AVL ツリー) :

  • AVL ツリーは、ノードの挿入または削除のたびにローテーション操作を実行することでバランスを維持する自己バランシング BST です。
  • 各ノードには、左側のサブツリーの高さと右側のサブツリーの高さの差を表すバランス係数があります。挿入または削除操作の後、バランス係数が更新され、バランス係数の値に応じて、1 回転または 2 回転が実行されてバランスが復元されます。
  • AVL ツリーの平均取得時間の複雑さは O(log n) であり、頻繁に挿入および削除操作を行うシナリオに適しています。

赤黒の木

  • 赤黒ツリーは、ノードに色を付け、一連のルールに従うことでバランスを保つもう 1 つの自己バランス BST です。
  • 赤と黒のツリーのバランスは、ノードの色と特定のルールによって維持されます。これらのルールには、ノードの色を隣接させることができないこと、および任意のノードからその各リーフへのパスには同数の黒いノードが含まれることが含まれます。
  • 赤黒ツリーの平均取得時間の複雑さは O(log n) で、その挿入および削除操作は AVL ツリーよりわずかに効率的である可能性があります。

広がる木

  • スプレッド ツリーは、各検索操作後の回転操作を通じて、最近訪問したノードをルート ノードの位置に移動する適応型 BST です。これは、最近アクセスしたノードの取得を高速化するのに役立ちます。
  • ストレッチされたツリーの平均取得時間の複雑さは O(log n) ですが、挿入および削除操作でパフォーマンスのオーバーヘッドが発生する可能性があります。

適切なバランスの選択は、特定のニーズとパフォーマンス要件によって異なります。AVL ツリーと赤黒ツリーは通常、バランスが必要なシナリオで使用されますが、ストレッチ ツリーは、最近訪問したノードの取得操作を最適化する必要があるシナリオに適しています。バランスのオプションが異なれば、トレードオフ ポイントも異なる場合があるため、選択する際にはアプリケーションの特定のニーズを考慮する必要があります。

スキップテーブルを使用した二分探索の実行方法

スキップ リストは、順序付けられた要素のコレクションに対して効率的な検索、挿入、削除の操作を実行する方法であるデータ構造です。スキップテーブルの二分検索はマルチレベルインデックスの考え方に基づいており、スキップテーブルの二分検索の実行方法の基本原理は次のとおりです。

マルチレベルインデックス

  • スキップ リストには複数のレベル (レイヤー) が含まれており、各レベルは元のデータ要素の一部を含む順序付けされたリンク リストです。基礎となるリンク リストにはすべての要素が含まれ、上部のリンク リストには基礎となるリンク リストの要素の一部が含まれます。
  • リンク リストの各レベルは順序付けされており、各レベルでバイナリ検索を実行できることを意味します。

検索操作

  • スキップリストの検索は、最上位のリンクリストの先頭から開始され、順次下に向かって検索されます。各レベルで、現在のノードの値とターゲット値を比較します。
  • 現在のノードの値がターゲット値より小さい場合、ターゲット値以上のノードが見つかるまで右に移動し続けます。
  • 現在のノードの値がターゲット値より大きい場合、次のレベルに移動して検索を続けます。

アドバンテージ

  • スキップ リストのマルチレベル インデックスを使用すると、一部の要素をすぐにスキップできるため、二分検索と同様に、検索範囲をより小さい領域に絞り込むことができます。
  • スキップ リストの平均取得時間の複雑さは O(log n) です。ここで、n は要素の数です。これにより、状況によっては従来のリンク リストよりも効率的になります。

つまり、スキップ テーブルは、マルチレベルのインデックスを通じてデータを複数の順序付きリンク リストに編成し、それによって二分検索の考え方と同様に効率的な検索操作を実現します。スキップ リストの平均取得時間の複雑さは O(log n) であるため、特定の状況、特に順序付けられた要素のコレクションに対して頻繁な検索操作を実行する必要がある場合には、効率的なデータ構造になります。スキップ リストは実装も比較的簡単で、バランス ツリーのような複雑なバランス アルゴリズムを必要としないため、実際のアプリケーションでは一定の利点があります。

削除および挿入操作の呼び出し

スキップ リストの挿入および削除操作は、基礎となるリンク リストに対して挿入および削除を実行する必要があるだけでなく、マルチレベル インデックスのバランスを維持する必要があるため、比較的複雑です。

挿入操作

  1. まず、新しい要素を挿入するには、挿入位置を見つける必要があります。最上位のリンク リストの先頭から開始し、挿入する位置が見つかるまでレベルごとに下に移動します。

  2. 挿入位置を見つけたら、挿入操作を実行します。これには、基礎となるリンク リストの適切な場所に新しい要素を挿入することが含まれます。

  3. 次に、複数レベルのインデックスを維持するバランスを考慮する必要があります。バランスを維持するには、次の手順を実行してください。

    • 新しい要素をより高いレベルのインデックスに昇格させるかどうかをランダムに決定します。これは、コインを投げたり、その他のランダムな方法で行うことができます。アップグレードすることにした場合は、新しい要素を前のレベルのインデックスに追加し、アップグレードする必要がなくなるまでこの手順を繰り返します。
    • 各レベルで、インデックスが機能するように、挿入位置の左右に十分な要素があることを確認してください。リンクされたリストが特定のレベルで短すぎる場合は、そのレベルでリストを分割し、適切な位置に新しい要素を追加して、インデックスを再作成できます。
  4. 挿入操作が完了した後も、スキップ テーブルの構造は整っていて、マルチレベル インデックスのバランスが保たれている必要があります。

削除操作

  1. 削除操作では、最初に削除する要素の場所を見つける必要もあります。最上位のリンク リストの先頭から開始して、削除する要素が見つかるまでレベルごとに下に移動します。

  2. 削除したい場所が見つかったら、削除操作を実行します。これには、基礎となるリンク リストから要素を削除することが含まれ、関連するインデックスのマージまたは削除が必要になる場合があります。

  3. 多段階のインデックスのバランスを維持することも必要です。バランスを維持するには、次の手順を実行してください。

    • 各レベルで、バランスの取れたインデックスを維持するためにレベル上の一部の要素を削除する必要があるかどうかを確認します。特定のレベルのリンク リストが短すぎる場合は、削除するか、次のレベルにマージすることができます。
  4. 削除操作が完了した後も、スキップ テーブルの構造は整った状態であり、マルチレベル インデックスのバランスが保たれている必要があります。

挿入および削除操作の実装には、重複要素の処理方法や、挿入位置および削除位置での境界ケースの処理方法など、いくつかの詳細が含まれる場合があることに注意してください。ジャンプ テーブルのバランスを維持するには、効率的で正しい操作を確保するために慎重な考慮も必要です。ただし、一般に、ジャンプ テーブルの挿入および削除操作は、上記の手順を慎重に実行することで実現できます。

(三つ)

推奨読書: Spring Boot のソース コードの解釈と原理分析

この本の前身は、ナゲッツ コミュニティで最も売れている小冊子である「Spring Boot ソース コードの解釈と原理分析」であり、コミュニティ全体の 3,600 人を超える開発者がこの小冊子を選択し、ナゲッツ コミュニティの主要小冊子となっています。切り札のSpringチュートリアルはとても良いです!

この冊子により、著者は2020年の人気ランキングでトップ40にランクインし、名誉勲章も8個授与されており、サイトでの販売量もダントツで、読者からは良心的な作品と称され、好まれています。 。

しかし、この小冊子のボリュームと長さには限界があるため、読者からは「まだ未完成で、もっと有益な情報が欲しい。著者がもっと詳しく丁寧に説明してくれることを期待している」という声が寄せられています。

比較的リーズナブルに、スムーズに、体系的に学習したいなら、この本は最適です。

本書は小冊子をベースにバージョンアップしたものであるため、書籍の内容はより体系的であり、小冊子の読者からのフィードバックに基づいて最適化されており、解説もより深く、詳細になっています。単なるアップグレードではなく、リフレッシュです。

Linked-Bearでは、冊子での集中的な知識解説とは異なり、内容を以下の4つのパートに再構成し、浅いところから深いところまで知識を解説しています。
 

参考記事とテクニック

Geek Time - Chen Dong、「検索テクノロジーに関する 20 の重要な講義」

おすすめ

転載: blog.csdn.net/xiaofeng10330111/article/details/132866513