Thanks

I'm busy today,   so haven't got time to consider right now!

Cheers,

Mike



On 11/11/2017 09:27, Linda Alvord wrote:
Mike, Here's my take on this:

bitcomb=: 13 :'(x=+/"1 #:i.2^y)#"2#:i.2^y'
(3 combbitub 5);3 bitcomb 5
┌─────────┬─────────┐
│1 1 1 0 0│0 0 1 1 1│
│1 1 0 1 0│0 1 0 1 1│
│1 1 0 0 1│0 1 1 0 1│
│1 0 1 1 0│0 1 1 1 0│
│1 0 1 0 1│1 0 0 1 1│
│1 0 0 1 1│1 0 1 0 1│
│0 1 1 1 0│1 0 1 1 0│
│0 1 1 0 1│1 1 0 0 1│
│0 1 0 1 1│1 1 0 1 0│
│0 0 1 1 1│1 1 1 0 0│
└─────────┴─────────┘
Mine are in numeric order for binary counting.

Linda

-----Original Message-----
From: Programming [mailto:[email protected]] On Behalf 
Of 'Mike Day' via Programming
Sent: Friday, November 10, 2017 11:28 AM
To: [email protected]
Subject: Re: [Jprogramming] K-sets - bitmap representation of sets. WAS: 
Partitions

Nice.  Note that d doesn't need to be global.
The 63 bit (or 31 for older hardware) limit shouldn't be a problem in practice?!

Wondering if it was possible to avoid boxing,  I've found this version - not 
faster, though more parsimonious in space,  so probably not for serious use:

combbitub =: 4 : 0

assert y<:<:##:_1 (32 b.) 1

lshift =.33 b.

or =.23 b.

k =. (y->:ix =. i.>:d=.y-x)lshift 1

z =. ,0

l =. 1#~ #k NB. "box-sizes" as successively 1s, i.#k, triangular nums etc.

for. i.x do.

nz =. _1 lshift z

z =. nz or {.k

for_j. }. i.#k do. NB. tack on the smaller "boxes"

z =. z, (j{k) or (-j{l) {. nz

end.

l =. +/\. l NB. bump up the box sizes

end.

#: z

)

3 (combbit -: combbitub) 5

1

Cheers,

Mike



10/11/2017 11:46, Erling Hellenäs wrote:

Hi all!

Bitmap version of comb. Unfortunately handles sets of max 63 items.

I tried to make a general version, but hit the problem with #: .

    ts'5 combbit 10'
3.37831e_5 20864
    ts'5 combbool 10'
3.89148e_5 22400
    ts'5 combREBoss 10'
5.51649e_5 44416
    ts'5 comb 10'
3.76319e_5 50944

    ts'13 combbit 26'
0.44835 8.03039e8
    ts'13 combbool 26'
0.880373 1.4314e9
    ts'13 combREBoss 26'
2.39319 4.22297e9
    ts'13 comb 26'
2.59969 4.41693e9

    ts'60 combbit 63'
0.00416474 5.26221e6
    ts'60 combbool 63'
0.0534253 1.73281e7
    ts'60 combREBoss 63'
0.0344776 6.81943e7
    ts'60 comb 63'
0.310994 1.38554e8

combbit=: 4 : 0
assert y<:<:##:_1 (32 b.) 1
lshift=.33 b.
or=.23 b.
k=.<"0 (y->:i.>:d=:y-x)lshift 1
z=. (d$<i.0),<0
for. i.x do. z=. k (or)&.> ,&.>/\. (_1&lshift)&.> z end.
#: ;z
)

Cheers,

Erling Hellenäs


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to