0

連結成分のラベル付けアルゴリズムFortranを実装する必要があります。私はあなたのマトリックスをスキャンする方法について明確な考えを持っていますが、同値類を保存して回復するのはどうですか?他の多くのプログラミング言語では簡単な作業だと思いますが、Fortranでやらなければなりません。どうすればいいですか?

最初の編集:連結成分アルゴリズムに関するウィキペディアの擬似コードに従って、Fortranでの方法がわからないのは

linked[label] = union(linked[label], L)

4

1 に答える 1

3

ここに答えの断片があります。ラベルのセットを表すデータ構造を実装する必要があるようです。最初に決定する必要があるのは、ラベルのモデル化方法を決定することです。私は3つの明白なアプローチを見ます:

  1. 整数を使用します。
  2. 長さ1(または2または必要なもの)の文字変数を使用します。
  3. 必要なコンポーネントを使用してタイプを定義します。

2番目の決定は、一連のラベルを実装する方法です。私は3つの明白なアプローチを見ます:

  1. コンパイル時にサイズが固定されているラベルの配列(整数の配列、文字の配列(len = 2)、タイプ(ラベル)の配列、関係ありません)を使用します。ハードワイヤードのサイズが常に十分に大きくなることをかなり確信する必要があります。これはあまり魅力的なアプローチではありません。私はおそらくそれについて言及すべきではなかったでしょう。
  2. サイズが実行時に設定されるラベルの配列を使用します。これは、割り当て可能な配列を使用することを意味します。可能であれば、実行時にこれを適切なサイズに設定する方法を理解する必要があります。
  3. ラベルのセットを表すタイプを実装します。このタイプは、たとえば、セットをリンクリストとしてモデル化する場合があります。ただし、これがセットをモデル化する唯一の方法ではありません。タイプは、ラベルのセットを配列としてモデル化し、必要に応じて配列のサイズを変更するための凝ったフットワークを実行する場合があります。もちろん、型を定義することにより、セット型によって公開される機能を使用するコードを変更することなく、セットの内部表現を自由に変更できます。

選択内容によっては、既存のラベルのセットに新しいラベルを追加するための和集合関数を実装するのは非常に簡単です。

ただし、この問題に取り組む方法は他にもたくさんあることに注意してください。たとえば、定義済みのコンポーネントラベルのセットから始めて、使用する必要のないものをセットから削除することができます。

あなたはFortranに慣れていないように思われるので、上記を実装するために精通している必要のある言語機能のリストを以下に示します。

  1. コンパイラーが実装するFortran2003標準の量。
  2. 派生型の定義と使用。
  3. 割り当て可能な配列、配列の割り当て、割り当ての移動。
  4. 派生型の配列。
  5. タイプにバインドされた手順。
  6. ポインタ、およびターゲット。
于 2012-05-10T10:48:42.670 に答える