Dictionaries might provide a useful optimization for compression algorithms
For example: https://rosettacode.org/wiki/LZW_compression#J See also: https://en.wikipedia.org/wiki/DEFLATE https://en.wikipedia.org/wiki/LZ77_and_LZ78 https://en.wikipedia.org/wiki/Prediction_by_partial_matching https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform Thanks, -- Raul On Mon, Nov 18, 2019 at 1:15 PM Devon McCormick <devon...@gmail.com> wrote: > > I would like to see examples of where a dictionary would be the preferred > way of dealing with some data. Does anyone know of any, not necessarily in > J, that are short and to the point? > > > On Mon, Nov 18, 2019 at 1:02 PM Danil Osipchuk <danil.osipc...@gmail.com> > wrote: > > > I quickly put together a minimal implementation along those lines, to have > > a subject for a discussion regarding performance and general usage > > An object 'Map has a hash list mapping hash value to other 2 lists -- boxed > > lists of boxed keys (per hash value) and boxed lists of boxed values. > > > > It is not thoroughly tested and not well thought through about argument > > boxing and ranks, but should be pretty close to what would be a > > straightforward implementation of the thing. > > 'get_Map key' should give a boxed value for a key or raise a error if key > > is absent > > 'somevalue get_Map key' should give a stored value or save and return > > somevalue if key is not there (but I can not catch an exception raised in a > > monad called from a dyad - something silly, but have to go home) > > 'key put__Map value' stores a value > > 'delkey__Map key' removes a key if there > > > > M=: 0 conew'map' > > > > 123 put__M 1230 > > > > 1230 > > > > 'strkey' put__M 'strval' > > > > strval > > > > (<'boxkey') put__M <'boxval' > > > > ┌──────┐ > > > > │boxval│ > > > > └──────┘ > > > > keys__M > > > > ┌─────┬────────┬──────────┐ > > > > │┌───┐│┌──────┐│┌────────┐│ > > > > ││123│││strkey│││┌──────┐││ > > > > │└───┘│└──────┘│││boxkey│││ > > > > │ │ ││└──────┘││ > > > > │ │ │└────────┘│ > > > > └─────┴────────┴──────────┘ > > > > hashes__M > > > > _1845511330 2120780259 _71755953 > > > > values__M > > > > ┌──────┬────────┬──────────┐ > > > > │┌────┐│┌──────┐│┌────────┐│ > > > > ││1230│││strval│││┌──────┐││ > > > > │└────┘│└──────┘│││boxval│││ > > > > │ │ ││└──────┘││ > > > > │ │ │└────────┘│ > > > > └──────┴────────┴──────────┘ > > > > get__M 123 > > > > ┌────┐ > > > > │1230│ > > > > └────┘ > > > > get__M 'not there' > > > > |uncaught throw.: get__M > > > > | get__M'not there' > > > > 'to set to something' get__M 'not there' > > > > |uncaught throw.: get > > > > | get y > > > > delkey__M 123 > > > > 1 > > > > get__M 123 > > > > |uncaught throw.: get__M > > > > | get__M 123 > > > > values__M > > > > ┌────────┬──────────┐ > > > > │┌──────┐│┌────────┐│ > > > > ││strval│││┌──────┐││ > > > > │└──────┘│││boxval│││ > > > > │ ││└──────┘││ > > > > │ │└────────┘│ > > > > └────────┴──────────┘ > > > > keys__M > > > > ┌────────┬──────────┐ > > > > │┌──────┐│┌────────┐│ > > > > ││strkey│││┌──────┐││ > > > > │└──────┘│││boxkey│││ > > > > │ ││└──────┘││ > > > > │ │└────────┘│ > > > > └────────┴──────────┘ > > > > пн, 18 нояб. 2019 г. в 16:10, Henry Rich <henryhr...@gmail.com>: > > > > > Right now I am thinking that the need for dictionaries could be met by a > > > class whose instances are associative memories. Key, values, > > > hashtables, chains if needed would be stored inside the instance. The > > > interface would be simply x Put y and Get y. I reckon this would be > > > fast enough without any special support from the interpreter beyond the > > > hash calculation that is there now. > > > > > > Henry Rich > > > > > > On 11/18/2019 6:10 AM, Danil Osipchuk wrote: > > > > symbols are essentially names optimized for lookup and comparison, as > > > such > > > > they are useful to implement locales efficiently, if one to build an > > map > > > > using those as keys, indeed one gets something resembling K > > dictionaries > > > > http://www.math.bas.bg/bantchev/place/k.html : > > > > > > > > "Another distinguishing feature of K is the use of dictionaries: > > > > associative tables whose keys are symbols, i.e., internalized strings. > > In > > > > turn, dictionaries are the building material of a hierarchically > > > organized > > > > global data space called the K-tree" > > > > > > > > https://github.com/kevinlawler/kona/wiki/Dictionaries > > > > > > > > This is important case of course, but still a restriction. Tables in > > Lua > > > > are more fundamental: > > > > > > > > "The table type implements associative arrays. An associative array is > > an > > > > array that can be indexed not only with numbers, but also with strings > > or > > > > any other value of the language, except *nil*. Moreover, tables have no > > > > fixed size; you can add as many elements as you want to a table > > > > dynamically. Tables are the main (in fact, the only) data structuring > > > > mechanism in Lua, and a powerful one. We use tables to represent > > ordinary > > > > arrays, symbol tables, sets, records, queues, and other data > > structures, > > > in > > > > a simple, uniform, and efficient way. Lua uses tables to represent > > > packages > > > > as well. When we write io.read, we mean "the read entry from the io > > > > package". For Lua, that means "index the table io using the string > > "read" > > > > as the key". > > > > > > > > > > > > > > > > пн, 18 нояб. 2019 г. в 13:11, 'Mike Day' via Programming < > > > > programm...@jsoftware.com>: > > > > > > > >> It's a long time since I played with s: - do J symbols have any > > > >> relevance to dictionaries/directories? > > > >> > > > >> APL/J cousin, K, appears to have the dictionary as pretty central to > > its > > > >> data organisation, but maybe > > > >> that's more akin to J's locales. > > > >> > > > >> Neither topic helpful probably relevant here, but might start a hare! > > > >> > > > >> Mike > > > >> > > > >> On 18/11/2019 02:49, Henry Rich wrote: > > > >>> In J I find myself coming back to simple arrays for most data > > > structures. > > > >>> > > > >>> Trees can be represented as boxes containing subtrees. That works, > > > >>> but is usually more trouble than simply managing an array. > > > >>> > > > >>> Linked lists are used only for efficiency, and in the cases where > > that > > > >>> matters you can easily have a list of indexes to an array of data > > > items. > > > >>> > > > >>> Stacks are just lists, as Devon said. > > > >>> > > > >>> The datatype I really want is a directory object that acts as an > > > >>> efficient and easy-to-use associative memory. You put key/values in > > > >>> and then retrieve a value by presenting its key. Has anyone written > > > >>> an addon for that? > > > >>> > > > >>> (Note: the primitive 128!:8 (create a hash for a noun) was added to > > > >>> J9.01 with this in mind) > > > >>> > > > >>> Henry Rich > > > >>> > > > >>> On 11/17/2019 8:16 PM, 'Bo Jacoby' via Programming wrote: > > > >>>> I failed to communicate the links before, but here they are. > > > >>>> Ordinal fractions are somewhat like infinite-dimensional arrays. > > > >>>> > > > >> > > > > > https://www.academia.edu/10031088/ORDINAL_FRACTIONS_-_the_algebra_of_data > > > >>>> > > > >>>> > > > >>>> http://www.statemaster.com/encyclopedia/Ordinal-fraction > > > >>>> Bo. > > > >>>> > > > >>>> Den søndag den 17. november 2019 22.07.28 CET skrev Devon > > > >>>> McCormick <devon...@gmail.com>: > > > >>>> Trees are simple to implement in J - > > > >>>> https://code.jsoftware.com/wiki/User:Devon_McCormick/Trees - as are > > > >>>> graphs > > > >>>> - > > > >>>> > > > >> > > > > > https://code.jsoftware.com/wiki/NYCJUG/2009-11-10/BreadthFirstGraphTraversal > > > >>>> . > > > >>>> A stack is simple to implement too but I'm not sure why you would > > > >>>> want to > > > >>>> as it's simply a vector with very restrictive rules to manipulate > > it. > > > >>>> Linked lists make no sense in a language with dynamic arrays for > > much > > > >>>> the > > > >>>> same reason since a linked list is mainly a way of implementing > > > dynamic > > > >>>> arrays but has benefit only in a language which lacks these > > natively. > > > >>>> > > > >>>> On Sun, Nov 17, 2019 at 8:24 AM 'Bo Jacoby' via Programming < > > > >>>> programm...@jsoftware.com> wrote: > > > >>>> > > > >>>>> ORDINAL FRACTIONS - the algebra of data > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> | > > > >>>>> | > > > >>>>> | > > > >>>>> | | | > > > >>>>> > > > >>>>> | > > > >>>>> > > > >>>>> | > > > >>>>> | > > > >>>>> | | > > > >>>>> ORDINAL FRACTIONS - the algebra of data > > > >>>>> > > > >>>>> This paper was submitted to the 10th World Computer Congress, IFIP > > > 1986 > > > >>>>> conference, but rejected by the referee.... > > > >>>>> | > > > >>>>> > > > >>>>> | > > > >>>>> > > > >>>>> | > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> Den søndag den 17. november 2019 07.12.02 CET skrev Raul > > > Miller < > > > >>>>> rauldmil...@gmail.com>: > > > >>>>> > > > >>>>> Arrays are roughly analogous to computer memory. > > > >>>>> > > > >>>>> Put different: I think you are asking the wrong question. > > > >>>>> > > > >>>>> (Partially: it's worth thinking about why you pick whichever data > > > >>>>> structures...) > > > >>>>> > > > >>>>> ((It can also sometimes be useful to look on rosettacode for > > > >>>>> examples of > > > >>>>> various daya structure handling mechanisms.)) > > > >>>>> > > > >>>>> Thanks, > > > >>>>> > > > >>>>> -- > > > >>>>> Raul > > > >>>>> > > > >>>>> On Sat, Nov 16, 2019 at 6:00 PM Jimmy Gauvin < > > jimmy.gau...@gmail.com > > > > > > > >>>>> wrote: > > > >>>>> > > > >>>>>> Hi, > > > >>>>>> > > > >>>>>> when dealing with data structures other than arrays such as trees, > > > >>>>> graphs, > > > >>>>>> stacks, linked lists what other programming language do you resort > > > >>>>>> to ? > > > >>>>>> > > > >>>>>> Or do stick with J for all endeavours? > > > >>>>>> > > > >>>>>> > > > >>>>>> Jimmy > > > >>>>>> > > > ---------------------------------------------------------------------- > > > >>>>>> 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 > > > >>>>> > > > >>> > > ---------------------------------------------------------------------- > > > >>> 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 > > > > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > -- > > Devon McCormick, CFA > > Quantitative Consultant > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm