Функция комбинаций комбинаций в фортране? - PullRequest
2 голосов
/ 26 октября 2011

Я написал небольшой модуль на python, чтобы получить все возможности x продуктов, которые вписываются в y общую стоимость. Модуль работает нормально, но медленно. Требуется около шести часов для расчета шести продуктов до 30 итераций каждого продукта. Итак, я подумал переписать сценарий на Фортране и посмотреть, не смогу ли я добиться более высокой скорости. К сожалению, я новичок в Фортране, и сейчас нет большинства библиотек и так далее.

Существует ли модуль / функция, аналогичный itertools.combinations_with_replacement(pool, r) Python в FORTRAN, или модуль, который выполняет то же самое?

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Не делай этого.Вы пытаетесь провести микрооптимизацию, когда вам нужно провести алгоритмическую оптимизацию.Вот почему я утверждал, что не следует использовать решение с экспоненциальным временем на основе itertools, а лучшее рекурсивное решение .

0 голосов
/ 26 октября 2011

FWIW, документация itertools имеет чистый эквивалент Python для комбинации_with_replacement ().Это краткое и не должно быть трудно перевести на Фортран

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)
...