0

我必须实现连接组件标记算法 Fortran。我对如何扫描矩阵有一个清晰的想法,但是存储和恢复等价类呢?我想在许多其他编程语言中是一件容易的事,但我必须在 Fortran 中完成。我该怎么做?

第一次编辑:按照维基百科上关于连接组件算法的伪代码,我不知道如何在 Fortran 中做的是

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

4

1 回答 1

3

这是答案的一些片段。看起来您需要实现一个表示一组标签的数据结构。您必须做出的第一个决定是决定如何为标签建模。我看到了 3 种明显的方法:

  1. 使用整数。
  2. 使用长度为 1(或 2 或任何你想要的)的字符变量。
  3. 使用您希望它具有的任何组件定义一个类型。

第二个决定是如何实现一组标签。我看到了 3 种明显的方法:

  1. 使用大小在编译时固定的标签数组(整数数组,字符数组(len = 2),类型数组(标签),没关系)。你必须相当确定你硬连线的尺寸总是足够大。这不是一个非常吸引人的方法;我可能不应该提到它。
  2. 使用在运行时设置大小的标签数组。这意味着使用可分配数组。如果可能的话,您必须弄清楚如何在运行时将其设置为正确的大小。
  3. 实现表示一组标签的类型。例如,这种类型可以将集合建模为链表。但这不是对集合建模的唯一方法,该类型可能会将标签集合建模为一个数组,并在需要时做一些花哨的步骤来重新调整数组的大小。当然,通过定义类型,您可以自由地更改集合的内部表示,而无需修改使用集合类型公开的功能的代码。

根据您所做的选择,实现联合函数以将新标签添加到现有标签集应该非常简单。

但请注意,还有许多其他方法可以解决此问题。例如,您可以从一组已定义的组件标签开始,然后从该组中删除不需要使用的标签。

由于您似乎是 Fortran 新手,因此这里列出了您需要熟悉以实现上述功能的语言特性。

  1. 您的编译器实现了多少 Fortran 2003 标准。
  2. 定义和使用派生类型。
  3. 可分配数组,分配数组,移动分配。
  4. 派生类型的数组。
  5. 类型绑定的过程。
  6. 指针和目标。
于 2012-05-10T10:48:42.670 回答