Fortran findloc内部函数

Mad*_*jic 3 fortran

我正在使用Intel的Visual Fortran Composer XE 2011,12.1.3537.2010,它似乎findloc不支持固有功能(在2008 fortran中型扩展中添加)。

我想做的是在数组中查找特定值并返回索引。通常,我使用小型阵列。

我有两个问题:

  1. 我想用此功能替换线性和二进制搜索,当我在其他线程中阅读时,尚不清楚哪种算法更可实现最佳性能。内在函数如何处理该问题?
  2. 由于我的编译器不支持此功能,findloc因此可以使用以下方法进行仿真:

    minloc( (array-value)**2 )
    
    Run Code Online (Sandbox Code Playgroud)

    但是...性能如何?还有其他想法吗?

Hig*_*ark 5

如果我正确理解了您的第一个问题,那么您想知道如何实现一个尚未实现的功能?具体来说,您想了解findloc与线性和二进制搜索相比的性能特征,因为您可能自己实现了它们?语言标准中肯定没有任何内容规定如何实现功能,因此,您所提问题的答案完全取决于编译器。

关于第二个问题,我希望大多数编译器会响应您的expression导致创建一个临时数组array-value。创建此类临时文件可能是一项相对耗时的操作,并将添加到对的调用的执行时间上minlocminloc我不知道英特尔如何实现工作,但我希望它是对阵列的线性扫描。内部函数无法知道数组已排序,并且二进制搜索可能会更快。

如果您的阵列较小且未排序,我希望线性搜索是最快的选择。如果它们很小且已排序,则可以编写二进制搜索(或类似搜索)以胜过线性搜索。我希望这两种方法的性能图会有一个交叉点,这个交叉点与您对小尺寸的想法无关,我不知道。

但是,与性能问题一样,我(或其他人)认为毫无用处的是,数据是您所需要的,为什么不继续进行一些测量?