Fortran中的组合重复函数?

2 投票
2 回答
611 浏览
提问于 2025-04-17 05:03

我写了一个小模块,用Python来计算所有可能的x个产品在y总成本下的组合。这个模块运行得不错,但速度有点慢。计算六个产品,每个产品最多迭代30次,居然要花六个小时。所以,我在考虑把这个脚本用FORTRAN重写,看看能不能提高速度。不幸的是,我对FORTRAN还很陌生,也不太了解大多数库等等。

在FORTRAN中,有没有类似于Python的itertools.combinations_with_replacement(pool, r)的模块或函数,能够实现同样的功能?

2 个回答

0

顺便提一下,itertools 的文档中有一个用纯 Python 实现的组合函数,叫做 combinations_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)
2

别这么做。你现在是在做微小的优化,但其实你应该关注算法的优化。这就是我之前提到的,为什么你不应该使用基于itertools的指数时间解决方案,而是应该用更好的递归解决方案

撰写回答