子供がやってた算数問題(改)
http://r-statistics-fan.hatenablog.com/entry/2014/03/03/220956 にあるプログラム。
あまり速くないと言われてる gtools の permutations() ではあるが,使い方によっては,べらぼうに速い。あっという間に解が得られる。(私も意外であったが)
f3 = function() {
library(gtools)
x = permutations(10,4)
apply(x, 1, function(y) {
if (all(y != 6) && abs(y[1]-y[2]) == 6) {
z1 = abs(diff(y))
z2 = abs(diff(z1))
z3 = abs(diff(z2))
if (length(table(c(y, z1, z2, z3))) == 10) {
print(c(y, z1, z2, z3))
return
}
}
})
invisible()
}
> system.time(f3())
[1] 9 3 10 8 6 7 2 1 5 4
ユーザ システム 経過
0.101 0.001 0.101
プログラム実行時間を短くするにはいくつかのやり方があるが,
1. 探索範囲を狭くする
2. 全体の実行時間を短くするためには,準備に実行時間をかければ,その努力は十分に報われることもある
というようなものもあるということで。