Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
class MulticonjuntoOrdenado():
#Inicializacion del Multiconjunto Ordenado
def __init__(self lista: list):
MulticonjuntoOrdenado._ordenamientoporinsercion(lista)
self.lista = lista
#Agregar un elemento al multiconjunto recuerde que debe quedar en orden
def agregar(self elemento):
self.lista.append(elemento)
MulticonjuntoOrdenado._ordenamientoporinsercion(self.lista)
#Borra una ocurrencia del elemento en el multiconjunto
def borrar(self elemento):
listanueva = []
primerborrado=True
for i in self.lista:
listanueva.append(i)
if elemento == i and primerborrado:
listanueva.pop()
primerborrado= False
self.lista = listanueva
# Verifica que exista el elemento en el multiconjunto
def existe(self elemento)->bool:
for i in self.lista:
if i == elemento:
return True
return False
# Verifica que exista el elemento en el multiconjunto(con Metodo busquedasecuencial )
def existe_busquedasecuencial(self elemento):
pos = 0
encontrado = False
while pos < len(self.lista) and not encontrado:
if self.lista[pos] == elemento:
encontrado = True
else:
pos = pos+1
return encontrado
#Cantidad de veces repetidas que aparece el elemento e en el multiconjunto
def repeticiones_e(self elemento) -> int:
contador = 0
for i in self.lista:
if i == elemento:
contador += 1
return contador
#Devuelve el primer elemento del multiconjunto
def primero(self):
return self.lista[0]
#Devuelve el ultimo elemento del multiconjunto
def ultimo(self):
return self.lista[-1]
#Devuelve en que orden del multiconjunto se encuentra e
def devolver_indice(self elemento):
listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self)
for i in range(len(listasinrepetidos)):
if elemento == listasinrepetidos[i]:
break
return i
#Devolveme el elemento que esta en el lugar i
def devolver_elemento(self indice: int):
listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self)
return listasinrepetidos[indice]
#Devuelve si el multiconjunto es el vacio
def es_vacia(self)->bool:
return self.lista == []
#Devuelve la cantidad de elementos diferentes del multiconjunto
def tamanio(self)->int:
listasinrepetidos = MulticonjuntoOrdenado._listasinrepetidos(self)
contador =0
for i in listasinrepetidos:
contador+=1
return contador
#Devuelve la cantidad de elementos del multiconjunto contando repeticiones
def tamanio_rep(self)->int:
contador =0
for i in self.lista:
contador+=1
return contador
#Muestra el multiconjunto (hace el print del multiconjunto) (traduccion a string)
def __str__(self):
return str(self.lista)
#https://runestone.academy/runestone/static/pythoned/SortSearch/ElOrdenamientoPorInsercion.html
def _listasinrepetidos(self) ->list:
listanueva =[self.lista[0]]
for i in self.lista[1:]:
if i != listanueva[-1]:
listanueva.append(i)
return listanueva
def _ordenamientoporinsercion(unaLista):
for indice in range(1 len(unaLista)):
valoractual = unaLista[indice]
posicion = indice
while posicion > 0 and unaLista[posicion - 1] > valoractual:
unaLista[posicion] = unaLista[posicion - 1]
posicion = posicion - 1
unaLista[posicion] = valoractual
#tests
m = MulticonjuntoOrdenado([]) # m = {}
assert True == m.es_vacia() "Multiconjunto es vacio"
m.agregar(1) # m = {1}
assert False == m.es_vacia() "Multiconjunto no es vacio"
assert 1 == m.tamanio() "Tamanio del multiconjunto es 1"
assert True == m.existe(1) El elemento 1 existe en el multiconjunto
assert False == m.existe(-1) "El elemento -1 existe en el multiconjunto"
m.agregar(1) # m = {1 1}
m.agregar(1) # m = {1 1 1}
assert m.tamanio() == 1 "El multiconjunto tiene un elemento"
assert m.tamanio_rep() == 3 "El multiconjunto tiene un elemento"
assert 3 == m.repeticiones_e(1) "Cantidad de repeticiones del elemento 1 es 3"
assert 0 == m.repeticiones_e(20) "Cantidad de repeticiones del elemento 20 es 0"
m.agregar(2) # m = {1 1 1 2}
m.agregar(3) # m = {1 1 1 2 3}
m.agregar(2) # m = {1 1 1 2 2 3}
assert 2 == m.repeticiones_e(2) "Cantidad de repeticiones del elemento 2 es 2"
m.agregar(5) # m = {1 1 1 2 2 3 5}
assert 5 == m.ultimo()# "El ultimo elemento del multiconjunto es 5"
assert 1 == m.primero()# "El primer elemento del multiconjunto es 1"
m.agregar(3) # m = {1 1 1 2 2 3 3 5}
m.borrar(3) # m = {1 1 1 2 2 3 5}
assert True == m.existe(3)# "Borramos solo una ocurrenicia de 3"
assert True == m.existe_busquedasecuencial(2)# "Borramos solo una ocurrenicia de 3"
assert 1 == m.repeticiones_e(3)# "Cantidad de repeticiones del elemento 3 es 1"
m.borrar(3) # m = {1 1 1 2 2 5}
assert False == m.existe(3)# "No existe el elemento 3"
m.agregar(1) # m = {1 1 1 1 2 2 5}
m.agregar(15) # m = {1 1 1 1 2 2 5 15}
m.agregar(3) # m = {1 1 1 1 2 2 3 5 15}
m.agregar(20) # m = {1 1 1 1 2 2 3 5 15 20}
m.agregar(18) # m = {1 1 1 1 2 2 3 5 15 18 20}
m.agregar(11) # m = {1 1 1 1 2 2 3 5 11 15 18 20}
m.agregar(0) # m = {0 1 1 1 1 2 2 3 5 11 15 18 20}
m.agregar(10) # m = {0 1 1 1 1 2 2 3 5 10 11 15 18 20}
assert 10 == m.tamanio() "El multiconjunto tiene 10 elementos distintos"
assert 14 == m.tamanio_rep() "El multiconjunto tiene 14 elementos contando repeticiones"
assert 5 == m.devolver_indice(10)# "El 10 esta en el indice 5"
assert 11 == m.devolver_elemento(6)# "El elemento del indice 6 es el 11"
m.agregar(-1) # m = {-1 0 1 1 1 1 2 2 3 5 10 11 15 18 20}
m.agregar(-20) # m = {-20 -1 0 1 1 1 1 2 2 3 5 10 11 15 18 20}
m.agregar(-3) # m = {-20 -3 -1 0 1 1 1 1 2 2 3 5 10 11 15 18 20}
m.agregar(-3) # m = {-20 -3 -3 -1 0 1 1 1 1 2 2 3 5 10 11 15 18 20}
assert False == m.existe(22)# "No existe el elemento 22"
assert 4 == m.repeticiones_e(1)# "Cantidad de repeticiones del 1 es 4"
assert -20 == m.primero()# "El primer elemento del multiconjunto es -20"
assert 20 == m.ultimo()# "El ultimo elemento del multiconjunto es 20"