Re: programming problem about elements taken
- To: mathgroup at smc.vnet.net
- Subject: [mg72475] Re: [mg72470] programming problem about elements taken
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sun, 31 Dec 2006 05:11:01 -0500 (EST)
- References: <200612301039.FAA21673@smc.vnet.net>
On 30 Dec 2006, at 19:39, Barrow wrote:
> Dear all,
> I have a list of numbers (A),in fact, they are numbers distributed
> over [0,1]. Given parameter \epsilon, I have to choose elements
> from A
> such that their distances are larger than \epsilon, so the elements
> are
> "distringuishable". My goal is to find the maximum number of elements
> from A to meet the above "distinct criterion".
> How to do it with the functions build-in in mathematica ??
> Thanks in advence. Sincerely Barrow
>
Consider this list of 5 numbers:
ls = Sort[Table[Random[], {5}]]
{0.165874, 0.256035, 0.556211, 0.811305, 0.865799}
Suppose we take epsilon = 0.3 and identify the numbers distant by
less than that from one another. Then
Union[ls, SameTest -> (Abs[#1 - #2] < 0.3 &)]
{0.165874, 0.556211, 0.865799}
gives us just three numbers.
With epsilon =0.5 we get
Union[ls, SameTest -> (Abs[#1 - #2] < 0.5 &)]
{0.165874, 0.811305}
and setting epsilon to 0.7
Union[ls, SameTest -> (Abs[#1 - #2] < 0.7 &)]
{0.165874}
Note that when two numbers are identified it is the smaller one that
is kept.
If you prefer to return just the number of elements rather than a
minimal set (which is, of course, not unique) then use
Length[Union[ls, SameTest -> (Abs[#1 - #2] < 0.5 &)]]
2
Andrzej Kozlowski
- References:
- programming problem about elements taken
- From: "Barrow" <GRseminar@gmail.com>
- programming problem about elements taken