AVLツリーと現実の世界


14

学校では、挿入または削除時にAVLツリーのバランスを取る方法を教えています。

この種の知識は、実際に実際どのように役立つのでしょうか?誰かがこの種の知識が実際にいつ役立つのか例を示すことができますか?

私が見たものから、職場ではそのような詳細はほとんど出てきません...

アルゴリズムと一部のデータ構造に関する詳細な知識が重要になることはありますが、AVLツリーの回転(および同様の詳細な概念)などの詳細は重要ではありません。

ありがとう!


7
それが現実の世界としてカウントされる場合、インタビューで役立ちます。
ケビン

これは、一部の人々が学校で三角法を学ぶことについて「口論!私はこれを実際の生活で使用するつもりですか?」と同じ主張であり、答えは「問題のクラス全体を分析して解決する方法を考えた」です。それからいつか、あなたは木を切り倒したいと思って、あなたのパートナーは「それは家に当たらないと確信していますか?」と尋ねます。 救助に誘います!
バイナリの心配

回答:


13

AVLツリーの調査は、次の理由で役立ちます。

  • 抽象データについて推論するための素晴らしいプラクティスです。特定のツリーについて考える必要はありません。あらゆる可能性を考慮する必要があります。この種の推論で練習することは、より単純な場合にも役立ちます。

  • 述語とコントラクトを理解するための素晴らしいプラクティスです。ツリーのバランスを取り、各操作を証明するために使用するツールがバランスを維持していることを確認することは、たとえばセキュリティ上の問題や並列コードに適用できます。

  • 独自のバリアントを作成したり、まったく新しいタイプのデータ構造を作成したりすることもできます。

  • 新しいライブラリまたはプラットフォーム用にAVLツリーを実装する必要があります。

各種類のソートアルゴリズムまたは各種類のバランスの取れたツリーを学習する特定のメリットについて議論できます。最終的にどの学習するかは重要はありませんが、最も重要なトピックを完全に網羅するようにしてください。

現実の世界でアルゴリズムを知ることがどれほど重要かを知りたい場合は、Friendsterの没落についてのIncの記事である「How to Kill a Great Idea!」と、効率を改善するための基本原則のわずかな適用がどのように役立つかを読んでください。


興味深い記事ですが、AVLツリーが友情をどのように助けたのかわかりません。
エラトステネス

B + -Treesがデータベースのインデックス作成に使用されるような例を見てみたいと思います。
ルカフルビエ

5

マクニールポイントに加えて...

赤黒ツリーは、C ++ std::map(少なくともAFAIK)などの標準ライブラリ実装で広くサポートされていない便利で効率的な操作があるため、より直接的に役立つ可能性があります。赤黒ツリーは、「分割」(ツリーを2つに分割し、1つは指定されたキーより小さいキーを含み、もう1つはより大きいキーを含む)と「結合」(逆、大きなキーのツリーと小さなツリーの組み合わせ)をサポートできますキー)は両方ともO(log n)の時間で実行できますが、これらが標準コンテナライブラリでサポートされている場合は、十分に隠されているようです。

ただし、データ構造の「拡張」は一般的です。簡単な例は、O(log n)添え字付けをサポートするために、ほぼすべてのツリーデータ構造のノードにサブツリーのサイズ情報を追加することです。より洗練された例には、間隔ツリーが含まれます。

データ構造を拡張するというアイデアを得ると、特定のアプリケーションに役立つさまざまなバリエーションがあり、ライブラリとして事前にパッケージ化されたものはほとんどありません。既存の標準ライブラリデータ構造(などstd::map)は、ソースコードをコピーして直接変更するまで拡張できません。テンプレートパラメータを使用して拡張することはできません。

もちろん、拡張されたデータ構造を開発するには、基礎となる拡張されていないデータ構造を理解する必要があります。

AVLツリーは、挿入/削除よりも多くの検索を行う場合(およびそれらの分割/結合操作が不要な場合)、赤黒ツリーよりも高速になる可能性があるため、アプリケーションによっては、増強。


1
データ構造を拡張するための+1。ただし、これは非常にまれなことです。ほとんどのプログラマーは、パフォーマンスのために努力する必要はありません(そうでなければ、すべてC ++ / C / Fortran / Assemblyを使用します)。
マチューM.

@Matthieu-それは一般的だと思うが、特定の種類の開発環境でのみだ。それは矛盾ではありません、正直です、...えー、まあ
...-Steve314

私は完全に同意します!:D
マシューM.

5

番号

現実の世界では本当に役に立たない...

考えさせる以外

現実の世界にははるかに困難な問題があり、その多くにまだよく知られた解決策がありません

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