[過去ログ] Qiita 5 - キータぞ、来たぞ、キータだぞー (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
778(2): デフォルトの名無しさん [] 2024/11/22(金) 00:44:12.61 ID:iUXVzsPN(1/3) AAS
先生の昔の記事
ZEAM開発ログ番外編: Elixir で再帰とStreamのどちらが速いのか,素因数分解で比較してみた
外部リンク:qiita.com
> @zacky1972 による Stream 版その1で,次のような方針を採っています。
> 最初にエラトステネスの篩(sieve)により素数を生成。ただし最初から2と奇数に絞っている。
> def sieve(seq) do
> Stream.unfold(seq, fn s ->
> p = s |> Enum.at(0)
> next = s |> Stream.filter(fn x -> rem(x, p) != 0 end)
> {p, next}
> end)
> end
> 素数の無限数列を生成するために,エラトステネスの篩 (sieve) は @naoya@github さんの「無限リストによるエラトステネスのふるい」を採用しました。
「先生!エラトステネスの篩には剰余計算要らないんですよ」って誰か言ってやらんのか?
Elixir界隈は馬鹿の連鎖が深刻だな。
786: デフォルトの名無しさん [sage] 2024/11/22(金) 11:37:35.39 ID:iUXVzsPN(2/3) AAS
>>778の先生の昔の記事あらためて見直してみたんだが
> 実行結果
> iMac Pro (2017) にてベンチマーク Fact.all_benchmarks を実行してみました。
> CPUとGPUは最高性能の構成,メモリとSSDは標準構成です。
> $ mix run -e "Fact.all_benchmarks"
> Elixir.Fact.FactRecursive1: factorization using recursive calls in compress and factor
> 0.000005 sec.
> Elixir.Fact.FactRecursive2: factorization using recursive calls in factor and Enum in compress
> 0.001167 sec.
> Elixir.Fact.FactStream1: factorization using Stream that generates every prime numbers while half of the target number without dividing the target number
> 2.336041 sec.
> Elixir.Fact.FactStream2: factorization using Stream that generates numbers while half of the target number and filter by sieve without dividing the target number
> 0.000391 sec.
> Elixir.Fact.FactStream3: factorization using Stream that generates numbers while half of the target number or that divided by founded factor
> 0.000201 sec.
> FactRecursive1 ぶっちぎりです。やはり全て再帰呼び出しで書いた方がパフォーマンスは良くなります。
最速と最遅で46万倍違うんだがElixirってたかだか11111の素因数分解するのに記述の違いでこんなに差が出るのか?
ちょっと信じられん。
789: デフォルトの名無しさん [sage] 2024/11/24(日) 20:29:38.71 ID:Uwrnw/3F(1/2) AAS
>>778
> 今回評価したのは次の5つです。
>
> FactRecursive1: @sym_num さんのオリジナル: factor と compress 両方で再帰呼び出しを使用
> FactRecursive2: @sym_num さんの改造版: factor は再帰呼び出し,compress は Enum を使用
> FactStream1: @zacky1972 による Stream 版その1: 最初に素数を生成して余りが0のものをピックアップ。ただし互除法を採用せずに元の数を割らない
> FactStream2: @zacky1972 による Stream 版その2: 2と奇数からなる数列を生成して余りが0のものをピックアップした後で,エラトステネスの篩にかける。互除法を採用せずに元の数を割らない
> FactStream3: @zacky1972 による Stream 版その3: 2と奇数からなる数列を生成して余りが0のものをピックアップして互除法により元の数を割り,探索範囲を絞り込む
表題に「ZEAM開発ログ番外編: Elixir で再帰とStreamのどちらが速いのか,素因数分解で比較してみた」とあるので繰り返し方法の違いによるパフォーマンス比較と思いきや先生のFactStream1〜3は違うことやっとるのなw
これでいいね10もついて誰も突っ込んでないのElixir界隈の闇を感じるわw
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s