2

総コストxに収まる製品のすべての可能性を取得するために、python で小さなモジュールを作成しました。yモジュールは正常に動作しますが、遅いです。各製品の最大 30 回の反復まで、6 つの製品を計算するのに約 6 時間かかります。それで、FORTRAN でスクリプトを書き直して、もう少し速度を上げることができないかどうかを考えていました。残念ながら、私は FORTRAN に慣れていないので、ほとんどのライブラリなどには慣れていません。

FORTRANのpythonに似たモジュール/関数itertools.combinations_with_replacement(pool, r)、または同じことを達成するモジュールはありますか?

4

2 に答える 2

2

そうしないでください。アルゴリズムの最適化を行う必要があるときに、マイクロ最適化を実行しようとしています。これが、itertools に基づく指数時間ソリューションではなく、より優れた再帰的なソリューションを使用すべきだと私が主張した理由です。

于 2011-10-26T18:38:10.937 に答える
0

FWIW、itertools のドキュメントには、combinations_with_replacement() に相当する純粋な python があります。簡潔で、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 に答える