Size: a a a

Clojure — русскоговорящее сообщество

2021 October 29

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
задание из лабораторной работы:

вычислить интеграл методом трапеции, использовать мемоизацию и показать профит
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
тебе скорей всего надо (integral function (* x modifier) modifier)) мемоизировать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
мемоизированный вариант в несколько раз медленнее
Evaluation count : 6940272 in 6 samples of 1156712 calls.
            Execution time mean : 78,123236 ns
   Execution time std-deviation : 10,839200 ns
  Execution time lower quantile : 70,441333 ns ( 2,5%)
  Execution time upper quantile : 95,491345 ns (97,5%)
                  Overhead used : 9,244968 ns

Found 1 outliers in 6 samples (16,6667 %)
 low-severe   1 (16,6667 %)
Variance from outliers : 31,8302 % Variance is moderately inflated by outliers

(calculate-area identity 4)
=> 0.0020001249999999997
(do
 #?(:clj (in-ns 'user.memoize))
 (->> (calculate-area-m identity 4)
      #?@(:clj [criterium.core/quick-bench] :cljs [(dotimes [_ 10000]) time (dotimes [_ 10])]))
 (println "")
 (prn (quote (calculate-area-m identity 4)))
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
 (calculate-area-m identity 4)
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
)
Evaluation count : 1607772 in 6 samples of 267962 calls.
            Execution time mean : 351,223183 ns
   Execution time std-deviation : 34,214818 ns
  Execution time lower quantile : 317,171838 ns ( 2,5%)
  Execution time upper quantile : 396,683112 ns (97,5%)
                  Overhead used : 9,244968 ns

(calculate-area-m identity 4)
=> 0.0020001249999999997
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
а если в функцию thread sleep добавить, скорее всего получится показать профит
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
мемоизировать надо походы в сеть, когда время длится секундами.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
И стандартный memoise использует атом, у которого потокобезопасное обновление. Для однопоточного варианта можно использовать volatile
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
т.е. скопипастить код memoise, только использовать volatile и v-функции
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
если в теле функции integral реализовать memoize то анонимная функция в аргументе будет с тем же значением?
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
ну она на каждом коле будет создаватся новая
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
чтение атома — быстрая операция
а вот конверсия аргументов в ключ для хранения результатов и вытаскивание результатов из кэша по этому ключу — уже не такая быстрая
думаю, что volatile ничего не даст
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
тогда у меня в голове не складывается, как при необходимости применить к числу анонимную функцию использовать мемоизацию, если  значение анонимной функции будет каждый раз разное, только если мемоизировать внутри самой анонимной функции по числу в качестве единстенного аргумента, либо в фп есть иные хитрые приёмы для вычисления интеграла
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
тебе надо именно интеграл вычислять?
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
ну твою эту анонимную функцию можно задефать
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
да
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
задефать это сделать статической?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ты можешь мемоизировать локально
(let [f (memoize (partial calculate function))])
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
так мемоизировать калкулейт бесполезно
источник

KR

Kostyantin Randomnam... in Clojure — русскоговорящее сообщество
надо именно (fn [function x modifier] ...) мемоизировать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вот и пиши (memoize (fn [function x modifier] ...))
источник

PL

Pavel Lygin in Clojure — русскоговорящее сообщество
кажется понял направление, спасибо
источник