gpt4 book ai didi

arrays - 查看一组值是否出现在数组中的有效方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:15 25 4
gpt4 key购买 nike

我正在尝试检查一个一维整数数组 A 是否包含,在它的每个 size(A) 位置,任何元素整数集 S(也是一维数组),一般情况下 size(S) > 1

简单明了的方法是执行以下嵌套循环:

DO i = 1, size(A)
DO j = 1, size(S)
IF(A(i) == S(j)) ** do something **
ENDDO
ENDDO

问题在于,对于大型数组AS,这个过程效率很低。是否有一个内在的 FORTRAN 子例程或函数可以更快地执行此操作?或者其他方法?

我已尝试执行以下操作,但它不想编译:

DO i = 1, NNODES
IF(A(i) == ANY(S)) ** do something **
ENDDO

出现的错误消息如下:“error #6362: The data types of the argument(s) are invalid.”我正在使用 VS2010 和 Intel Parallel Studio 2013。

最佳答案

表达式

A(i) == ANY(S)

lhs 上有一个整数,在 rhs 上有一个逻辑值。我们不会有任何 C 启发的废话,将它们视为 Fortran 中的可比类型,非常感谢。实际上,情况比这更糟,any 返回逻辑值,但在输入时采用逻辑值数组,因此 any(array_of_int) 无法编译。

你可以试试

ANY(S==A(i))

相反。这应该会给你一个可编译的解决方案。

现在,至于效率,您的第一个片段是 O(n^2)。你可以渐进地做得更好。对两个数组进行排序并串联扫描它们,这是 O(n + n log n) 或类似的东西。如果您在编码方面需要帮助,请更新您的问题,尽管我怀疑它已经在 SO 上被询问和回答。

我强烈怀疑,如果你愿意,你可以检查一下,在单个(显式)循环中使用 any 也将是 O(n^2) - - 因为 any 必须在最一般的情况下运行,所以我看不到任何现实的替代方法来扫描数组——换句话说,另一个循环。

关于arrays - 查看一组值是否出现在数组中的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29631649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com