さまざまなデータ構造の実用的な使用[終了]


102

データ構造については多くの話がありますが、データ構造の簡単なリストとその実用的な使い方はありません。私は面接のために勉強しようとしていますが、これは他の多くの人たちと一緒に私を助けてくれると思います。私はこのようなものを探しています:

データ構造-例/用途

ハッシュテーブル-高速データルックアップ...次に例を示します

配列-...

二分木-...

このようなリソースがどこかにある場合は、お知らせください。

ありがとう!

編集:私はウィキペディアがすべてで良いことを意味しますが、ほとんどのページでは実際の使用法をリストしていません。それ以上のものを探しています。

回答:


96

以前にStackOverflowで行った同様の質問でリストを見つけました。

ハッシュテーブル-高速データルックアップに使用-コンパイラ、データベースインデックス、キャッシュ、一意のデータ表現用のシンボルテーブル。

トリー-携帯電話でオートコンプリートやスペルチェックを行うために見られるような辞書。

サフィックスツリー-ほとんどのワードプロセッサで使用される高速全文検索。

スタック-ワードプロセッサでの元に戻す/やり直し操作、式の評価、構文解析、JVMなどの多くの仮想マシンはスタック指向です。

キュー-後で処理するためにさまざまなエンティティが格納および保持されるトランスポートおよびオペレーションの研究。つまり、キューはバッファの機能を実行します。

優先キュー-カーネルでのプロセスのスケジューリング

ツリー-パーサー、ファイルシステム

基数ツリー-IPルーティングテーブル

BSPツリー-3Dコンピュータグラフィックス

グラフ-ソーシャルネットワーキングサイトの接続/関係、ルーティング、通信ネットワーク、データ編成など。

ヒープ-LISPでの動的メモリ割り当て

これは、RV Pradeepによって最初に投稿された回答です

その他、あまり役に立たないリンク:

一部のデータ構造についてのみアプリケーションがリストされています

アプリケーションに焦点を当てず、適切な要約と関連性がある


1
最初のリンクが壊れている
Dan Beaulieu

ありがとう、@ DanBeaulieu。デッドリンクを削除しました。
MXMLLN 2015

1
とてもいい要約。おそらく、使用法のリストが終わることはありませんが、要点はわかります。
Nick L.

1
元に戻す/やり直しは本当にスタックになりますか?元に戻す操作がスタックの最上部からポップされた場合は、やり直すことができません。
トニーL.

5
@TonyL。これは古い質問であることはわかっていますが、2つのスタックが使用されているか、[元に戻す/やり直し]を使用していると思います。アクションを元に戻すと、アクションスタックからポップされ、やり直しスタックに配置されます。やり直す場合は、やり直しスタックからポップしてアクションスタックにプッシュします。用語が間違っているかもしれませんが、そこに例があるはずです。
リックヘンダーソン

14

私はあなたと同じ船に乗っています。技術面接のために勉強する必要がありますが、リストを暗記することはあまり役に立ちません。3〜4時間の余裕があり、さらに詳しく知りたい場合は、チェックアウトをお勧めします

mycodeschool
私はCourseraやブログやテキストなどの他のリソースを調べましたが、それらは十分に包括的ではないか、スペクトルの反対側にあり、必須のコンピュータサイエンス用語では密度が高すぎることがわかりました。

ビデオの男は、データ構造に関する講義をたくさん持っています。ばかげたドローイングや、ほんの少しのアクセントを気にしないでください。選択するデータ構造だけでなく、人々がデータ構造について考えるときに考慮すべき他のいくつかのポイントを理解する必要があります。

  • 一般的なデータ構造の長所と短所
  • 各データ構造が存在する理由
  • メモリで実際にどのように機能するか
  • 特定の質問/演習、および最大の効率を得るために使用する構造の決定
  • 明快なビッグ0の説明

興味があれば、githubにもメモを投稿しました。


7

私が理解しているように、データ構造とは、効率的に管理できる電子システムのメモリにあるデータです。多くの場合、それはメモリのゲームまたはデータの高速アクセスです。メモリに関しても、その最終製品の会社のコストに基づいてデータを管理することでトレードオフが行われます。効率的に管理することで、最終製品の主要な要件に基づいて、データにどのようにアクセスできるかがわかります。これは非常に高レベルの説明ですが、データ構造は非常に大きなテーマです。面接担当者のほとんどは、リンクされたリストと関連する主題である時間に応じて、面接で話し合う余裕のあるデータ構造に飛び込みます。

