2

我在 python 中编写了一个小模块,以获得x适合y总成本的产品的所有可能性。该模块运行良好,但速度很慢。计算六个产品大约需要六个小时,每个产品最多迭代 30 次。所以,我正在考虑用 FORTRAN 重写脚本,看看我能不能挤出一些更好的速度。不幸的是,我是 FORTRAN 的新手,现在大多数图书馆都不是这样。

FORTRAN中是否有与python类似的模块/功能itertools.combinations_with_replacement(pool, r),或者完成相同事情的模块?

4

2 回答 2

2

不要那样做。当您需要进行算法优化时,您正在尝试进行微优化。这就是为什么我认为您不应该使用基于 itertools 的指数时间解决方案,而应该使用更好的递归解决方案

于 2011-10-26T18:38:10.937 回答
0

FWIW,itertools 文档有一个纯 python 等效于 combination_with_replacement()。它很简洁,翻译成 Fortran 应该不难

def combinations_with_replacement(iterable, r):
    # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
    pool = tuple(iterable)
    n = len(pool)
    if not n and r:
        return
    indices = [0] * r
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != n - 1:
                break
        else:
            return
        indices[i:] = [indices[i] + 1] * (r - i)
        yield tuple(pool[i] for i in indices)
于 2011-10-26T17:39:27.687 回答