Re: number of switches

• To: mathgroup at smc.vnet.net
• Subject: [mg47512] Re: number of switches
• From: "Carl K. Woll" <carlw at u.washington.edu>
• Date: Thu, 15 Apr 2004 03:39:14 -0400 (EDT)
• Organization: University of Washington
• References: <c5j6vd\$qqo\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Hi,

A similar problem came up a couple years ago, and probably the fastest
solution is

switches[lst_]:=Tr[BitXor[lst,RotateLeft[lst]]]-If[lst[[1]]==lst[[-1]],0,1]

There are two reasons this is pretty quick. First, rather than splitting up
the list into pairs and comparing them (n-1 pairs for a length n list), we
create 2 lists of length n and operate on just these 2 lists. Second, we
make sure the output of the operation on the two lists is suitable for Tr,
because Tr is one of the fastest Mathematica functions. For example, if we
want to add up all the elements of a list lst, we could do Plus@@lst, or
Tr[lst], and Tr[lst] is much much faster.

In the above code I used RotateLeft to create two lists that were offset by
one, but this necessitated the If statement to fix up end point conditions.
One could instead do something like Tr[BitXor[Drop[lst,1],Drop[lst,-1]]] and
avoid the If statement, creating a perhaps more elegant looking piece of
code at the cost of a slight amount of speed.

Carl Woll

"fake" <fake at fake.it> wrote in message news:c5j6vd\$qqo\$1 at smc.vnet.net...
> Consider the lists {1,1,0,1} and {1,1,0,0},{1,0,1,0,1}.
> The first sequence (1101) switches 2 times (#2digit~#3digit,
> #3digit~#4digit}, the second (1100) 1 time, the third 10101 4 times.
>
> I have the following problem.
> Consider a list of binary digits. Which is the easiest way to count the
> number of switches of the list (using Mathematica commands)?
>

```

• Prev by Date: Append to a file?
• Next by Date: Re: number of switches
• Previous by thread: Re: number of switches
• Next by thread: Re: number of switches