HOWTO · Csharp

C# のグラフライブラリ

この記事では、C# で使用されるグラフ、QuickGraph ライブラリ、およびツールについて学習します。

アクティビティの依存関係のネットワーク表現に今すぐ取り組む必要があるプロジェクトがあるとします。このプロジェクトに取り組むための最良の方法は何でしょうか?これに対する答えはグラフです。

このような場合、グラフは非常に便利であり、いくつかの重要な機能も備えているため、作業がはるかに簡単になります。

C# のグラフとは

グラフについて考えるとき、おそらく、学校の数学の本で見た(そしておそらく今でもそうしている)数値を表す長い縦棒を思い浮かべるでしょう。

しかし、これらは私たちがここで話しているグラフではありません。代わりに、全体を表す相互接続されたパーツを備えたクモの巣状の構造を考えてみてください。

それでは、グラフとは何かを詳しく見ていきましょう。通常、グラフにはノードエッジと呼ばれる 2つの基本的なコンポーネントがあります。ノードエッジを使用して接続されます。最初の 2つのノードエッジを使用して接続されています。そうすれば、ノードはいくつでも接続できます。

したがって、グラフは、特定の概念またはエンティティ間の関係を表現する場合にグラフがどのように構成されているかによって優れています。さまざまな表現タイプ、アルゴリズム、およびデータ構造を使用できます。

グラフの種類は 1つだけではありません。グラフにはいくつかの種類があります。タイプは区別のために多くの要因に依存します。グラフ内でエッジとノードが機能する方法は、通常、そのタイプを定義します。

たとえば、1つのタイプはツリーと呼ばれ、任意のノードを 1つのパスを介して他のノードに接続できます。

多くのシステムの複雑さは、コンピュータサイエンスのネットワークを通じてのみ説明されます。したがって、グラフ理論は非常に便利です。

C# のデータ構造

プロジェクトをグラフの使用が必要であると定義および識別したので、次に行う必要があるのは、プロジェクトのデータ構造を選択することです。

データ構造は要求によって異なるため、グラフを最も効率的に使用するためにデータ構造を慎重に決定してください。使用するデータ構造を決定するための最も重要な要素は、メモリと時間の複雑さです。

C# のアルゴリズム

次に、グラフにアルゴリズムを含める必要があります。これにより、タスクが大幅に簡素化されます。おそらく、いくつかの新しいアルゴリズムを作成する必要はないので、必要になる通常のアルゴリズムを覚えて、グラフでこれらを使用してください。

既存のグラフライブラリに慣れてください。グラフライブラリにあるアルゴリズムは、時間とメモリの複雑さに対して十分に最適化されています。

したがって、グラフを操作する際の最善の策です。

C# のグラフで使用されるツール

以下のツールはグラフで使用されるので、それらをよく理解してください。

  1. アルゴリズムを使用したクエリと変更
  2. シリアル化/逆シリアル化
  3. 視覚化

C#QuickGraph ライブラリとは

2003 年に Jonathan’Peli’de Halleux によって作成された QuickGraph は、C# 用のグラフ構造とアルゴリズムの .NET ライブラリです。直接/間接のグラフデータ構造を提供します。

そのアルゴリズムは、深さ優先検索、幅優先検索、A*検索、最短経路k-最短経路、および最大フローです。

使用するプラットフォームには、.NET Standard 1.3+.NET Core 1.0+.NET Framework 3.5+(およびその他)があります。

QuickGraph は、.NET でデータ構造とアルゴリズムを構築できる無料のオープンソースソフトウェアです。また、安定していませんが、基本的なシリアル化/逆シリアル化のサポートといくつかの視覚化機能も提供します。

QuickGraph のアルゴリズムライブラリは非常に用途が広く、実質的に必要なものがすべて含まれています。使いやすさの点で不十分になることはめったになく、データ構造は多くの領域をカバーし、ほとんどの状況で必要なものを提供します。

QuickGraph の主な欠陥は、その非常に不適切なドキュメントです。それはほとんど使用できず、場合によっては、単に正しくなく、非常に単純で、多様性に欠けています。多くの場合、ドキュメントはこの変更に準拠していませんが、API は変更されます。

これにより、ライブラリソースを手動でチェックすることに依存するようになり、プロセスが複雑になります。したがって、それは非常にイライラします。

これの主な理由は、プロジェクトがまだバージョン 3.6 でスタックしているため、おそらくメンテナンスが不十分であり、この更新は 10 年以上前の 2011 年半ばに行われました。開発者への多くの感謝。ただし、維持管理は改善する必要があります。

それにもかかわらず、そのダウンにもかかわらず、それはまだそこに最良のオプションです。

C# のグラフでの逆シリアル化

デシリアライズとは、グラフの形式を一方から他方に変更することを意味します。これは、グラフを他のアプリケーションにエクスポートし、そのコンテキストを更新して必要に応じて使用する必要がある場合に重要です。

QuickGraph には GraphML にシリアル化するオプションがありますが、XML や CSV などの多くの形式があるため、他の多くの形式に対して独自にシリアル化をコーディングする必要があります。

C# のグラフの GraphDB

GraphDB を使用すると、リレーショナル DB の場合のように、テーブル間の暗黙的な関係ではなく、ノードとエッジをレコードまたは値として扱うことができます。

これにより、より自然で機能的なグラフデータ処理が可能になります。

C# のグラフでの視覚化

コードにグラフィカルな表現を与えると、コードがはるかに理解しやすくインタラクティブになるため、視覚化はプロセスの最も重要な側面の 1つです。これにより、作業がはるかに流動的かつ迅速になります。

さまざまな視覚化ツールを利用できますが、その 1つが yEd グラフィックエディタです。このアプリケーションは素晴らしいです、そしてそれが無料で利用できるのでそれはさらに良いです!

そのレイアウトエンジンとそれに付属するカスタマイズツールは素晴らしいです。

次に、GraphViz があります。これはオープンソースであり、グラフの視覚化のために学界で広く使用されています。DOT 言語のスクリプトが使用されます。回路図面を画像(SVG など)として保存できます。

次に、Microsoft 自動グラフレイアウトがあります。これは GraphViz に似ていますが、より基本的で、Windows および .NET エコシステムと互換性があります。

最後に、Gephi は非常に洗練されたツールであり、単なる視覚化以外にも使用できます。また、無料でオープンソースです。

広範なプラグインサポートを提供します。これは最も効果的な視覚化ツールです。