現在、これらのデータ型は、論理的に構築およびアクセスされる方法に基づいて、プリミティブ、抽象、複合に分割できます。

  • プリミティブデータ構造は、すべてのデータ構造の基本的なビルディングブロックであり、ブール、ch​​ar、int、float、double、stringなどの連続したメモリを備えています。
  • 複合データ構造は、複数のプリミティブデータ型で構成されるデータ構造です。クラス、構造、共用体、配列/レコード。
  • 抽象データ型は、アルゴリズムと呼ばれるそれらに効率的にアクセスする方法を持つ複合データ型です。データへのアクセス方法に応じて、データ構造は線形データ型と非線形データ型に分けられます。リンクリスト、スタック、キューなどは線形データ型です。ヒープ、二分木、ハッシュテーブルなどは非線形データ型です。

これがあなたの飛び込みに役立つことを願っています。


6

Skiennaによる優れた本「アルゴリズム設計マニュアル」には、アルゴリズムとデータ構造の膨大なリポジトリが含まれています。

大量の問題について、データ構造とアルゴリズムが説明され、比較され、実際の使用法が説明されています。著者は、実装とオリジナルの研究論文への参照も提供します。

この本は、問題を解決するのに最適なデータ構造を検索する場合に、机の上に置いておくのに最適です。また、面接の準備にも非常に役立ちます。

もう1つの優れたリソースは、データ構造とアルゴリズムのNIST辞書です


4

データ構造のより実用的なアプリケーションはほとんどありません

赤黒木(挿入/削除が頻繁に行われ、検索が少ない場合に使用)-赤黒木を使用したK平均クラスタリング、データベース、単純なデータベース、辞書内の単語の検索、Webでの検索

AVLツリー(より多くの検索とより少ない挿入/削除)-データ分析とデータマイニング、およびより多くの検索を必要とするアプリケーション

最小ヒープ-クラスタリングアルゴリズム


3

さまざまなデータ構造のランキングは、少なくとも部分的に問題のコンテキストに関連付けられます。アルゴリズムの時間と空間のパフォーマンスを分析する方法を学ぶのに役立ちます。通常、「ビッグO表記」が使用されます。たとえば、バイナリ検索はO(log n)時間です。つまり、要素を検索する時間は、要素数の(ベース2での)ログです。直感的には、各ステップで残りのデータの半分が無関係として破棄されるため、要素数を2倍にすると、時間は1ステップ増えます。(バイナリ検索はかなり適切にスケーリングします。)スペースのパフォーマンスは、より大きなデータセットのメモリ量の増加に関係しています。また、big-O表記は定数係数を無視することに注意してください。データセットが小さい場合でも、定数係数の高いO(n * log n)アルゴリズムよりもO(n ^ 2)アルゴリズムの方が速い場合があります。

時間と空間に加えて、データ構造がソートされるかどうか(ツリーとスキップリストはソートされる、ハッシュテーブルはソートされない)、永続性(バイナリツリーは古いバージョンのポインタを再利用できるが、ハッシュテーブルはその場で変更される)などの他の特性が含まれます。

データ構造を比較するには、いくつかのデータ構造の動作を学習する必要がありますが、パフォーマンスが異なる理由を理解する1つの方法は、いくつかを綿密に調査することです。単一リンクリスト、バイナリサーチツリー、スキップリストを比較することをお勧めします。これらはすべて比較的単純ですが、特性が大きく異なります。値を見つける、新しい値を追加する、すべての値を順番に見つけるなどにどれだけの作業が必要かを考えてください。

アルゴリズムやデータ構造のパフォーマンスの分析については、人々が推奨するさまざまなテキストがありますが、それらが私にとって本当に理にかなっているのはOCamlを学ぶことでした。複雑なデータ構造を処理することはMLの強力なスーツであり、Cのようにポインターとメモリ管理を回避できる場合、それらの動作ははるかに明確になります(ただし、データ構造を理解するためにOCamlを学ぶことはほぼ間違いなく長い道のりです。:))

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.