lua-users home
lua-l archive

Re: Learning Lua

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Am 17.09.2010 02:40, schrieb liam mail: [mikelu-1009@mike.de> wrote:
Victor Poughon wrote:
> When running it until 1,000,000 it finishes in about 15 seconds. (I have a
> 1.83Ghz processor).
> I'm not really concerned about performance, and i'm sure there's a better
> algorithm for solving this problem. But an equivalent algorithm in
> C<http://pastebin.com/9MMzS4UA>finishes about 6 times faster.
> Is this what one should expect from Lua ?

It runs 8.5x faster with LuaJIT.

Obviously algorithmic improvements pay off a lot here. The
following code takes 60 milliseconds on my machine with LuaJIT:

local bit = require("bit")
local bnot, bor, band = bit.bnot, bit.bor, bit.band
local shl, shr = bit.lshift, bit.rshift

local N = tonumber(arg and arg[1]) or 1000000
local cache, m, n = { 1 }, 1, 1
for i=2,N do
local j = i
for len=1,1000000000 do
j = bor(band(shr(j,1), band(j,1)-1), band(shl(j,1)+j+1, bnot(band(j,1)-1)))
local x = cache[j]; if x then j = x+len; break end
end
cache[i] = j
if j > m then m, n = j, i end
end
io.write("Found ", n, " (chain length: ", m, ")\n")

--Mike


That code may well be faster but it is horrible code that someone learning the language should not have to look at.

Liam
To hard words. It is just to show that it is possible.
The bit operations are challenging me at the moment, but I'm very fine with the cache (very luaish, I think).
Mike, thank you for the stimulation.
--Frank

AltStyle によって変換されたページ (->オリジナル) /