データ構造での検索:さまざまな検索方法の説明
公開: 2021-05-03通信ネットワークが拡大しているので、人々はインターネットを使用しています! 企業は効率的な管理のためにデジタル化しています。 インターネット上で生成されるデータが増加しているため、データセットは複雑になっています。 データを注意深く効率的に整理、管理、アクセス、分析することが不可欠です。データ構造は最も役立つ手法であり、記事では同じことに焦点を当てています。
目次
データ構造
コンピュータサイエンスでは、データ構造は抽象データ型(ADT)の基礎であり、ADTはデータ型の論理形式です。 データ型の物理レイアウトは、データ構造を使用して実装されます。 さまざまな種類のアプリケーションにさまざまなデータ構造タイプが使用されます。 一部は特定のタスクに特化しています。
データ構造は、データ値とそれらの間の関係、データに適用可能な操作および機能のコレクションです。 特定の形式のデータの整理、管理、および保存を支援します。 したがって、ユーザーはデータに簡単にアクセスして効率的に変更できます。
データ構造は、大規模なデータベースなどの大量のデータを管理するのに役立ちます。 効率的なアルゴリズムは、効率的なデータ構造に基づいて構築されています。 効率的なストレージに加えて、データ構造は、保存されたメモリから情報を効率的に取得する役割も果たします。 これには、配列、リンクリスト、ポインター、検索、スタック、グラフ、キュー、構造、プログラム、並べ替えなどが含まれます。
この記事では、データ構造での検索の概念とその方法について説明します。 概念を明確に理解するために、アルゴリズムの2つの例が詳細に説明されています。 さらに知識、スキル、専門知識を習得するために、記事の最後に記載されているデータ構造に関するオンラインコースを利用できます。
データ構造での検索とは何ですか?
コンピュータのメモリに要素の形で保存されたアイテムのセットから目的の情報を見つけるプロセスは、「データ構造の検索」と呼ばれます。 これらのアイテムのセットは、配列、ツリー、グラフ、リンクリストなどのさまざまな形式になっています。 データ構造で検索を定義する別の方法は、アイテムのコレクション内の特定の特性の目的の要素を見つけることです。
検索方法
データ構造内の検索は、検索アルゴリズムを実装して、保存されている任意の形式のデータ構造から要素をチェックまたは取得することで実行できます。 これらのアルゴリズムは、次のような検索操作のタイプに基づいて分類されます。
- 順次検索
配列または要素のリストは、セットのすべてのコンポーネントをチェックしながら順番にトラバースされます。
たとえば、線形検索。
- インターバル検索
ソートされたデータ構造を検索するために明示的に設計されたアルゴリズムは、間隔検索に含まれています。 これらのアルゴリズムの効率は、線形検索アルゴリズムよりもはるかに優れています。
たとえば、二分探索、対数探索。
これらのメソッドは、データコレクション内の検索項目に一致する要素を検索するためのアルゴリズムにかかる時間に基づいて調べられ、次の式で与えられます。
- 可能な限り最高の時間
- 平均時間
- 最悪の場合
主な懸念事項は、アルゴリズムのパフォーマンスの予測が保証され、平均時間と比較して計算が容易な最悪の場合の時間に関するものです。
この記事の例と概念を説明するために、任意のデータ形式のデータ収集の「n」項目が考慮されます。 主要な操作は、分析とアルゴリズムの比較を簡素化するために使用されます。 データ構造を検索する場合、比較は主要な操作であり、O()で示され、「big-Oh」または「Oh」と発音されます。
データ構造には、線形検索、二分探索、補間探索、ジャンプ探索、指数探索、フィボナッチ探索、サブリスト探索、ユビキタス二分探索、無制限の二分探索、部分文字列検索の再帰関数、再帰プログラムなど、多数の検索アルゴリズムがあります。指定された配列内の要素を線形に検索します。 この記事は、線形および二分探索アルゴリズムとその動作原理に限定されています。
データ構造の線形検索と二分探索について詳しく見ていきましょう。
線形探索
線形探索アルゴリズムは、配列内のすべての要素を順番に探索します。 最高の実行時間は1ですが、最悪の実行時間はnです。ここで、nは検索配列内のアイテムの総数です。
これはデータ構造の中で最も単純な検索アルゴリズムであり、データ収集が終了するまで検索要素と一致するまで、要素のセット内の各項目をチェックします。 データがソートされていない場合は、線形検索アルゴリズムが推奨されます。
線形探索には、以下に示すようにいくつかの複雑さがあります。
- スペースの複雑さ
線形探索のスペースの複雑さはO(n)です。これは、余分なスペースを使用しないためです。ここで、nは配列内の要素の数です。
- 時間計算量
*ベストケースの複雑さ=O(1)は、検索要素が検索配列の最初の要素に存在する場合に発生します。
*最悪の場合の複雑さ=O(n)は、検索要素が要素または配列のセットに存在しない場合に発生します。
*平均複雑度=O(n)は、要素が検索配列のどこかに存在する場合に参照されます。
例、
以下に示すように要素の配列を取りましょう:
45、78、12、67、08、51、39、26
上記の8つの要素の配列で「51」を見つけるために、線形検索アルゴリズムは、ポインタがメモリ空間の51を指すまで、各要素を順番にチェックします。 配列内で51を見つけるにはO(6)時間がかかります。 上記の配列で12を見つけるには、O(3)が必要ですが、26の場合は、O(8)の時間が必要です。
二分探索
このアルゴリズムは、データ収集の真ん中のアイテムを比較することによって特定のアイテムを見つけます。 一致が発生すると、アイテムのインデックスが返されます。 中央のアイテムがアイテムよりも大きい場合、左側のサブ配列の中央のアイテムを検索します。 対照的に、中央のアイテムが検索アイテムよりも小さい場合は、右側のサブ配列でアイテムの中央を探索します。 アイテムが見つかるまで、またはサブ配列のサイズがゼロになるまで、アイテムの検索を続けます。
二分探索では、アイテムの並べ替え順序が必要です。 線形探索アルゴリズムよりも高速です。 それは分裂と征服の原則に基づいて機能します。
実行時の複雑さ=O(log n)
二分探索アルゴリズムには、以下のような複雑さがあります。
- 最悪の場合の複雑さ=O(n log n)
- 平均複雑度=O(n log n)
- ベストケースの複雑さ=O(1)
例、
08要素のソートされたアルゴリズムを見てみましょう。
08、12、26、39、45、51、67、78
上記の要素の配列から51を見つけるには、
アルゴリズムは、配列を08、12、26、39と45、51、67、78の2つの配列に分割します。
51は39より大きいため、配列の右側で要素の検索を開始します。
さらに、45、51と67、78などの2つに分割されます。
51は67よりも小さいため、そのサブ配列の左側で検索を開始します。
そのサブアレイは再び45と51の2つに分割されます。
51は検索要素に一致する番号であるため、配列内のその要素のインデックス番号を返します。
検索要素51は、アレイの6番目の位置にあると結論付けられる。
二分探索は、比較カウントが線形探索アルゴリズムよりも大幅に減少するため、時間を半分に短縮します。
読む: Pythonのデータ構造の種類
補間検索
これは、バイナリ検索アルゴリズムの改良版であり、検索要素のプロービング位置で機能します。 二分探索アルゴリズムと同様に、ソートされたデータ収集でのみ効率的に機能します。
最悪実行時間=O(n)
データ収集でターゲット要素の場所がわかっている場合は、補間検索が使用されます。 電話帳で番号を検索するために、線形検索またはバイナリ検索を使用する代わりに、モニカの電話番号を検索する場合は、名前が「M」で始まるメモリ空間ストレージを直接プローブできます。
結論
データ構造の検索とは、「n」要素の配列から特定の要素を見つけることです。 2つのカテゴリがあります。 検索における順次検索と間隔検索。 ほとんどすべての検索アルゴリズムは、これら2つのカテゴリのいずれかに基づいています。 線形検索とバイナリ検索は、バイナリが線形アルゴリズムよりも高速に機能する2つのシンプルで実装が容易なアルゴリズムです。
線形検索は最も簡単ですが、検索要素に一致するものが見つかるまで各要素をチェックするため、データ収集が正しくソートされていない場合に効率的です。 ただし、データ収集がソートされていて、配列の長さがかなり長い場合は、バイナリ検索の方が高速です。
データ構造は、データセットを処理する際のコンピュータープログラミングの重要な部分です。 プログラマーと開発者は、コンピュータープログラミング技術の基本と更新について、更新とスキルアップを続ける必要があります。 データ構造を扱うプログラマーは、コースを頻繁に選択する必要があります。
データサイエンスについて詳しく知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをご覧ください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。