[Jprogramming] e. sensitive to the selectivity of the operands?
Sashikanth Chandrasekaran
schandra_98 at yahoo.com
Tue Apr 4 09:20:54 HKT 2006
Dear J programmers,
Consider two nouns p1, p2 such that most of the
elements of p1 are in p2 but a few of the elements of
p2 are in p1. In my example, all elements of p1 and p2
are unique.
Here is a transcript of my J504 session on Windows:
NB. begin session
(# ; (3!:0)) p1
+----+--+
|1393|32|
+----+--+
(# ; (3!:0)) p2
+----+--+
|4873|32|
+----+--+
6!:2 'r1 =. p1 e. p2'
9.56689
6!:2 'r2 =. p2 e. p1'
2.40757
NB. show the differences in selectivity
(+/ r1) % #p1
0.996411
(+/ r2) % #p2
0.284835
NB. show that elements of p1, p2 are unique.
+/ ~: p1
1393
+/ ~: p2
4873
NB. obverse of I. (x. is length of boolean mask)
invI =: 4 : '1 (y.}) x. # 0'
NB. Rephrase e. using i.
6!:2 'r3 =. p1 (#@:[ invI (i. -. #@:[)) p2'
2.40749
r3 -: r1
1
6!:2 'r3 =. p1 ([: }: >:@:#@:[ invI i.) p2'
2.40755
r3 -: r1
1
NB. Good for the goose, but not for the gander
6!:2 'r4 =. p2 (#@:[ invI (i. -. #@:[)) p1'
9.57313
r4 -: r2
1
NB. end session
Assume that I do not know the distributions of p1, p2
in advance. Is there a way I can get consistent avg.
performance (i.e. 6!:2 'p1 V p2' = approx. 6 seconds
and 6!:2 'p2 V p1' = approx. 6 seconds).
Thanks, -sashi.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Programming
mailing list