Я написал алгоритм, чтобы найти решение для проблема суммы подмножеств в Haskell. Подпись
subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a]
QuickCheck, кажется, хорошо подходит для проверки. Например, вот одно из свойств, которое я мог бы проверить:
prop_sumEqualsS l s = case subsetSum l s of
Just solution -> (sum solution) == s
Nothing -> True
Проблема в том, что алгоритм довольно требователен к вычислительным ресурсам, а запуск 100 тестов с большими входными списками занимает целую вечность.
Я пробовал использовать QuickCheck 1, и он работал быстро, но наборы данных, использованные для тестирования, были очень маленькими. После перехода на QuickCheck 2 возникла противоположная проблема. Существует руководстводля QC, но оно кажется старым (нет информации о дате), и я не знаю, что еще применимо к QC2. Учебникдоступен на Haskell Wiki, но там не так много подробностей, только несколько слов о создании экземпляра Произвольного
.
Итак, у меня есть два вопроса:
Редактировать: Чтобы быть более конкретным, я хотел бы протестировать свое решение со списком размером от 0 до 100, содержащим целые числа от -10000 до 10000.