Help / Release / J 5.03 / , Append in Place Implemented
< Help
Jump to navigation
Jump to search
>> << Pri JfC LJ Phr Dic Voc !: Rel NuVoc wd Help Release
, Append in Place Implemented |
initial writing: 2003-07-17 |
The phrases abc=:abc,expression and abc=.abc,expression are now done in place if possible, reducing the amount of time required if done repeatedly. For append in place to be possible,
- There must be sufficient excess space in abc (this is not directly under user control).
- There must be no increase in the number of columns in abc .
- abc must not be “promoted” (e.g. from integer to floating point).
- The internal type must be one of Boolean, literal (one or two bytes), integer, floating point, complex, or symbol.
The following benchmark demonstrates that ordinary append takes quadratic time while append in place takes linear time.
append=: 3 : 0 z=. i.0 for_i. i.y. do. z=. i,z NB. not append in place end. ) appendip=: 3 : 0 z=. i.0 for_i. i.y. do. z=. z,i NB. append in place end. ) ts=: 6!:2 , 7!:2@] NB. time and space ts 'append n'
n | Append | Append in Place | Ratio | |||||||||
1000 | 0.014100 | 15040 | 0.010849 | 13056 | 1.30 | 1.15 | ||||||
2000 | 0.033592 | 27328 | 0.021497 | 23296 | 1.56 | 1.17 | ||||||
4000 | 0.082590 | 51904 | 0.044137 | 43776 | 1.87 | 1.19 | ||||||
8000 | 0.836611 | 101056 | 0.085612 | 84736 | 9.77 | 1.19 | ||||||
16000 | 3.763209 | 199360 | 0.174779 | 166656 | 21.53 | 1.20 | ||||||
32000 | 15.665998 | 395968 | 0.350860 | 330496 | 44.65 | 1.20 | ||||||
64000 | 66.094799 | 789184 | 0.689447 | 658176 | 95.87 | 1.20 | ||||||
128000 | 283.322519 | 1575616 | 1.394492 | 1313536 | 203.17 | 1.20 |