MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: question in mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg80171] Re: [mg80143] Re: question in mathematica
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 14 Aug 2007 07:01:52 -0400 (EDT)
  • References: <fa11b990e477.46baf2d3@bgu.ac.il> <200708130842.EAA27991@smc.vnet.net>

On 13 Aug 2007, at 10:42, m.r at inbox.ru wrote:

> On Aug 11, 1:43 am, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote:
>> First, please send such question to the MathGroup,
>>
>> mathgr... at smc.vnet.net
>>
>> not me personally. (I really have desire, tiem or ability to replace
>> the enitre MathGroup.)
>> So I have decided to post this question to the MathGroup in case
>> someone else finds it interesting.
>>
>> Also, there is something about this question and the earlier you sent
>> me that make sme suspicious.  What do you say "you need to use
>> recursion and pattern matching, Select and Join"? This sounds to me
>> like some sort of test problem so I have decided to answer it but
>> without using any of these functions (although it may not be the
>> simplest way to do this). So here is my answer:
>>
>>   ls = {9, 2, 10, 3, 14, 9};
>>
>> Reverse[Last[Last[Reap[NestWhile[With[{a = First[Ordering[#, -1]]},
>> Sow[#[[a]]]; Take[#, a - 1]] &,ls,Length[#] > 0 &]]]]]
>>
>> {9, 10, 14}
>>
>> On 10 Aug 2007, at 10:12, Ivan Egorov wrote:
>>
>>> I have one more question.
>>
>>> Write a function maxima[lis_List] which, given a list of numbers,
>>> produces a list of those
>>
>>> numbers greater than all those that precede them. For example
>>
>>> maxima[{ 9, 2, 10, 3, 14, 9}] returns { 9, 10, 14}. You need to use
>>> recursion, pattern matching,
>>
>>> Select and Join.
>>
>>> =E2=80=8E
>
> I'll make it easier for myself and use pattern matching:
>
> In[1]:= ReplaceList[{9, 2, 10, 3, 14, 9},
>   {s___, x_, ___} /; Max[s] < x :> x]
>
> Out[1]= {9, 10, 14}
>
> Maxim Rytin
> m.r at inbox.ru
>
>

I just noticed that the two programs are only equivalent if the lists  
of numbers do not contain repetitions. With repetitions the answers  
can differ:

ls = RandomInteger[{0, 100}, {200}];

  Reverse[
    Last[Last[
      Reap[
       NestWhile[
        With[{a = First[Ordering[#, -1]]}, Sow[#[[a]]]; Take[#, a -  
1]] &, ls,
        Length[#] > 0 &]]]]] // Timing

{0.003511, {97, 98, 98, 99, 100}}

ReplaceList[ls, {s___, x_, ___} /; Max[s] < x :> x] // Timing

  {0.039012, {97, 98, 99, 100}}

Of course (in Mathematica 6) one can remove repetitions in a list  
without significant loss of performance.

Andrzej Kozlowski


  • Prev by Date: Re: Drawing Potatoes and a Problem with Piecewise
  • Next by Date: Re: Reading Coordinates from Plot
  • Previous by thread: Re: RE: Re: question in mathematica
  • Next by thread: replace jpg with animated gif?