[Haskell-beginners] Removing the biggest element from a list -
maybe slow?
Nathan Huesken
haskell at lonely-star.org
Mon May 24 09:42:21 EDT 2010
On Mon, 24 May 2010 15:27:03 +0200
Lafras Uys <lafras at aims.ac.za> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> > I want to remove the biggest element from a list:
> >
> > withoutBiggest (x:xs) =
> > withoutBiggestImpl (biggest x xs) [] (x:xs)
> > where
> > biggest :: (Ord a) => a -> [a] -> a
> > biggest big [] = big
> > biggest big (x:xs) =
> > if x > big then
> > biggest x xs
> > else
> > biggest big xs
> > withoutBiggestImpl :: (Eq a) => a -> [a] -> [a] -> [a]
> > withoutBiggestImpl big before (x:xs) =
> > if big == x then
> > before ++ xs
> > else
> > withoutBiggestImpl big (before ++ [x]) xs
> >
> >
> > Works, but I am a little concerned that this is
> > slower than needed, because the list has to be iterated twice.
> >
> > Can this be done faster?
>
> import Data.List
> init sort xs
>
> or
>
> import Data.List
> delete (maximum xs) xs
I see. I would think, the first solution takes still to much time
because it needs to sort the list.
Is "delete" a fast operation (O(1))? or does it internally traverse
the list?
Thanks!
Nathan
More information about the Beginners
mailing list