Новое состояние в неограниченном поколении последовательности Хемминга
(это захватывающе!) Я знаю, предмет хорошо известен. Уровень техники (в Хаскеле и других языках) для эффективной генерации неограниченной возрастающей последовательности чисел Хэмминга, без дубликатов и без пропусков, долгое время был следующим (AFAIK - и, кстати, он эквивалентеноригинальный код Edsger Dijkstra тоже):
hamm :: [Integer]
hamm = 1 : map (2*) hamm `union` map (3*) hamm `union` map (5*) hamm
where
union a@(x:xs) b@(y:ys) = case compare x y of
LT -> x : union xs b
EQ -> x : union xs ys
GT -> y : union a ys
Я задаю вопрос:can you find the way to make it more efficient в какой-либо значительной мере? Это все еще современное состояние или действительно возможно улучшить это, чтобы запуститьtwice faster и с лучшимиэмпирические порядки роста Загружать?
Если ваш ответyesПожалуйста, покажите код и обсудите его скорость и эмпирические порядки роста по сравнению с вышеупомянутым~ n^1.05 .. n^1.10
за первые несколько сотен тысяч произведенных номеров). Также, если он существует, может ли этот эффективный алгоритм быть расширен до получения последовательности гладких чисел с любым заданным набором простых чисел?