2023-06-10 (Sa) [長年日記]
_ 原神 - 万葉育成素材が揃った
イベント。だーかーらー、なんで使い慣れてないキャラを使わせようとするの?? コレイとフィッシュルで激化。途中で心海を手に入れて超開花。 でも、どの元素が足りてないかよくわからんのだ…
昨日:
魔偶剣鬼が46必要。今39。あと7か。ここはあと1日あれば大丈夫だな。
47になった。これで揃った!
_ Ruby の集合 Set のスピード
require 'set'
require 'benchmark'
s1 = Set.new
s2 = Set.new
a1 = []
a2 = []
(1..10000000).each do |i|
s1 << i
s2 << i
a1 << i
a2 << i
end
Benchmark.bm do |x|
x.report { s1.intersection(s2) }
x.report { a1.intersection(a2) }
end
結果。
luna:~ % ruby ./set.rb
user system total real
5.732658 0.197985 5.930643 ( 5.931053)
2.891157 0.124955 3.016112 ( 3.016335)
luna:~ %
おおぅ... 配列の方が倍速…
Hash に intersection がないのが残念だけど。 あ、でも似た感じのがあるな。slice。
require 'set'
require 'benchmark'
N = 10000000
Benchmark.bm do |x|
a1 = nil
a2 = nil
s1 = nil
s2 = nil
h1 = nil
h2 = nil
x.report {
a1 = (0...N).to_a
a2 = a1.dup
}
x.report {
s1 = Set.new(a1)
s2 = s1.dup
}
x.report {
h1 = Hash[a1.zip([true] * N)]
h2 = h1.dup
}
x.report {
s1.intersection(s2)
}
x.report {
a1.intersection(a2)
}
x.report {
h1.slice(*h2.keys)
}
end
結果。 stack overflow になったので、環境変数付けた。
luna:~ % RUBY_THREAD_VM_STACK_SIZE=100000000 ruby ./set.rb
user system total real
0.435573 0.036930 0.472503 ( 0.472699)
6.292491 0.386776 6.679267 ( 6.682895)
7.581674 0.502779 8.084453 ( 8.087664)
6.016323 0.165930 6.182253 ( 6.185322)
2.971486 0.129879 3.101365 ( 3.104045)
3.460383 0.114955 3.575338 ( 3.576446)
luna:~ %
お。いい感じのスピードが出てる。
g2diary を Hash に戻した。 気持ちきびきび動いてる気がする。
[ツッコミを入れる]