| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // The Computer Language Benchmarks Game
- // http://benchmarksgame.alioth.debian.org/
- // contributed by Mike Pall
- local BottomUpTree_count = 0;
- local function BottomUpTree(item, depth){
- ++BottomUpTree_count;
- if (depth > 0){
- local i = item + item;
- --depth;
- return [ item, BottomUpTree(i-1, depth), BottomUpTree(i, depth) ];
- }
- return [ item ];
- }
- local ItemCheck_count = 0;
- local function ItemCheck(tree){
- ++ItemCheck_count;
- if (tree.get(1, false)) return tree[0] + ItemCheck(tree[1]) - ItemCheck(tree[2])
- return tree[0]
- }
- local start = os.clock()
- //check_delayed_release_hooks(false);
- local N = vargv.get(1, 14).tointeger();
- local mindepth = 4
- local maxdepth = mindepth + 2
- if (maxdepth < N) maxdepth = N
- {
- local stretchdepth = maxdepth + 1
- local stretchtree = BottomUpTree(0, stretchdepth)
- print(format("stretch tree of depth %d\t check: %d",
- stretchdepth, ItemCheck(stretchtree)))
- }
- local longlivedtree = BottomUpTree(0, maxdepth)
- for(local depth=mindepth; depth <= maxdepth; depth += 2){
- local iterations = math.pow(2, (maxdepth - depth + mindepth)).tointeger()
- local check = 0
- for(local i=0; i < iterations; ++i){
- check += ItemCheck(BottomUpTree(1, depth)) +
- ItemCheck(BottomUpTree(-1, depth))
- }
- print(format("%d\t trees of depth %d\t check: %d",
- iterations*2, depth, check))
- }
- print(format("long lived tree of depth %d\t check: %d\n",
- maxdepth, ItemCheck(longlivedtree)))
- print("binary-tree", N, os.clock()-start, BottomUpTree_count, ItemCheck_count)
|