In Ruby Язык программирования myList.shuffle.first
медленнее, чем myList.sample
, так как он полностью перетасовывает список и выбирает первый элемент. Если что-то подобное (сначала перетасовать и сделать первым) сделано в Haskell, будет ли это так же быстро, как позже (выборка массива)? Я предполагаю, что список будет перетасоваться лениво, поэтому выбор первого элемента или выборки будет практически таким же.shuffle и возьмите сначала vs выборки в haskell
2
A
ответ
1
Можно написать, чтобы вести себя таким образом, используя decorate-sort-undecorate pattern: сначала пометьте каждый элемент в вашем списке случайным числом; сортировать по меткам; выбросить этикетки; и возьмите первый элемент. Стандартная реализация sort
сделает эту операцию O (n), как и выборка. Не уверен, есть ли какие-либо пакеты, которые предлагают это из коробки, и, конечно, написанная вручную версия алгоритма может иметь лучшие константы.
Это зависит. В стандарте AFAIK Haskell не предписывается какой-либо конкретный алгоритм перетасовки или выборки, поэтому он полностью зависит от реализации. В любом случае ленивость делает ** не ** означает, что компьютер будет делать как можно меньше вычислений для создания вывода. Это просто означает, что он избегает «явно бесполезных вычислений» для данного выхода. Другими словами, 'head $ shuffle something' вполне может выполнить некоторую операцию, используемую для перетасовки элементов, отличных от первого, в зависимости от реализации. Lazyness просто говорит вам, что при создании первого элемента другие шаги избегают. – Bakuriu
Возможно, вы можете посмотреть и сказать нам [который «shuffle'] (hayoo.fh-wedel.de/?query=shuffle), который вы хотите использовать;) – Carsten
Это можно записать так, чтобы вести себя таким образом, sort-undecorate pattern: сначала пометьте каждый элемент в вашем списке случайным числом; сортировать по меткам; выбросить этикетки; и возьмите первый элемент. Стандартная реализация 'sort' сделает эту операцию O (n), как и выборка. Не уверен, есть ли какие-либо пакеты, которые предлагают это из коробки, и, конечно, написанная вручную версия алгоритма может иметь лучшие константы. –