Re: Algorithm Analysis Course: Should I use Mathematica for projects?
- To: mathgroup at smc.vnet.net
- Subject: [mg127282] Re: Algorithm Analysis Course: Should I use Mathematica for projects?
- From: Richard Fateman <fateman at cs.berkeley.edu>
- Date: Sat, 14 Jul 2012 01:27:28 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <jtkuhh$2a$1@smc.vnet.net> <20120712085845.B341E6859@smc.vnet.net> <jtoglu$qk8$1@smc.vnet.net>
On 7/12/2012 11:53 PM, Andrzej Kozlowski wrote:
> On 12 Jul 2012, at 10:58, Richard Fateman wrote:
>
>> It would be better to use a programming language in which Lists are
>> lists, not arrays and accessing elements in an array of length N is an
>> O(1) operation, not O(N).
>
> I have no idea what was meant by "accessing elements" in the quote above but "retrieving elements"
> from Mathematica's lists ("arrays") is in fact constant time (i.e. O(1)).
No, the cost for retrieving an element from a list/array depends on the
length of the list. It does not depend on the index of the element.
It is interesting a person who ordinarily displays evidence of
substantial knowledge of Mathematica should be unaware of this
situation. Here is the reason, so far as I can tell.
If you mention a name like A, in A[[i]]=A[[i]]+1, Mathematica
re-evaluates all elements in the list/array A.
So changing an element has a cost that is proportional to the number of
elements in A.
Proof.
M = Table[mm[i], {i, 1, 5}]
mm[i_]:=Print[i]
M[[2]]++
prints 1 2 3 4 5
Also confounding the situation is that, I think, something funny
happens if the list/array is larger than some threshold
beyond which Mathematica does not operate the same way.
> In fact, this is the main reason why Mathematica uses this particular data structure.
In almost any other programming language, that's the way it would operate.
>The price of this is that one cannot efficiently extend Mathematica's
lists,
> but there are well discussed ways of avoiding this problem.
If you want to build lists out of other structures, there are certainly
well-known ways of doing this. For example, the language LISP
makes lists of any length out of fixed-length (2-element) cells.
RJF
- References:
- Re: Algorithm Analysis Course: Should I use Mathematica for projects?
- From: Richard Fateman <fateman@cs.berkeley.edu>
- Re: Algorithm Analysis Course: Should I use Mathematica for projects?