текстовый пакет

ал довольно неудачные попытки решить проблему PRIME1 на SPOJ. Я обнаружил, используя это с помощью ByteStringдействительно помогли показатели по чтению в проблемном тексте. Однако использование ByteString для записи результатов на самом деле немного медленнее, чем использование функций Prelude. Я пытаюсь выяснить, правильно ли я это делаю или ожидаемо.

Я провел профилирование и синхронизацию, используя (putStrLn.show) и ByteString, эквивалентные трем различным способам:

Я проверяю каждого кандидата, чтобы увидеть, является ли он основным. Если это так, я добавляю его в список и записываю его с помощью (putStrLn. Show)Я делаю список всех простых чисел и выписываю список, используя (putStrLn. Unlines. Show)Я делаю список всех простых чисел и выписываю список, используя карту (putStrLn. Show)

Я ожидал, что числа 2 и 3 будут работать медленнее, поскольку вы строите список в одной функции и используете его в другой. Распечатывая числа по мере их генерации, я избегаю выделения памяти для списка. С другой стороны, вы делаете системный вызов call с каждым вызовом putStrLn. Правильно? Так что я проверил и # 1 на самом деле был самым быстрым

Наилучшая производительность была достигнута с опцией № 1 и функциями Prelude ([Char]). Я ожидал, что моя лучшая производительность будет вариант № 1 с ByteString, но это не так. Я использовал только ленивые ByteStrings, но я не думал, что это будет иметь значение. Будет ли это?

Некоторые вопросы:

Вы ожидаете, что ByteStrings будут работать лучше для записи целых чисел в стандартный вывод?Я упускаю способ, чтобы генерировать и записывать ответы, которые приведут к повышению производительности?Если я пишу только числа в виде текста, когда, если вообще, есть ли преимущество в использовании ByteString?

Моя рабочая гипотеза состоит в том, что написание Integer с ByteString медленнее, если вы не объединяете их с другим текстом. Если вы объединяете Integer с [Char], то вы получите лучшую производительность, работая с ByteStrings. То есть, перезапись ByteString:

putStrLn $ "the answer is: " ++ (show value)

будет намного быстрее, чем версия, написанная выше. Это правда?

Спасибо за чтение!

Ответы на вопрос(2)

Ваш ответ на вопрос