文字列の繰り返し(追従記事)
id:hogelog による記事: 文字列の繰り返し - hogeなlog を見たので、Windows上のPython Shell上で試してみた。
def naive(s, i): st = "" for x in xrange(i): st = st + s return st def beki(s, i): if i < 1: return None if i == 1: return s elif i&1 == 1: return beki(s, i-1) + s else: res = beki(s, i/2) return res + res
って感じで。アルゴのリズムは冪乗 - Wikipediaの後者を参考に。
>>> def keisoku(i): s = time() naive("a",i) print "naive : %f" % (time() - s) s = time() beki("a",i) print "beki : %f" % (time() - s) >>> keisoku(100) naive : 0.000000 beki : 0.000000 >>> keisoku(5000) naive : 0.000000 beki : 0.000000 >>> keisoku(50000) naive : 0.000000 beki : 0.000000 >>> keisoku(500000) naive : 0.094000 beki : 0.000000 >>> keisoku(5000000) naive : 3.843000 beki : 0.016000 >>> keisoku(50000000) naive : 360.109000 beki : 0.109000
論理からすると当たり前だけど、冪乗にした方が文字列コピーの回数が少なくなるので断然早いですね!
元記事は「処理系とかのソースコードには叡智が詰まってんぜー」というノリですが、ちょいと試してみたかったので、まあ。
研究とは全く関係ないけどね!!
最後の360秒はわりと待ってんのつらかった。もう眠いよ。