Comprimir llista dispersa recursiva W94440


Statement
 

pdf   zip   main.cc

thehtml

Una llista d’enters és dispersa si la major part dels elements són 0.

Per exemple, la llista l = [0, 0, 0, 3, 0, 0, 0, 1] és dispersa.

Una llista dispersa es pot comprimir de manera que només emmagatzemi parells (<posicio,valor>) d’aquells elements no nuls. Cal tenir present que el primer parell que emmagatzema conté el nombre d’elements de la llista original.

Donada la llista anterior, la versió comprimida seria: comprimir(l) = [<8,0>, <3,3>, <7,1>]

Implementa una acció RECURSIVA que donada un llista d’enters torna la versió comprimida d’aquesta llista.

Interfície

La capçalera de la funció és la següent:

// Pre: cert
// Post: torna una llista que conté la llista "l" comprimida.
void comprimir(const list<int> &l, list<pair<int,int>> &compr)

Observació

Les funcions i accions que creïs han de treballar només amb llistes (la classe list de la biblioteca STL). Has de trobar una solució RECURSIVA i eficient del problema. En particular, no hi hauria d’haver cap bucle en cap de les funcions/accions que implementis. Si crees funcions/accions auxiliars, afegeix-hi les corresponents Precondició (Pre) i Postcondició (Post). En les crides recursives inclou la hipòtesi d’inducció (HI) i la funció de fita (FF).

IMPORTANT: Només cal enviar el procediment demanat; el programa principal serà ignorat.

Public test cases
  • Input/Output

    comprimir([12, 0, 0, 4, 6, 7, 10]) → [<7,0>, <0,12>, <3,4>, <4,6>, <5,7>, <6,10>]
    comprimir([]) → [<0,0>]
    comprimir([1, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14]) → [<15,0>, <0,1>, <1,3>, <2,2>, <3,5>, <4,4>, <5,7>, <6,6>, <7,9>, <8,8>, <9,11>, <10,10>, <11,13>, <12,12>, <13,15>, <14,14>]
    comprimir([4, 2, 0, 0, 0, 0, 15, 7, 6, 2]) → [<10,0>, <0,4>, <1,2>, <6,15>, <7,7>, <8,6>, <9,2>]
    comprimir([0, 0, 0, 0, 0, 0, 4, 2, 5, 3, 7, 6]) → [<12,0>, <6,4>, <7,2>, <8,5>, <9,3>, <10,7>, <11,6>]
    comprimir([1, 0, 0, 0, 0, 0, 2]) → [<7,0>, <0,1>, <6,2>]
    comprimir([-1, 0, 0, 0, 0]) → [<5,0>, <0,-1>]
    comprimir([0, 0, 0, 0, 0, 3]) → [<6,0>, <5,3>]
  • Information
    Author
    Bernardino Casas
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++