Hi,

made some experiments with Rebol Find and here are some results:

n: 8192
Find/Block time: 2.44140625E-3 index: 6144
Bfind/block time: 6.103515625E-4 index: 6144
Find/hash time: 9.765625E-4 index: 6144

n: 4096 ; the block size
Find/block time: 1.3427734375E-3 index: 3072
Bfind/block time: 6.103515625E-4 index: 3072
Find/hash time: 4.8828125E-4 index: 3072

; where
bfind: func [
    blk [block!]
    value
    /local d u m de ue me
] [
    d: 1
    u: length? blk
    de: pick blk d
    ue: pick blk u
    while [(m: to integer! (d + u) / 2) > d] [
        either (me: pick blk m) <= value [
            set [d de] reduce [m me]
        ] [
            set [u ue] reduce [m me]
        ]
    ]
    either ue = value [u] [d]
]

Time was measured with 5% relative accuracy.

Regards
    Ladislav

Reply via email to