Exercitium1-0.1.0.0: Problemas de Exercitium (Volumen 1)

CopyrightExercitium
LicenseGPL-3
MaintainerJoseA.Alonso@gmail.com
Safe HaskellSafe
LanguageHaskell2010

Numero_de_inversiones

Description

Número de inversiones

Se dice que en una sucesión de números x(1), x(2), ..., x(n) hay una inversión cuando existe un par de números x(i) > x(j), siendo i < j. Por ejemplo, en la permutación 2, 1, 4, 3 hay dos inversiones (2 antes que 1 y 4 antes que 3) y en la permutación 4, 3, 1, 2 hay cinco inversiones (4 antes 3, 4 antes 1, 4 antes 2, 3 antes 1, 3 antes 2).

Definir la función

numeroInversiones :: Ord a => [a] -> Int  

tal que (numeroInversiones xs) es el número de inversiones de xs. Por ejemplo,

>>> numeroInversiones [2,1,4,3]
2
>>> numeroInversiones [4,3,1,2]
5

Synopsis

Documentation

numeroInversiones :: Ord a => [a] -> Int Source #

1ª solución (por recursión y compresión).

numeroInversiones2 :: Ord a => [a] -> Int Source #

2ª solución (por recursión y filter).

numeroInversiones3 :: Ord a => [a] -> Int Source #

3ª solución (por comprensión)

numeroInversiones4 :: Ord a => [a] -> Int Source #

4ª solución (con vectores)

prop_equiv_numeroInversiones :: [Int] -> Bool Source #

(prop_equiv_numeroInversiones xs) se verifica si las definiciones de numeroInversiones son equivalentes sobre xs. Por ejemplo,

>>> all prop_equiv_numeroInversiones [[2,1,4,3], [4,3,1,2]]
True

verifica_equiv_numeroInversiones :: IO () Source #

Comprueba la equivalencia de las definiciones de numeroInversiones.

>>> verifica_equiv_numeroInversiones
+++ OK, passed 100 tests.

Comparación de eficiencia

> numeroInversiones [2000,1999..1]
1999000
(1.94 secs, 257,172,224 bytes)
> numeroInversiones2 [2000,1999..1]
1999000
(0.20 secs, 113,228,368 bytes)
> numeroInversiones3 [2000,1999..1]
1999000
(27.40 secs, 672,913,536 bytes)
> numeroInversiones4 [2000,1999..1]
1999000
(4.18 secs, 832,705,200 bytes)