i. and i: Improved |
initial writing: 2000-09-07 last updated: 2001-03-16 |
timer=: 6!:2 x=: a.{~ ?(m,2)$#a. y=: a.{~ ?(n,2)$#a. timer 'x i. y' m n J 4.06 J 4.05 50e3 0.2e6 0.0154528 44.4957517 50e3 0.4e6 0.0265048 88.4189361 50e3 0.6e6 0.0372575 133.1981282 50e3 0.8e6 0.0543974 174.9362201 50e3 1.0e6 0.0669739 220.2604263 100e3 0.2e6 0.0223838 0.0542809 100e3 0.4e6 0.0335774 0.0875835 100e3 0.6e6 0.0457131 0.1226720 100e3 0.8e6 0.0588443 0.1561371 100e3 1.0e6 0.0711710 0.1892570 150e3 0.2e6 0.0248805 0.0683701 150e3 0.4e6 0.0373640 0.1023264 150e3 0.6e6 0.0499153 0.1356423 150e3 0.8e6 0.0629233 0.1713201 150e3 1.0e6 0.0748855 0.2048698 200e3 0.2e6 0.0288456 0.0739032 200e3 0.4e6 0.0420858 0.1108959 200e3 0.6e6 0.0535643 0.1459794 200e3 0.8e6 0.0664509 0.1799809 200e3 1.0e6 0.0783569 0.2143956 250e3 0.2e6 0.0327544 0.0810555 250e3 0.4e6 0.0454164 0.1190137 250e3 0.6e6 0.0573341 0.1511932 250e3 0.8e6 0.0700455 0.1887692 250e3 1.0e6 0.0821040 0.2294093 300e3 0.2e6 0.0365066 0.1043462 300e3 0.4e6 0.0490369 0.1405653 300e3 0.6e6 0.0615740 0.1756094 300e3 0.8e6 0.0740457 0.2131410 300e3 1.0e6 0.0863883 0.2496350As well, the hash function on integer vector arguments has been changed. On "average" arguments, the time remains linear but is slower by a factor of 1.5 to 2, but the chance of "bad" arguments with quadratic time is reduced.
a=: 100000 ? 100000 b=: 50000 ? 50000 c=: , (i.1000)+"1 0 ] 1e8 * 1+i.4 e=: c ,a f=: (-c),a J 4.06 J 4.05 e i. b 0.112724 0.0714972 f i. b 0.108505 14.2669